diff --git a/.cursor/rules/general.mdc b/.cursor/rules/general.mdc new file mode 100644 index 00000000..3805373f --- /dev/null +++ b/.cursor/rules/general.mdc @@ -0,0 +1,9 @@ +--- +description: +globs: +alwaysApply: true +--- + +latest msrv is 1.89.0 + +After doing any task run ./ci.sh \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1ea5f67..cf4de4bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,20 +14,14 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Read rust-toolchain.toml - id: toolchain - shell: bash - run: | - TOOLCHAIN=$(cat rust-toolchain.toml | grep 'channel' | cut -d'"' -f2) - echo "version=${TOOLCHAIN}" >> "$GITHUB_OUTPUT" - - uses: dtolnay/rust-toolchain@master + - uses: dtolnay/rust-toolchain@nightly with: - toolchain: ${{ steps.toolchain.outputs.version }} + components: rustfmt - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" - name: Check formatting - run: cargo fmt --all -- --check + run: cargo +nightly fmt --all -- --check clippy: name: Clippy @@ -69,16 +63,15 @@ jobs: - name: Check documentation env: RUSTDOCFLAGS: -D warnings - run: cargo doc --no-deps --all-features + run: cargo doc --no-deps --all-features --workspace coverage: name: Code Coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@master + - uses: dtolnay/rust-toolchain@nightly with: - toolchain: nightly components: llvm-tools-preview - uses: Swatinem/rust-cache@v2 with: @@ -86,7 +79,7 @@ jobs: - name: Install cargo-llvm-cov uses: taiki-e/install-action@cargo-llvm-cov - name: Generate code coverage - run: cargo llvm-cov --all-features --workspace --branch --lcov --output-path lcov.info + run: cargo +nightly llvm-cov --all-features --workspace --branch --lcov --output-path lcov.info - name: Upload coverage to Codecov uses: codecov/codecov-action@v5 with: @@ -121,5 +114,7 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: "true" + - name: Install cargo-nextest + uses: taiki-e/install-action@nextest - name: Run tests - run: cargo test --all-features + run: cargo nextest run --all-features diff --git a/.gitignore b/.gitignore index 6e3b899a..1ae216de 100644 --- a/.gitignore +++ b/.gitignore @@ -26,11 +26,20 @@ perf.data # Misc /extractor/build /extractor/out -vendor/ +# vendor/ /extractor/classes /extractor/run /extractor/bin .trigger-release .trigger-debug .trigger -valence/ +# valence/ + +proxy.crt +proxy_private_key.pem +root_ca.crt +root_ca.pem +root_ca.srl +server.crt +server_private_key.pem +logs diff --git a/Cargo.lock b/Cargo.lock index 4dc9c7fa..a56f5d40 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,124 +12,12 @@ dependencies = [ "regex", ] -[[package]] -name = "ab_glyph" -version = "0.2.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - -[[package]] -name = "accesskit" -version = "0.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" -dependencies = [ - "enumn", - "serde", -] - [[package]] name = "accesskit" version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529" -[[package]] -name = "accesskit_atspi_common" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" -dependencies = [ - "accesskit 0.17.1", - "accesskit_consumer", - "atspi-common", - "serde", - "thiserror 1.0.69", - "zvariant", -] - -[[package]] -name = "accesskit_consumer" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" -dependencies = [ - "accesskit 0.17.1", - "hashbrown 0.15.2", - "immutable-chunkmap", -] - -[[package]] -name = "accesskit_macos" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" -dependencies = [ - "accesskit 0.17.1", - "accesskit_consumer", - "hashbrown 0.15.2", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "accesskit_unix" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" -dependencies = [ - "accesskit 0.17.1", - "accesskit_atspi_common", - "async-channel 2.3.1", - "async-executor", - "async-task", - "atspi", - "futures-lite 2.6.0", - "futures-util", - "serde", - "zbus", -] - -[[package]] -name = "accesskit_windows" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" -dependencies = [ - "accesskit 0.17.1", - "accesskit_consumer", - "hashbrown 0.15.2", - "paste", - "static_assertions", - "windows", - "windows-core", -] - -[[package]] -name = "accesskit_winit" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" -dependencies = [ - "accesskit 0.17.1", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "raw-window-handle", - "winit", -] - [[package]] name = "addr2line" version = "0.24.2" @@ -141,22 +29,32 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aes" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom 0.2.15", + "getrandom 0.3.3", "once_cell", - "serde", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -199,7 +97,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.9.0", + "bitflags 2.9.4", "cc", "cesu8", "jni", @@ -242,9 +140,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.18" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -257,47 +155,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" [[package]] name = "anstyle-parse" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "anstyle-wincon" -version = "3.0.7" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" dependencies = [ "anstyle", - "once_cell", - "windows-sys 0.59.0", + "once_cell_polyfill", + "windows-sys 0.60.2", ] [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" -dependencies = [ - "backtrace", -] +checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" [[package]] name = "approx" @@ -308,24 +203,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "arboard" -version = "3.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" -dependencies = [ - "clipboard-win", - "core-graphics", - "image 0.25.5", - "log", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", - "parking_lot", - "windows-sys 0.48.0", - "x11rb", -] - [[package]] name = "arc-swap" version = "1.7.1" @@ -344,12 +221,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "as-raw-xcb-connection" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" - [[package]] name = "ash" version = "0.38.0+1.3.281" @@ -376,7 +247,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -395,9 +266,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" dependencies = [ "concurrent-queue", "event-listener-strategy", @@ -407,106 +278,40 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.13.1" +version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" dependencies = [ "async-task", "concurrent-queue", "fastrand 2.3.0", - "futures-lite 2.6.0", + "futures-lite 2.6.1", + "pin-project-lite", "slab", ] [[package]] name = "async-fs" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +checksum = "09f7e37c0ed80b2a977691c47dae8625cfb21e205827106c64f7c588766b2e50" dependencies = [ "async-lock", "blocking", - "futures-lite 2.6.0", -] - -[[package]] -name = "async-io" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite 2.6.0", - "parking", - "polling", - "rustix 0.38.44", - "slab", - "tracing", - "windows-sys 0.59.0", + "futures-lite 2.6.1", ] [[package]] name = "async-lock" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "event-listener-strategy", "pin-project-lite", ] -[[package]] -name = "async-process" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" -dependencies = [ - "async-channel 2.3.1", - "async-io", - "async-lock", - "async-signal", - "async-task", - "blocking", - "cfg-if", - "event-listener 5.4.0", - "futures-lite 2.6.0", - "rustix 0.38.44", - "tracing", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-signal" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" -dependencies = [ - "async-io", - "async-lock", - "atomic-waker", - "cfg-if", - "futures-core", - "futures-io", - "rustix 0.38.44", - "signal-hook-registry", - "slab", - "windows-sys 0.59.0", -] - [[package]] name = "async-task" version = "4.7.1" @@ -516,17 +321,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "async-trait" -version = "0.1.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -546,68 +340,17 @@ dependencies = [ "portable-atomic-util", ] -[[package]] -name = "atspi" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" -dependencies = [ - "atspi-common", - "atspi-connection", - "atspi-proxies", -] - -[[package]] -name = "atspi-common" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1909ed2dc01d0a17505d89311d192518507e8a056a48148e3598fef5e7bb6ba7" -dependencies = [ - "enumflags2", - "serde", - "static_assertions", - "zbus", - "zbus-lockstep", - "zbus-lockstep-macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "atspi-connection" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" -dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite 2.6.0", - "zbus", -] - -[[package]] -name = "atspi-proxies" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" -dependencies = [ - "atspi-common", - "serde", - "zbus", - "zvariant", -] - [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -643,7 +386,7 @@ dependencies = [ "envy", "fastrand 2.3.0", "geometry", - "glam 0.29.3", + "glam", "hyperion", "hyperion-clap", "hyperion-genmap", @@ -665,9 +408,9 @@ dependencies = [ "tracing-subscriber", "uuid", "valence_bytes", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", "valence_server", - "valence_text 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_text", ] [[package]] @@ -685,7 +428,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed3561712cf49074d89e9989bfc2e6c6add5d33288f689db9a0c333300d2d004" dependencies = [ - "accesskit 0.18.0", + "accesskit", "bevy_app 0.16.1", "bevy_derive 0.16.1", "bevy_ecs 0.16.1", @@ -722,9 +465,9 @@ dependencies = [ "cfg-if", "console_error_panic_hook", "ctrlc", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "log", - "thiserror 2.0.12", + "thiserror 2.0.16", "variadics_please", "wasm-bindgen", "web-sys", @@ -748,21 +491,21 @@ dependencies = [ "bevy_tasks 0.16.1", "bevy_utils 0.16.1", "bevy_window", - "bitflags 2.9.0", + "bitflags 2.9.4", "blake3", "crossbeam-channel", "derive_more 1.0.0", "disqualified", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "either", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "js-sys", "parking_lot", "ron", "serde", "stackfuture", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "uuid", "wasm-bindgen", @@ -794,7 +537,7 @@ dependencies = [ "derive_more 1.0.0", "encase", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", "wgpu-types", ] @@ -870,7 +613,7 @@ dependencies = [ "bevy_reflect", "bevy_tasks 0.16.1", "bevy_utils 0.16.1", - "bitflags 2.9.0", + "bitflags 2.9.4", "bumpalo", "concurrent-queue", "derive_more 1.0.0", @@ -881,7 +624,7 @@ dependencies = [ "nonmax", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "variadics_please", ] @@ -932,15 +675,15 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_utils 0.16.1", - "bitflags 2.9.0", + "bitflags 2.9.4", "bytemuck", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "guillotiere", "half", - "image 0.25.5", + "image 0.25.6", "rectangle-pack", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "wgpu-types", ] @@ -959,7 +702,7 @@ dependencies = [ "bevy_utils 0.16.1", "derive_more 1.0.0", "log", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -975,7 +718,7 @@ dependencies = [ "bevy_reflect", "bevy_window", "log", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -1046,7 +789,7 @@ dependencies = [ "proc-macro2", "quote", "syn", - "toml_edit 0.22.24", + "toml_edit 0.22.27", ] [[package]] @@ -1058,14 +801,14 @@ dependencies = [ "approx", "bevy_reflect", "derive_more 1.0.0", - "glam 0.29.3", + "glam", "itertools 0.14.0", "libm", "rand 0.8.5", "rand_distr", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "variadics_please", ] @@ -1085,11 +828,11 @@ dependencies = [ "bevy_reflect", "bevy_transform", "bevy_utils 0.16.1", - "bitflags 2.9.0", + "bitflags 2.9.4", "bytemuck", "hexasphere", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "wgpu-types", ] @@ -1100,7 +843,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb60c753b968a2de0fd279b76a3d19517695e771edb4c23575c7f92156315de" dependencies = [ - "glam 0.29.3", + "glam", ] [[package]] @@ -1112,8 +855,8 @@ dependencies = [ "cfg-if", "critical-section", "foldhash", - "getrandom 0.2.15", - "hashbrown 0.15.2", + "getrandom 0.2.16", + "hashbrown 0.15.5", "portable-atomic", "portable-atomic-util", "serde", @@ -1146,14 +889,14 @@ dependencies = [ "bevy_utils 0.16.1", "derive_more 1.0.0", "disqualified", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "erased-serde", "foldhash", - "glam 0.29.3", + "glam", "serde", "smallvec", "smol_str", - "thiserror 2.0.12", + "thiserror 2.0.16", "uuid", "variadics_please", "wgpu-types", @@ -1178,7 +921,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef91fed1f09405769214b99ebe4390d69c1af5cdd27967deae9135c550eb1667" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "bevy_app 0.16.1", "bevy_asset", "bevy_color", @@ -1197,15 +940,15 @@ dependencies = [ "bevy_transform", "bevy_utils 0.16.1", "bevy_window", - "bitflags 2.9.0", + "bitflags 2.9.4", "bytemuck", "codespan-reporting", "derive_more 1.0.0", - "downcast-rs 2.0.1", + "downcast-rs 2.0.2", "encase", "fixedbitset 0.5.7", - "futures-lite 2.6.0", - "image 0.25.5", + "futures-lite 2.6.1", + "image 0.25.6", "indexmap", "js-sys", "naga", @@ -1215,7 +958,7 @@ dependencies = [ "send_wrapper", "serde", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "tracing", "variadics_please", "wasm-bindgen", @@ -1283,7 +1026,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b674242641cab680688fc3b850243b351c1af49d4f3417a576debd6cca8dcf5" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-executor", "async-task", "atomic-waker", @@ -1293,7 +1036,7 @@ dependencies = [ "crossbeam-queue", "derive_more 1.0.0", "futures-channel", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "heapless", "pin-project", "wasm-bindgen-futures", @@ -1329,7 +1072,7 @@ dependencies = [ "bevy_utils 0.16.1", "derive_more 1.0.0", "serde", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] @@ -1340,7 +1083,7 @@ checksum = "7915222f4a08ccc782e08d10b751b42e5f9d786e697d0cb3fd09333cb7e8b6ea" dependencies = [ "ahash", "bevy_utils_proc_macros", - "getrandom 0.2.15", + "getrandom 0.2.16", "hashbrown 0.14.5", "instant", "nonmax", @@ -1406,10 +1149,10 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", @@ -1450,17 +1193,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitfield-struct" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2869c63ccf4f8bf0d485070b880e60e097fb7aeea80ee82a0a94a957e372a0b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "bitfield-struct" version = "0.10.1" @@ -1480,9 +1212,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.9.0" +version = "2.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" dependencies = [ "serde", ] @@ -1527,52 +1259,30 @@ dependencies = [ "generic-array", ] -[[package]] -name = "block2" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" -dependencies = [ - "objc2 0.5.2", -] - [[package]] name = "blocking" -version = "1.6.1" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" dependencies = [ - "async-channel 2.3.1", + "async-channel 2.5.0", "async-task", "futures-io", - "futures-lite 2.6.0", + "futures-lite 2.6.1", "piper", ] [[package]] name = "boxcar" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c4925bc979b677330a8c7fe7a8c94af2dbb4a2d37b4a20a80d884400f46baa" +checksum = "36f64beae40a84da1b4b26ff2761a5b895c12adc41dc25aaee1c4f2bbfe97a6e" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" - -[[package]] -name = "bvh" -version = "0.1.0" -source = "git+https://github.com/TestingPlant/bvh-data#9bffb03a4b894a7884c9ec0da986bdde732ac704" -dependencies = [ - "arrayvec", - "bytes", - "fast_hilbert", - "glam 0.29.3", - "heapless", - "more-asserts", -] +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bvh-region" @@ -1584,13 +1294,13 @@ dependencies = [ "derive_more 2.0.1", "fastrand 2.3.0", "geometry", - "glam 0.29.3", + "glam", "num-traits", "ordered-float 5.0.0", "plotters", "plotters-bitmap", "proptest", - "rand 0.9.1", + "rand 0.9.2", "rayon", "tracing", ] @@ -1620,18 +1330,18 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.23.0" +version = "1.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c" +checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.9.2" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff22c2722516255d1823ce3cc4bc0b154dbc9364be5c905d6baa6eccbbc8774" +checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29" dependencies = [ "proc-macro2", "quote", @@ -1656,32 +1366,6 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" -[[package]] -name = "calloop" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" -dependencies = [ - "bitflags 2.9.0", - "log", - "polling", - "rustix 0.38.44", - "slab", - "thiserror 1.0.69", -] - -[[package]] -name = "calloop-wayland-source" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" -dependencies = [ - "calloop", - "rustix 0.38.44", - "wayland-backend", - "wayland-client", -] - [[package]] name = "cast" version = "0.3.0" @@ -1690,9 +1374,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "castaway" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" dependencies = [ "rustversion", ] @@ -1708,10 +1392,11 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.17" +version = "1.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "590f9024a68a8c40351881787f1934dc11afd69090f5edb6831464694d836ea3" dependencies = [ + "find-msvc-tools", "jobserver", "libc", "shlex", @@ -1732,11 +1417,20 @@ dependencies = [ "nom", ] +[[package]] +name = "cfb8" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014c0a0e1ad0dae6a86c082db2f9bd7fe8c2c734227047d0d8b4d4a3a094a1e1" +dependencies = [ + "cipher", +] + [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" [[package]] name = "cfg_aliases" @@ -1744,15 +1438,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" -[[package]] -name = "cgl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" -dependencies = [ - "libc", -] - [[package]] name = "ciborium" version = "0.2.2" @@ -1780,6 +1465,16 @@ dependencies = [ "half", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -1793,9 +1488,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.38" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000" +checksum = "7eac00902d9d136acd712710d71823fb8ac8004ca445a89e73a41d45aa712931" dependencies = [ "clap_builder", "clap_derive", @@ -1803,9 +1498,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.38" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120" +checksum = "2ad9bbf750e73b5884fb8a211a9424a1906c1e156724260fdae972f31d70e1d6" dependencies = [ "anstream", "anstyle", @@ -1816,9 +1511,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.32" +version = "4.5.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" +checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" dependencies = [ "heck", "proc-macro2", @@ -1828,18 +1523,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - -[[package]] -name = "clipboard-win" -version = "5.4.0" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892" -dependencies = [ - "error-code", -] +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" [[package]] name = "cmake" @@ -1868,9 +1554,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "colored" @@ -1948,9 +1634,12 @@ checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" [[package]] name = "const_panic" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e" +checksum = "bb8a602185c3c95b52f86dc78e55a6df9a287a7a93ddbcf012509930880cf879" +dependencies = [ + "typewit", +] [[package]] name = "const_soft_float" @@ -1983,35 +1672,12 @@ dependencies = [ "libc", ] -[[package]] -name = "core-foundation" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "core-foundation-sys" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "core-graphics" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" -dependencies = [ - "bitflags 1.3.2", - "core-foundation 0.9.4", - "core-graphics-types", - "foreign-types 0.5.0", - "libc", -] - [[package]] name = "core-graphics-types" version = "0.1.3" @@ -2019,7 +1685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation 0.9.4", + "core-foundation", "libc", ] @@ -2034,9 +1700,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] @@ -2085,9 +1751,9 @@ checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -2128,9 +1794,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" [[package]] name = "crypto-common" @@ -2148,21 +1814,15 @@ version = "3.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73" dependencies = [ - "nix 0.30.1", + "nix", "windows-sys 0.59.0", ] -[[package]] -name = "cursor-icon" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" - [[package]] name = "darling" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ "darling_core", "darling_macro", @@ -2170,9 +1830,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ "fnv", "ident_case", @@ -2183,9 +1843,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.10" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core", "quote", @@ -2200,9 +1860,9 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "deranged" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" dependencies = [ "powerfmt", ] @@ -2261,6 +1921,12 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "digest" version = "0.10.7" @@ -2289,15 +1955,9 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - [[package]] name = "displaydoc" version = "0.2.5" @@ -2338,15 +1998,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading", -] - [[package]] name = "document-features" version = "0.2.11" @@ -2370,9 +2021,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "downcast-rs" -version = "2.0.1" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "doxygen-rs" @@ -2383,180 +2034,12 @@ dependencies = [ "phf", ] -[[package]] -name = "dpi" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" - -[[package]] -name = "duplicate" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97af9b5f014e228b33e77d75ee0e6e87960124f0f4b16337b586a6bec91867b1" -dependencies = [ - "heck", - "proc-macro2", - "proc-macro2-diagnostics", -] - -[[package]] -name = "ecolor" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" -dependencies = [ - "bytemuck", - "emath", - "serde", -] - -[[package]] -name = "eframe" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0dfe0859f3fb1bc6424c57d41e10e9093fe938f426b691e42272c2f336d915c" -dependencies = [ - "ahash", - "bytemuck", - "document-features", - "egui", - "egui-wgpu", - "egui-winit", - "egui_glow", - "glow", - "glutin", - "glutin-winit", - "home", - "image 0.25.5", - "js-sys", - "log", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", - "parking_lot", - "percent-encoding", - "pollster", - "profiling", - "raw-window-handle", - "ron", - "serde", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-time", - "wgpu", - "winapi", - "windows-sys 0.59.0", - "winit", -] - -[[package]] -name = "egui" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" -dependencies = [ - "accesskit 0.17.1", - "ahash", - "bitflags 2.9.0", - "emath", - "epaint", - "log", - "nohash-hasher", - "profiling", - "ron", - "serde", -] - -[[package]] -name = "egui-wgpu" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d319dfef570f699b6e9114e235e862a2ddcf75f0d1a061de9e1328d92146d820" -dependencies = [ - "ahash", - "bytemuck", - "document-features", - "egui", - "epaint", - "log", - "profiling", - "thiserror 1.0.69", - "type-map", - "web-time", - "wgpu", - "winit", -] - -[[package]] -name = "egui-winit" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" -dependencies = [ - "accesskit_winit", - "ahash", - "arboard", - "bytemuck", - "egui", - "log", - "profiling", - "raw-window-handle", - "serde", - "smithay-clipboard", - "web-time", - "webbrowser", - "winit", -] - -[[package]] -name = "egui_dock" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea7536fb0243aea55c1ca123a41a18253e16520d427a7213da584b9e2cb3973" -dependencies = [ - "duplicate", - "egui", - "paste", - "serde", -] - -[[package]] -name = "egui_glow" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" -dependencies = [ - "ahash", - "bytemuck", - "egui", - "glow", - "log", - "memoffset", - "profiling", - "wasm-bindgen", - "web-sys", - "winit", -] - [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "emath" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" -dependencies = [ - "bytemuck", - "serde", -] - [[package]] name = "encase" version = "0.10.0" @@ -2565,7 +2048,7 @@ checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020" dependencies = [ "const_panic", "encase_derive", - "glam 0.29.3", + "glam", "thiserror 1.0.69", ] @@ -2598,58 +2081,20 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "endi" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" - -[[package]] -name = "enumflags2" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba2f4b465f5318854c6f8dd686ede6c0a9dc67d4b1ac241cf0eb51521a309147" -dependencies = [ - "enumflags2_derive", - "serde", -] - -[[package]] -name = "enumflags2_derive" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "enumn" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "enumset" -version = "1.1.6" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a6b7c3d347de0a9f7bfd2f853be43fe32fa6fac30c70f6d6d67a1e936b87ee" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" dependencies = [ "enumset_derive", ] [[package]] name = "enumset_derive" -version = "0.11.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6da3ea9e1d1a3b1593e15781f930120e72aa7501610b2f82e5b6739c72e8eac5" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" dependencies = [ "darling", "proc-macro2", @@ -2666,31 +2111,6 @@ dependencies = [ "serde", ] -[[package]] -name = "epaint" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" -dependencies = [ - "ab_glyph", - "ahash", - "bytemuck", - "ecolor", - "emath", - "epaint_default_fonts", - "log", - "nohash-hasher", - "parking_lot", - "profiling", - "serde", -] - -[[package]] -name = "epaint_default_fonts" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" - [[package]] name = "equator" version = "0.4.2" @@ -2729,20 +2149,14 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.10" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] -[[package]] -name = "error-code" -version = "3.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" - [[package]] name = "euclid" version = "0.22.11" @@ -2760,9 +2174,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -2771,33 +2185,14 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener 5.4.1", "pin-project-lite", ] -[[package]] -name = "fancy-regex" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" -dependencies = [ - "bit-set 0.5.3", - "regex", -] - -[[package]] -name = "fast_hilbert" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ec2bbe15af87954c739e236021f4411766c0f2b9c4a5f0b9317bcf6048ebf8" -dependencies = [ - "num-traits", -] - [[package]] name = "fastrand" version = "1.9.0" @@ -2824,16 +2219,22 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed" dependencies = [ "cfg-if", "libc", "libredox", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e178e4fba8a2726903f6ba98a6d221e76f9c12c650d5dc0e6afdc50677b49650" + [[package]] name = "fixedbitset" version = "0.4.2" @@ -2848,9 +2249,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", "libz-ng-sys", @@ -2925,9 +2326,9 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -3003,9 +2404,9 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.6.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" dependencies = [ "fastrand 2.3.0", "futures-core", @@ -3057,15 +2458,16 @@ dependencies = [ [[package]] name = "generator" -version = "0.8.4" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" dependencies = [ + "cc", "cfg-if", "libc", "log", "rustversion", - "windows", + "windows 0.61.3", ] [[package]] @@ -3083,48 +2485,38 @@ name = "geometry" version = "0.1.0" dependencies = [ "approx", - "glam 0.29.3", + "glam", "itertools 0.14.0", "ordered-float 5.0.0", - "rand 0.9.1", + "rand 0.9.2", "serde", "tango-bench", ] -[[package]] -name = "gethostname" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" -dependencies = [ - "libc", - "windows-targets 0.48.5", -] - [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.0+wasi-snapshot-preview1", + "wasi 0.11.1+wasi-snapshot-preview1", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "js-sys", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", "wasm-bindgen", ] @@ -3167,17 +2559,11 @@ dependencies = [ "serde", ] -[[package]] -name = "glam" -version = "0.30.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50a99dbe56b72736564cfa4b85bf9a33079f16ae8b74983ab06af3b1a3696b11" - [[package]] name = "glob" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" [[package]] name = "glob-match" @@ -3198,67 +2584,10 @@ dependencies = [ ] [[package]] -name = "glutin" -version = "0.32.2" +name = "glutin_wgl_sys" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848" -dependencies = [ - "bitflags 2.9.0", - "cfg_aliases", - "cgl", - "core-foundation 0.9.4", - "dispatch", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "libloading", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", - "once_cell", - "raw-window-handle", - "wayland-sys", - "windows-sys 0.52.0", - "x11-dl", -] - -[[package]] -name = "glutin-winit" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" -dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", -] - -[[package]] -name = "glutin_egl_sys" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2" -dependencies = [ - "gl_generator", - "windows-sys 0.52.0", -] - -[[package]] -name = "glutin_glx_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185" -dependencies = [ - "gl_generator", - "x11-dl", -] - -[[package]] -name = "glutin_wgl_sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" +checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e" dependencies = [ "gl_generator", ] @@ -3280,7 +2609,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "gpu-alloc-types", ] @@ -3290,7 +2619,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", ] [[package]] @@ -3302,18 +2631,18 @@ dependencies = [ "log", "presser", "thiserror 1.0.69", - "windows", + "windows 0.58.0", ] [[package]] name = "gpu-descriptor" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "gpu-descriptor-types", - "hashbrown 0.15.2", + "hashbrown 0.15.5", ] [[package]] @@ -3322,7 +2651,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", ] [[package]] @@ -3337,9 +2666,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.8" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ "atomic-waker", "bytes", @@ -3356,9 +2685,9 @@ dependencies = [ [[package]] name = "half" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", @@ -3386,9 +2715,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.2" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -3419,7 +2748,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd54745cfacb7b97dee45e8fdb91814b62bccddb481debb7de0f9ee6b7bf5b43" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "byteorder", "heed-traits", "heed-types", @@ -3453,21 +2782,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - -[[package]] -name = "hermit-abi" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" - -[[package]] -name = "hermit-abi" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" [[package]] name = "hex" @@ -3482,7 +2799,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679" dependencies = [ "constgebra", - "glam 0.29.3", + "glam", "tinyvec", ] @@ -3492,15 +2809,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "http" version = "1.3.1" @@ -3549,19 +2857,21 @@ checksum = "9b112acc8b3adf4b107a8ec20977da0273a8c386765a3ec0229bd500a1443f9f" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", "httparse", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -3569,11 +2879,10 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.5" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "futures-util", "http", "hyper", "hyper-util", @@ -3603,21 +2912,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" dependencies = [ + "base64 0.22.1", "bytes", "futures-channel", + "futures-core", "futures-util", "http", "http-body", "hyper", + "ipnet", + "libc", + "percent-encoding", "pin-project-lite", "socket2", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -3629,7 +2945,7 @@ dependencies = [ "arc-swap", "base64 0.22.1", "bevy", - "bitfield-struct 0.10.1", + "bitfield-struct", "bitvec", "boxcar", "bumpalo", @@ -3644,7 +2960,7 @@ dependencies = [ "fastrand 2.3.0", "flate2", "geometry", - "glam 0.29.3", + "glam", "heapless", "heed", "humantime", @@ -3683,7 +2999,7 @@ dependencies = [ "serial_test", "sha2", "simd-utils", - "thiserror 2.0.12", + "thiserror 2.0.16", "thread_local", "tokio", "tokio-rustls", @@ -3695,13 +3011,13 @@ dependencies = [ "uuid", "valence_anvil", "valence_bytes", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_generated", + "valence_ident", + "valence_nbt", + "valence_protocol", "valence_registry", "valence_server", - "valence_text 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_text", ] [[package]] @@ -3717,7 +3033,7 @@ dependencies = [ "hyperion-utils", "tracing", "valence_bytes", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3749,7 +3065,7 @@ dependencies = [ "bevy", "derive-build", "slotmap", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3772,7 +3088,7 @@ dependencies = [ "hyperion-utils", "serde", "tracing", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3785,8 +3101,8 @@ dependencies = [ "roaring", "snafu", "tracing", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_generated", + "valence_protocol", ] [[package]] @@ -3800,7 +3116,7 @@ dependencies = [ "hyperion-inventory", "hyperion-utils", "tracing", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3825,7 +3141,7 @@ version = "0.1.0" dependencies = [ "anyhow", "roaring", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3847,7 +3163,7 @@ dependencies = [ name = "hyperion-proto" version = "0.1.0" dependencies = [ - "glam 0.29.3", + "glam", "rkyv", ] @@ -3857,13 +3173,12 @@ version = "0.1.0" dependencies = [ "anyhow", "arrayvec", - "bvh", "bytes", "clap", "colored", "dotenvy", "envy", - "glam 0.29.3", + "glam", "heapless", "hyperion-proto", "kanal", @@ -3905,7 +3220,8 @@ version = "0.1.0" dependencies = [ "approx", "divan", - "rand 0.9.1", + "rand 0.9.2", + "wide", ] [[package]] @@ -3914,9 +3230,9 @@ version = "0.1.0" dependencies = [ "serde", "serde_json", - "thiserror 2.0.12", + "thiserror 2.0.16", "uuid", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] @@ -3937,26 +3253,27 @@ dependencies = [ "tokio", "tokio-util", "tracing", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -3965,31 +3282,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -3997,67 +3294,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -4066,9 +3350,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -4077,9 +3361,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -4101,36 +3385,34 @@ dependencies = [ [[package]] name = "image" -version = "0.25.5" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", "num-traits", - "png", - "tiff", ] [[package]] -name = "immutable-chunkmap" -version = "2.0.6" +name = "indexmap" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" dependencies = [ - "arrayvec", + "equivalent", + "hashbrown 0.15.5", + "rayon", + "serde", ] [[package]] -name = "indexmap" -version = "2.9.0" +name = "inout" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "equivalent", - "hashbrown 0.15.2", - "rayon", - "serde", + "generic-array", ] [[package]] @@ -4145,19 +3427,40 @@ dependencies = [ "web-sys", ] +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags 2.9.4", + "cfg-if", + "libc", +] + [[package]] name = "ipnet" version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is-terminal" version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi 0.5.0", + "hermit-abi", "libc", "windows-sys 0.59.0", ] @@ -4183,6 +3486,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.14.0" @@ -4198,6 +3510,13 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +[[package]] +name = "java_string" +version = "0.1.2" +dependencies = [ + "serde", +] + [[package]] name = "jni" version = "0.21.1" @@ -4222,18 +3541,19 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" dependencies = [ + "getrandom 0.3.3", "libc", ] [[package]] name = "jpeg-decoder" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +checksum = "00810f1d8b74be64b13dbf3db89ac67740615d6c891f0e7b6179326533011a07" [[package]] name = "js-sys" @@ -4280,9 +3600,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libdeflate-sys" @@ -4304,29 +3624,29 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.53.3", ] [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.3" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "libc", - "redox_syscall 0.5.10", + "redox_syscall", ] [[package]] @@ -4339,35 +3659,23 @@ dependencies = [ "libc", ] -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - [[package]] name = "linux-raw-sys" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" - -[[package]] -name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "litrs" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" +checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lmdb-master-sys" @@ -4382,9 +3690,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -4392,9 +3700,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.26" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "loom" @@ -4415,9 +3723,15 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" dependencies = [ - "hashbrown 0.15.2", + "hashbrown 0.15.5", ] +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + [[package]] name = "malloc_buf" version = "0.0.6" @@ -4429,18 +3743,18 @@ dependencies = [ [[package]] name = "matchers" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" dependencies = [ - "regex-automata 0.1.10", + "regex-automata", ] [[package]] name = "matrixmultiply" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ "autocfg", "rawpointer", @@ -4448,35 +3762,26 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "memmap2" -version = "0.9.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7" dependencies = [ "libc", ] -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "metal" version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "block", "core-graphics-types", "foreign-types 0.5.0", @@ -4499,9 +3804,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", "simd-adler32", @@ -4509,14 +3814,14 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] @@ -4527,18 +3832,18 @@ checksum = "1fafa6961cabd9c63bcd77a45d7e3b7f3b552b70417831fb0f56db717e72407e" [[package]] name = "munge" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0091202c98cf06da46c279fdf50cccb6b1c43b4521abdf6a27b4c7e71d5d9d7" +checksum = "d7feb0b48aa0a25f9fe0899482c6e1379ee7a11b24a53073eacdecb9adb6dc60" dependencies = [ "munge_macro", ] [[package]] name = "munge_macro" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734799cf91479720b2f970c61a22850940dd91e27d4f02b1c6fc792778df2459" +checksum = "f2e3795a5d2da581a8b252fec6022eee01aea10161a4d1bf237d4cbe47f7e988" dependencies = [ "proc-macro2", "quote", @@ -4553,7 +3858,7 @@ checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set 0.8.0", - "bitflags 2.9.0", + "bitflags 2.9.4", "cfg_aliases", "codespan-reporting", "hexf-parse", @@ -4564,7 +3869,7 @@ dependencies = [ "spirv", "strum", "termcolor", - "thiserror 2.0.12", + "thiserror 2.0.16", "unicode-xid", ] @@ -4581,7 +3886,7 @@ dependencies = [ "naga", "once_cell", "regex", - "regex-syntax 0.8.5", + "regex-syntax", "rustc-hash 1.1.0", "thiserror 1.0.69", "tracing", @@ -4594,7 +3899,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -4637,12 +3942,11 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "jni-sys", "log", "ndk-sys 0.6.0+11769913", "num_enum", - "raw-window-handle", "thiserror 1.0.69", ] @@ -4670,37 +3974,18 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "nix" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" -dependencies = [ - "bitflags 2.9.0", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - [[package]] name = "nix" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "cfg-if", "cfg_aliases", "libc", ] -[[package]] -name = "nohash-hasher" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" - [[package]] name = "nom" version = "7.1.3" @@ -4719,12 +4004,11 @@ checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -4774,28 +4058,29 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi 0.3.9", + "hermit-abi", "libc", ] [[package]] name = "num_enum" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" dependencies = [ "num_enum_derive", + "rustversion", ] [[package]] name = "num_enum_derive" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4803,15 +4088,6 @@ dependencies = [ "syn", ] -[[package]] -name = "num_threads" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" -dependencies = [ - "libc", -] - [[package]] name = "objc" version = "0.2.7" @@ -4822,265 +4098,49 @@ dependencies = [ ] [[package]] -name = "objc-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" - -[[package]] -name = "objc2" -version = "0.5.2" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "objc-sys", - "objc2-encode", + "memchr", ] [[package]] -name = "objc2" -version = "0.6.0" +name = "offset-allocator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" +checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" dependencies = [ - "objc2-encode", + "log", + "nonmax", ] [[package]] -name = "objc2-app-kit" -version = "0.2.2" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" -dependencies = [ - "bitflags 2.9.0", - "block2", - "libc", - "objc2 0.5.2", - "objc2-core-data", - "objc2-core-image", - "objc2-foundation 0.2.2", - "objc2-quartz-core", -] +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "objc2-cloud-kit" -version = "0.2.2" +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] -name = "objc2-contacts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-core-data" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-core-image" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal", -] - -[[package]] -name = "objc2-core-location" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-contacts", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-encode" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" - -[[package]] -name = "objc2-foundation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" -dependencies = [ - "bitflags 2.9.0", - "block2", - "dispatch", - "libc", - "objc2 0.5.2", -] - -[[package]] -name = "objc2-foundation" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a21c6c9014b82c39515db5b396f91645182611c97d24637cf56ac01e5f8d998" -dependencies = [ - "bitflags 2.9.0", - "objc2 0.6.0", -] - -[[package]] -name = "objc2-link-presentation" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-metal" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-quartz-core" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", - "objc2-metal", -] - -[[package]] -name = "objc2-symbols" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" -dependencies = [ - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-ui-kit" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-cloud-kit", - "objc2-core-data", - "objc2-core-image", - "objc2-core-location", - "objc2-foundation 0.2.2", - "objc2-link-presentation", - "objc2-quartz-core", - "objc2-symbols", - "objc2-uniform-type-identifiers", - "objc2-user-notifications", -] - -[[package]] -name = "objc2-uniform-type-identifiers" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" -dependencies = [ - "block2", - "objc2 0.5.2", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "objc2-user-notifications" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" -dependencies = [ - "bitflags 2.9.0", - "block2", - "objc2 0.5.2", - "objc2-core-location", - "objc2-foundation 0.2.2", -] - -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - -[[package]] -name = "offset-allocator" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" -dependencies = [ - "log", - "nonmax", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "oorandom" -version = "11.1.5" +name = "oorandom" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "openssl" -version = "0.10.71" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "cfg-if", "foreign-types 0.3.2", "libc", @@ -5108,9 +4168,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.106" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", @@ -5124,15 +4184,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "orbclient" -version = "0.3.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" -dependencies = [ - "libredox", -] - [[package]] name = "ordered-float" version = "4.6.0" @@ -5151,31 +4202,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ordered-stream" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" -dependencies = [ - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "owned_ttf_parser" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4" -dependencies = [ - "ttf-parser", -] - [[package]] name = "packet-channel" version = "0.1.0" @@ -5185,32 +4211,7 @@ dependencies = [ "divan", "more-asserts", "proptest", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", -] - -[[package]] -name = "packet-inspector" -version = "0.1.0" -dependencies = [ - "anyhow", - "bytes", - "eframe", - "egui", - "egui_dock", - "flate2", - "flume", - "itertools 0.14.0", - "proc-macro2", - "quote", - "serde", - "serde_json", - "syn", - "syntect", - "time", - "tokio", - "tracing", - "valence_build_utils 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", + "valence_protocol", ] [[package]] @@ -5225,9 +4226,9 @@ dependencies = [ [[package]] name = "papaya" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6827e3fc394523c21d4464d02c0bb1c19966ea4a58a9844ad6d746214179d2bc" +checksum = "f92dd0b07c53a0a0c764db2ace8c541dc47320dad97c2200c2a637ab9dd2328f" dependencies = [ "equivalent", "seize", @@ -5241,9 +4242,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -5251,13 +4252,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.10", + "redox_syscall", "smallvec", "windows-targets 0.52.6", ] @@ -5270,9 +4271,9 @@ checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petgraph" @@ -5381,19 +4382,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" -[[package]] -name = "plist" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" -dependencies = [ - "base64 0.22.1", - "indexmap", - "quick-xml 0.32.0", - "serde", - "time", -] - [[package]] name = "plotters" version = "0.3.7" @@ -5448,32 +4436,11 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "polling" -version = "3.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix 0.38.44", - "tracing", - "windows-sys 0.59.0", -] - -[[package]] -name = "pollster" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" - [[package]] name = "portable-atomic" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" [[package]] name = "portable-atomic-util" @@ -5484,6 +4451,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -5505,7 +4481,7 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.8.24", + "zerocopy", ] [[package]] @@ -5514,11 +4490,21 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + [[package]] name = "prettyplease" -version = "0.2.31" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5316f57387668042f561aae71480de936257848f9c43ce528e311d89a07cadeb" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", "syn", @@ -5530,52 +4516,39 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit 0.22.24", + "toml_edit 0.22.27", ] [[package]] name = "proc-macro2" -version = "1.0.95" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] -[[package]] -name = "proc-macro2-diagnostics" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "version_check", - "yansi", -] - [[package]] name = "profiling" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" +checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" [[package]] name = "proptest" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f" dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", - "bitflags 2.9.0", + "bitflags 2.9.4", "lazy_static", "num-traits", - "rand 0.8.5", - "rand_chacha 0.3.1", + "rand 0.9.2", + "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax 0.8.5", + "regex-syntax", "rusty-fork", "tempfile", "unarray", @@ -5607,39 +4580,11 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", - "serde", -] - -[[package]] -name = "quick-xml" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" -dependencies = [ - "memchr", -] - -[[package]] -name = "quick-xml" -version = "0.37.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" -dependencies = [ - "memchr", -] - [[package]] name = "quinn" -version = "0.11.7" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3bd15a6f2967aef83887dcb9fec0014580467e33720d073560cf015a5683012" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases", @@ -5649,7 +4594,7 @@ dependencies = [ "rustc-hash 2.1.1", "rustls", "socket2", - "thiserror 2.0.12", + "thiserror 2.0.16", "tokio", "tracing", "web-time", @@ -5657,19 +4602,20 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.10" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b820744eb4dc9b57a3398183639c511b5a26d2ed702cedd3febaa1393caa22cc" +checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" dependencies = [ "bytes", - "getrandom 0.3.2", - "rand 0.9.1", + "getrandom 0.3.3", + "lru-slab", + "rand 0.9.2", "ring", "rustc-hash 2.1.1", "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.12", + "thiserror 2.0.16", "tinyvec", "tracing", "web-time", @@ -5677,16 +4623,16 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.10" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" dependencies = [ "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -5700,9 +4646,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "radium" @@ -5732,9 +4678,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -5766,7 +4712,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", ] [[package]] @@ -5775,7 +4721,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", ] [[package]] @@ -5790,11 +4736,11 @@ dependencies = [ [[package]] name = "rand_xorshift" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core 0.6.4", + "rand_core 0.9.3", ] [[package]] @@ -5817,9 +4763,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" dependencies = [ "either", "rayon-core", @@ -5827,9 +4773,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -5843,82 +4789,58 @@ checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" [[package]] name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.5.10" +version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", ] [[package]] name = "redox_users" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6f9d3d47bdd2ad6945c5015a226ec6155d0bcdfd8f7cd29f86b71f8de99d2b" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" dependencies = [ - "getrandom 0.2.15", + "getrandom 0.2.16", "libredox", - "thiserror 2.0.12", + "thiserror 2.0.16", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] name = "regex-lite" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" +checksum = "943f41321c63ef1c92fd763bfe054d2668f7f225a5c29f0105903dc2fc04ba30" [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - -[[package]] -name = "regex-syntax" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "rend" @@ -5937,9 +4859,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] name = "reqwest" -version = "0.12.15" +version = "0.12.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" dependencies = [ "base64 0.22.1", "bytes", @@ -5954,28 +4876,25 @@ dependencies = [ "hyper-rustls", "hyper-tls", "hyper-util", - "ipnet", "js-sys", "log", "mime", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", "quinn", "rustls", - "rustls-pemfile", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-native-tls", "tokio-rustls", "tokio-util", "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", @@ -5983,7 +4902,6 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "windows-registry", ] [[package]] @@ -5994,7 +4912,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.15", + "getrandom 0.2.16", "libc", "untrusted", "windows-sys 0.52.0", @@ -6002,13 +4920,13 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e147371c75553e1e2fcdb483944a8540b8438c31426279553b9a8182a9b7b65" +checksum = "19f5c3e5da784cd8c69d32cdc84673f3204536ca56e1fa01be31a74b92c932ac" dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.2", + "hashbrown 0.15.5", "indexmap", "munge", "ptr_meta", @@ -6021,9 +4939,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246b40ac189af6c675d124b802e8ef6d5246c53e17367ce9501f8f66a81abb7a" +checksum = "4270433626cffc9c4c1d3707dd681f2a2718d3d7b09ad754bec137acecda8d22" dependencies = [ "proc-macro2", "quote", @@ -6047,7 +4965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.9.0", + "bitflags 2.9.4", "serde", "serde_derive", ] @@ -6062,7 +4980,7 @@ dependencies = [ "libdeflater", "mio", "num_cpus", - "rand 0.9.1", + "rand 0.9.2", "serde", "tracing", "tracing-subscriber", @@ -6070,9 +4988,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" [[package]] name = "rustc-hash" @@ -6088,28 +5006,15 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustix" -version = "0.38.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" -dependencies = [ - "bitflags 2.9.0", - "errno", - "libc", - "linux-raw-sys 0.4.15", - "windows-sys 0.59.0", -] - -[[package]] -name = "rustix" -version = "1.0.3" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "errno", "libc", - "linux-raw-sys 0.9.3", - "windows-sys 0.59.0", + "linux-raw-sys", + "windows-sys 0.60.2", ] [[package]] @@ -6127,15 +5032,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - [[package]] name = "rustls-pki-types" version = "1.12.0" @@ -6159,9 +5055,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rusty-fork" @@ -6181,6 +5077,15 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + [[package]] name = "same-file" version = "1.0.6" @@ -6192,9 +5097,9 @@ dependencies = [ [[package]] name = "scc" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22b2d775fb28f245817589471dd49c5edf64237f4a19d10ce9a92ff4651a27f4" +checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc" dependencies = [ "sdd", ] @@ -6240,24 +5145,11 @@ dependencies = [ "syn", ] -[[package]] -name = "sctk-adwaita" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" -dependencies = [ - "ab_glyph", - "log", - "memmap2", - "smithay-client-toolkit", - "tiny-skia", -] - [[package]] name = "sdd" -version = "3.0.8" +version = "3.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584e070911c7017da6cb2eb0788d09f43d789029b5877d3e5ecc8acf86ceee21" +checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca" [[package]] name = "security-framework" @@ -6265,8 +5157,8 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.9.0", - "core-foundation 0.9.4", + "bitflags 2.9.4", + "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", @@ -6320,9 +5212,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.140" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" dependencies = [ "itoa", "memchr", @@ -6330,22 +5222,11 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "serde_spanned" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" dependencies = [ "serde", ] @@ -6387,17 +5268,6 @@ dependencies = [ "syn", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sha2" version = "0.10.9" @@ -6426,9 +5296,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" dependencies = [ "libc", ] @@ -6461,12 +5331,9 @@ checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "slotmap" @@ -6479,45 +5346,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" - -[[package]] -name = "smithay-client-toolkit" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" -dependencies = [ - "bitflags 2.9.0", - "calloop", - "calloop-wayland-source", - "cursor-icon", - "libc", - "log", - "memmap2", - "rustix 0.38.44", - "thiserror 1.0.69", - "wayland-backend", - "wayland-client", - "wayland-csd-frame", - "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", - "wayland-scanner", - "xkeysym", -] - -[[package]] -name = "smithay-clipboard" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" -dependencies = [ - "libc", - "smithay-client-toolkit", - "wayland-backend", -] +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smol_str" @@ -6530,18 +5361,18 @@ dependencies = [ [[package]] name = "snafu" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +checksum = "4800ae0e2ebdfaea32ffb9745642acdc378740dcbd74d3fb3cd87572a34810c6" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +checksum = "186f5ba9999528053fb497fdf0dd330efcc69cfe4ad03776c9d704bc54fee10f" dependencies = [ "heck", "proc-macro2", @@ -6551,12 +5382,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.8" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6575,7 +5406,7 @@ version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", ] [[package]] @@ -6596,12 +5427,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "strict-num" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" - [[package]] name = "strsim" version = "0.11.1" @@ -6653,9 +5478,9 @@ checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" [[package]] name = "syn" -version = "2.0.101" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -6682,45 +5507,23 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", "syn", ] -[[package]] -name = "syntect" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" -dependencies = [ - "bincode", - "bitflags 1.3.2", - "fancy-regex", - "flate2", - "fnv", - "once_cell", - "plist", - "regex-syntax 0.8.5", - "serde", - "serde_derive", - "serde_json", - "thiserror 1.0.69", - "walkdir", - "yaml-rust", -] - [[package]] name = "system-configuration" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.9.0", - "core-foundation 0.9.4", + "bitflags 2.9.4", + "core-foundation", "system-configuration-sys", ] @@ -6774,15 +5577,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.19.1" +version = "3.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" dependencies = [ "fastrand 2.3.0", - "getrandom 0.3.2", + "getrandom 0.3.3", "once_cell", - "rustix 1.0.3", - "windows-sys 0.59.0", + "rustix", + "windows-sys 0.60.2", ] [[package]] @@ -6796,12 +5599,12 @@ dependencies = [ [[package]] name = "terminal_size" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45c6481c4829e4cc63825e62c49186a34538b7b2750b73b266581ffb612fb5ed" +checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" dependencies = [ - "rustix 1.0.3", - "windows-sys 0.59.0", + "rustix", + "windows-sys 0.60.2", ] [[package]] @@ -6815,11 +5618,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "thiserror-impl 2.0.12", + "thiserror-impl 2.0.16", ] [[package]] @@ -6835,9 +5638,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.12" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -6846,23 +5649,11 @@ dependencies = [ [[package]] name = "thread_local" -version = "1.1.8" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" dependencies = [ "cfg-if", - "once_cell", -] - -[[package]] -name = "tiff" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", ] [[package]] @@ -6887,15 +5678,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "8ca967379f9d8eb8058d86ed467d81d03e81acd45757e4ca341c24affbe8e8e3" dependencies = [ "deranged", - "itoa", - "libc", "num-conv", - "num_threads", "powerfmt", "serde", "time-core", @@ -6904,50 +5692,25 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "a9108bb380861b07264b950ded55a44a14a4adc68b9f5efd85aafc3aa4d40a68" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "7182799245a7264ce590b349d90338f1c1affad93d2639aed5f8f69c090b334c" dependencies = [ "num-conv", "time-core", ] -[[package]] -name = "tiny-skia" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" -dependencies = [ - "arrayref", - "arrayvec", - "bytemuck", - "cfg-if", - "log", - "tiny-skia-path", -] - -[[package]] -name = "tiny-skia-path" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" -dependencies = [ - "arrayref", - "bytemuck", - "strict-num", -] - [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -6965,9 +5728,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -6980,21 +5743,23 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.45.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", + "slab", "socket2", "tokio-macros", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -7030,16 +5795,16 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.15" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-io", "futures-sink", "futures-util", - "hashbrown 0.15.2", + "hashbrown 0.15.5", "pin-project-lite", "slab", "tokio", @@ -7047,21 +5812,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.20" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.24", + "toml_edit 0.22.27", ] [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] @@ -7079,17 +5844,24 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap", "serde", "serde_spanned", "toml_datetime", - "winnow 0.7.4", + "toml_write", + "winnow 0.7.13", ] +[[package]] +name = "toml_write" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" + [[package]] name = "tower" version = "0.5.2" @@ -7105,6 +5877,24 @@ dependencies = [ "tower-service", ] +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.9.4", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.3" @@ -7142,9 +5932,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", @@ -7153,9 +5943,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", "valuable", @@ -7189,14 +5979,14 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "matchers", "nu-ansi-term", "once_cell", - "regex", + "regex-automata", "sharded-slab", "smallvec", "thread_local", @@ -7230,9 +6020,9 @@ dependencies = [ [[package]] name = "tracy-client" -version = "0.18.0" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d90a2c01305b02b76fdd89ac8608bae27e173c829a35f7d76a345ab5d33836db" +checksum = "ef54005d3d760186fd662dad4b7bb27ecd5531cdef54d1573ebd3f20a9205ed7" dependencies = [ "loom", "once_cell", @@ -7241,9 +6031,9 @@ dependencies = [ [[package]] name = "tracy-client-sys" -version = "0.24.3" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69fff37da548239c3bf9e64a12193d261e8b22b660991c6fd2df057c168f435f" +checksum = "319c70195101a93f56db4c74733e272d720768e13471f400c78406a326b172b0" dependencies = [ "cc", "windows-targets 0.52.6", @@ -7255,21 +6045,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - -[[package]] -name = "type-map" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" -dependencies = [ - "rustc-hash 1.1.0", -] - [[package]] name = "typeid" version = "1.0.3" @@ -7283,15 +6058,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] -name = "uds_windows" -version = "1.1.0" +name = "typewit" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" -dependencies = [ - "memoffset", - "tempfile", - "winapi", -] +checksum = "8e75c3b0d61c1d0e12b4b0fd5111f377c918e0227e9eb67434dcf9e6084646c6" [[package]] name = "unarray" @@ -7305,12 +6075,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" -[[package]] -name = "unicode-segmentation" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" - [[package]] name = "unicode-width" version = "0.1.14" @@ -7331,9 +6095,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", @@ -7341,12 +6105,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -7361,11 +6119,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.16.0" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.2", + "getrandom 0.3.3", "js-sys", "serde", "wasm-bindgen", @@ -7374,33 +6132,24 @@ dependencies = [ [[package]] name = "valence_anvil" version = "0.1.0" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" dependencies = [ - "bitfield-struct 0.9.5", + "bevy_app 0.12.1", + "bevy_ecs 0.12.1", + "bitfield-struct", "bitvec", "byteorder", "flate2", + "flume", "lru", - "thiserror 1.0.69", + "thiserror 2.0.16", "valence_bytes", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_nbt", "valence_server", ] [[package]] name = "valence_build_utils" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "anyhow", - "proc-macro2", - "syn", -] - -[[package]] -name = "valence_build_utils" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ "anyhow", "proc-macro2", @@ -7409,22 +6158,20 @@ dependencies = [ [[package]] name = "valence_bytes" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "bytes", ] [[package]] name = "valence_entity" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "anyhow", "bevy_app 0.12.1", "bevy_ecs 0.12.1", - "bitfield-struct 0.9.5", - "derive_more 1.0.0", + "bitfield-struct", + "derive_more 2.0.1", "heck", "indexmap", "paste", @@ -7436,35 +6183,17 @@ dependencies = [ "syn", "tracing", "uuid", - "valence_build_utils 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_build_utils", + "valence_generated", + "valence_math", + "valence_nbt", + "valence_protocol", "valence_server_common", ] [[package]] name = "valence_generated" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "anyhow", - "heck", - "proc-macro2", - "quote", - "serde", - "serde_json", - "uuid", - "valence_build_utils 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", -] - -[[package]] -name = "valence_generated" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ "anyhow", "heck", @@ -7473,47 +6202,25 @@ dependencies = [ "serde", "serde_json", "uuid", - "valence_build_utils 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", + "valence_build_utils", + "valence_ident", + "valence_math", ] [[package]] name = "valence_ident" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "bytes", "serde", - "thiserror 1.0.69", + "thiserror 2.0.16", "valence_bytes", - "valence_ident_macros 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", -] - -[[package]] -name = "valence_ident" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" -dependencies = [ - "serde", - "thiserror 1.0.69", - "valence_ident_macros 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", -] - -[[package]] -name = "valence_ident_macros" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "proc-macro2", - "quote", - "syn", + "valence_ident_macros", ] [[package]] name = "valence_ident_macros" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ "proc-macro2", "quote", @@ -7522,113 +6229,60 @@ dependencies = [ [[package]] name = "valence_math" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "glam 0.29.3", -] - -[[package]] -name = "valence_math" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ - "glam 0.30.4", + "glam", ] [[package]] name = "valence_nbt" version = "0.8.0" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" dependencies = [ "byteorder", "cesu8", "indexmap", + "java_string", + "pretty_assertions", "serde", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "valence_nbt" -version = "0.8.0" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" -dependencies = [ - "byteorder", - "cesu8", + "serde_json", + "thiserror 2.0.16", "uuid", + "valence_ident", ] [[package]] name = "valence_protocol" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ + "aes", "anyhow", "base64 0.22.1", "bevy_ecs 0.12.1", - "bitfield-struct 0.9.5", + "bitfield-struct", "byteorder", "bytes", - "derive_more 1.0.0", + "cfb8", + "derive_more 2.0.1", "flate2", + "rand 0.9.2", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.16", "tracing", "url", "uuid", "valence_bytes", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol_macros 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_text 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", -] - -[[package]] -name = "valence_protocol" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" -dependencies = [ - "anyhow", - "base64 0.22.1", - "bevy_ecs 0.12.1", - "bitfield-struct 0.9.5", - "byteorder", - "bytes", - "derive_more 1.0.0", - "flate2", - "serde", - "serde_json", - "thiserror 1.0.69", - "tracing", - "url", - "uuid", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_protocol_macros 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_text 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", -] - -[[package]] -name = "valence_protocol_macros" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", + "valence_generated", + "valence_ident", + "valence_math", + "valence_nbt", + "valence_protocol_macros", + "valence_text", ] [[package]] name = "valence_protocol_macros" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ "heck", "proc-macro2", @@ -7638,8 +6292,7 @@ dependencies = [ [[package]] name = "valence_registry" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "anyhow", "bevy_app 0.12.1", @@ -7648,78 +6301,62 @@ dependencies = [ "serde", "serde_json", "tracing", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_ident", + "valence_nbt", + "valence_protocol", "valence_server_common", ] [[package]] name = "valence_server" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "anyhow", "arrayvec", "bevy_app 0.12.1", "bevy_ecs 0.12.1", "bevy_utils 0.12.1", - "bitfield-struct 0.9.5", + "bitfield-struct", "byteorder", "bytes", - "derive_more 1.0.0", + "derive_more 2.0.1", "parking_lot", - "rand 0.8.5", + "rand 0.9.2", "rustc-hash 2.1.1", "tracing", "uuid", "valence_bytes", "valence_entity", - "valence_generated 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_math 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_generated", + "valence_math", + "valence_nbt", + "valence_protocol", "valence_registry", "valence_server_common", ] [[package]] name = "valence_server_common" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" +version = "0.1.0" dependencies = [ "bevy_app 0.12.1", "bevy_ecs 0.12.1", - "derive_more 1.0.0", - "rand 0.8.5", - "uuid", - "valence_protocol 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", -] - -[[package]] -name = "valence_text" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-bytes#fb792dcb6669b64c5dc2366eb3d074b293def046" -dependencies = [ - "serde", - "serde_json", - "thiserror 1.0.69", + "derive_more 2.0.1", + "rand 0.9.2", "uuid", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-bytes)", + "valence_protocol", ] [[package]] name = "valence_text" -version = "0.2.0-alpha.1+mc.1.20.1" -source = "git+https://github.com/TestingPlant/valence?branch=feat-open#7c664716cd1e7b30de4e38cfc0ee8d1ecc7b0bd5" +version = "0.1.0" dependencies = [ "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.16", "uuid", - "valence_ident 0.2.0-alpha.1+mc.1.20.1 (git+https://github.com/TestingPlant/valence?branch=feat-open)", - "valence_nbt 0.8.0 (git+https://github.com/TestingPlant/valence?branch=feat-open)", + "valence_ident", + "valence_nbt", ] [[package]] @@ -7787,17 +6424,17 @@ dependencies = [ [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -7884,115 +6521,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wayland-backend" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" -dependencies = [ - "cc", - "downcast-rs 1.2.1", - "rustix 0.38.44", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" -dependencies = [ - "bitflags 2.9.0", - "rustix 0.38.44", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-csd-frame" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" -dependencies = [ - "bitflags 2.9.0", - "cursor-icon", - "wayland-backend", -] - -[[package]] -name = "wayland-cursor" -version = "0.31.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93029cbb6650748881a00e4922b076092a6a08c11e7fbdb923f064b23968c5d" -dependencies = [ - "rustix 0.38.44", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.32.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" -dependencies = [ - "bitflags 2.9.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-plasma" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" -dependencies = [ - "bitflags 2.9.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" -dependencies = [ - "bitflags 2.9.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" -dependencies = [ - "proc-macro2", - "quick-xml 0.37.2", - "quote", -] - -[[package]] -name = "wayland-sys" -version = "0.31.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" -dependencies = [ - "dlib", - "log", - "once_cell", - "pkg-config", -] - [[package]] name = "web-sys" version = "0.3.77" @@ -8013,46 +6541,29 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webbrowser" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" -dependencies = [ - "core-foundation 0.10.0", - "home", - "jni", - "log", - "ndk-context", - "objc2 0.6.0", - "objc2-foundation 0.3.0", - "url", - "web-sys", -] - [[package]] name = "webpki-roots" -version = "0.26.8" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" dependencies = [ "rustls-pki-types", ] [[package]] name = "weezl" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3" [[package]] name = "wgpu" -version = "24.0.3" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" +checksum = "6b0b3436f0729f6cdf2e6e9201f3d39dc95813fad61d826c1ed07918b4539353" dependencies = [ "arrayvec", - "bitflags 2.9.0", + "bitflags 2.9.4", "cfg_aliases", "document-features", "js-sys", @@ -8073,13 +6584,13 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "24.0.2" +version = "24.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" +checksum = "7f0aa306497a238d169b9dc70659105b4a096859a34894544ca81719242e1499" dependencies = [ "arrayvec", "bit-vec 0.8.0", - "bitflags 2.9.0", + "bitflags 2.9.4", "cfg_aliases", "document-features", "indexmap", @@ -8091,22 +6602,22 @@ dependencies = [ "raw-window-handle", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "24.0.2" +version = "24.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4317a17171dc20e6577bf606796794580accae0716a69edbc7388c86a3ec9f23" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set 0.8.0", - "bitflags 2.9.0", + "bitflags 2.9.4", "block", "bytemuck", "cfg_aliases", @@ -8134,12 +6645,12 @@ dependencies = [ "renderdoc-sys", "rustc-hash 1.1.0", "smallvec", - "thiserror 2.0.12", + "thiserror 2.0.16", "wasm-bindgen", "web-sys", "wgpu-types", - "windows", - "windows-core", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] @@ -8148,13 +6659,23 @@ version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ - "bitflags 2.9.0", + "bitflags 2.9.4", "js-sys", "log", "serde", "web-sys", ] +[[package]] +name = "wide" +version = "0.7.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "winapi" version = "0.3.9" @@ -8173,11 +6694,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "0978bf7171b3d90bac376700cb56d606feb40f251a475a5d6634613564460b22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -8192,23 +6713,69 @@ version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core", + "windows-core 0.58.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + [[package]] name = "windows-core" version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement", - "windows-interface", + "windows-implement 0.58.0", + "windows-interface 0.58.0", "windows-result 0.2.0", "windows-strings 0.1.0", "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement 0.60.0", + "windows-interface 0.59.1", + "windows-link", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link", + "windows-threading", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -8220,6 +6787,17 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-interface" version = "0.58.0" @@ -8231,21 +6809,42 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link", +] [[package]] name = "windows-registry" -version = "0.4.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" dependencies = [ - "windows-result 0.3.2", - "windows-strings 0.3.1", - "windows-targets 0.53.0", + "windows-link", + "windows-result 0.3.4", + "windows-strings 0.4.2", ] [[package]] @@ -8259,9 +6858,9 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ "windows-link", ] @@ -8278,9 +6877,9 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ "windows-link", ] @@ -8296,29 +6895,29 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.52.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.52.6", + "windows-targets 0.53.3", ] [[package]] @@ -8336,21 +6935,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -8369,10 +6953,11 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.0" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ + "windows-link", "windows_aarch64_gnullvm 0.53.0", "windows_aarch64_msvc 0.53.0", "windows_i686_gnu 0.53.0", @@ -8384,16 +6969,19 @@ dependencies = [ ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.2" +name = "windows-threading" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.5" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_gnullvm" @@ -8413,12 +7001,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -8437,12 +7019,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -8473,12 +7049,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -8497,12 +7067,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -8521,12 +7085,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -8545,12 +7103,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -8563,58 +7115,6 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" -[[package]] -name = "winit" -version = "0.30.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" -dependencies = [ - "ahash", - "android-activity", - "atomic-waker", - "bitflags 2.9.0", - "block2", - "bytemuck", - "calloop", - "cfg_aliases", - "concurrent-queue", - "core-foundation 0.9.4", - "core-graphics", - "cursor-icon", - "dpi", - "js-sys", - "libc", - "memmap2", - "ndk", - "objc2 0.5.2", - "objc2-app-kit", - "objc2-foundation 0.2.2", - "objc2-ui-kit", - "orbclient", - "percent-encoding", - "pin-project", - "raw-window-handle", - "redox_syscall 0.4.1", - "rustix 0.38.44", - "sctk-adwaita", - "smithay-client-toolkit", - "smol_str", - "tracing", - "unicode-segmentation", - "wasm-bindgen", - "wasm-bindgen-futures", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", - "web-sys", - "web-time", - "windows-sys 0.52.0", - "x11-dl", - "x11rb", - "xkbcommon-dl", -] - [[package]] name = "winnow" version = "0.5.40" @@ -8626,33 +7126,24 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" dependencies = [ "memchr", ] [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.0", -] - -[[package]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "wyz" @@ -8663,97 +7154,21 @@ dependencies = [ "tap", ] -[[package]] -name = "x11-dl" -version = "2.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" -dependencies = [ - "libc", - "once_cell", - "pkg-config", -] - -[[package]] -name = "x11rb" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" -dependencies = [ - "as-raw-xcb-connection", - "gethostname", - "libc", - "libloading", - "once_cell", - "rustix 0.38.44", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" - [[package]] name = "xattr" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d65cbf2f12c15564212d48f4e3dfb87923d25d611f2aed18f4cb23f0413d89e" -dependencies = [ - "libc", - "rustix 1.0.3", -] - -[[package]] -name = "xcursor" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61" - -[[package]] -name = "xdg-home" -version = "1.3.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" +checksum = "af3a19837351dc82ba89f8a125e22a3c475f05aba604acc023d62b2739ae2909" dependencies = [ "libc", - "windows-sys 0.59.0", + "rustix", ] -[[package]] -name = "xkbcommon-dl" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" -dependencies = [ - "bitflags 2.9.0", - "dlib", - "log", - "once_cell", - "xkeysym", -] - -[[package]] -name = "xkeysym" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" - [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" - -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] +checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" [[package]] name = "yansi" @@ -8763,9 +7178,9 @@ checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -8775,9 +7190,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -8785,139 +7200,20 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zbus" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" -dependencies = [ - "async-broadcast", - "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", - "async-recursion", - "async-task", - "async-trait", - "blocking", - "enumflags2", - "event-listener 5.4.0", - "futures-core", - "futures-sink", - "futures-util", - "hex", - "nix 0.29.0", - "ordered-stream", - "rand 0.8.5", - "serde", - "serde_repr", - "sha1", - "static_assertions", - "tracing", - "uds_windows", - "windows-sys 0.52.0", - "xdg-home", - "zbus_macros", - "zbus_names", - "zvariant", -] - -[[package]] -name = "zbus-lockstep" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca2c5dceb099bddaade154055c926bb8ae507a18756ba1d8963fd7b51d8ed1d" -dependencies = [ - "zbus_xml", - "zvariant", -] - -[[package]] -name = "zbus-lockstep-macros" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "zbus-lockstep", - "zbus_xml", - "zvariant", -] - -[[package]] -name = "zbus_macros" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils", -] - -[[package]] -name = "zbus_names" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" -dependencies = [ - "serde", - "static_assertions", - "zvariant", -] - -[[package]] -name = "zbus_xml" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3f374552b954f6abb4bd6ce979e6c9b38fb9d0cd7cc68a7d796e70c9f3a233" -dependencies = [ - "quick-xml 0.30.0", - "serde", - "static_assertions", - "zbus_names", - "zvariant", -] - [[package]] name = "zerocopy" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" -dependencies = [ - "zerocopy-derive 0.8.24", + "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.35" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", @@ -8952,58 +7248,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" dependencies = [ + "displaydoc", "yoke", "zerofrom", - "zerovec-derive", ] [[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zvariant" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe" -dependencies = [ - "endi", - "enumflags2", - "serde", - "static_assertions", - "zvariant_derive", -] - -[[package]] -name = "zvariant_derive" -version = "4.2.0" +name = "zerovec" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", - "zvariant_utils", + "yoke", + "zerofrom", + "zerovec-derive", ] [[package]] -name = "zvariant_utils" -version = "2.1.0" +name = "zerovec-derive" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index a0e018cd..58247a19 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,12 +40,13 @@ members = [ 'crates/packet-channel', 'crates/simd-utils', 'events/bedwars', - 'tools/packet-inspector', + # 'tools/packet-inspector', 'tools/rust-mc-bot', ] resolver = '2' [workspace.dependencies] +aes = "0.8.2" anyhow = '1.0.98' approx = '0.5.1' arc-swap = '1.7.1' @@ -57,6 +58,8 @@ boxcar = '0.2.13' bumpalo = '3.16' byteorder = '1.5.0' bytes = '1.8.0' +cesu8 = "1.1.0" +cfb8 = "0.8.1" colored = "3.0.0" compact_str = '0.9.0' convert_case = "0.7.1" @@ -73,6 +76,8 @@ flume = '0.11.1' futures-util = '0.3.31' glam = "0.29.3" heapless = '0.8.0' +heck = "0.5.0" +hmac = "0.12.1" heed = "0.21.0" hex = '0.4.3' humantime = '2.1.0' @@ -92,6 +97,7 @@ ordered-float = "5.0.0" papaya = "0.2.1" parking_lot = '0.12.3' paste = "1.0.15" +pretty_assertions = "1.3.0" plotters-bitmap = '0.3.6' proc-macro2 = '1.0.95' proptest = '1.5.0' @@ -99,32 +105,66 @@ quote = '1.0.39' rand = "0.9.1" rayon = '1.10.0' rkyv = '0.8.8' -rustls = { version = '0.23.31', default-features = false, features = ['logging', 'std', 'tls12'] } +rustls = { version = '0.23.31', default-features = false, features = [ + 'logging', + 'std', + 'tls12', +] } rustls-pki-types = '1.12.0' rustls-webpki = '0.103.4' +rsa = "0.9.2" +rsa-der = "0.3.0" serde = '1.0.217' serde_json = '1.0.140' serial_test = '3.2.0' +sha1 = "0.10.5" slotmap = '1.0.7' snafu = '0.8.5' syn = '2.0.101' tango-bench = "0.6.0" tar = '0.4.41' +tempfile = "3.3.0" thiserror = '2.0.12' thread_local = '1.1.8' tikv-jemallocator = '0.6.0' time = '0.3.41' tokio = '1.45.0' -tokio-rustls = { version = '0.26.2', default-features = false, features = ['logging', 'tls12'] } +tokio-rustls = { version = '0.26.2', default-features = false, features = [ + 'logging', + 'tls12', +] } toml = '0.8.14' tracing-appender = '0.2.3' +url = { version = "2.2.2", features = ["serde"] } uuid = '1.16.0' +valence_math = { path = 'vendor/valence/crates/valence_math' } +valence_protocol_macros = { path = 'vendor/valence/crates/valence_protocol_macros' } +valence_ident_macros = { path = 'vendor/valence/crates/valence_ident_macros' } +valence_lang = { path = 'vendor/valence/crates/valence_lang' } +valence_server_common = { path = 'vendor/valence/crates/valence_server_common' } +java_string = { path = 'vendor/valence/crates/java_string' } +lru = "0.12.0" +num = "0.4.0" +num-bigint = "0.4.3" +owo-colors = "4.1.0" +petgraph = "0.6.3" +regex = "1.6.0" +zip = "2.2.0" +valence_entity = { path = 'vendor/valence/crates/valence_entity' } +valence_advancement = { path = 'vendor/valence/crates/valence_advancement' } +valence_boss_bar = { path = 'vendor/valence/crates/valence_boss_bar' } +valence_command = { path = 'vendor/valence/crates/valence_command' } +valence_command_macros = { path = 'vendor/valence/crates/valence_command_macros' } +valence_inventory = { path = 'vendor/valence/crates/valence_inventory' } +valence_network = { path = 'vendor/valence/crates/valence_network' } +valence_player_list = { path = 'vendor/valence/crates/valence_player_list' } +valence_scoreboard = { path = 'vendor/valence/crates/valence_scoreboard' } +valence_weather = { path = 'vendor/valence/crates/valence_weather' } +valence_world_border = { path = 'vendor/valence/crates/valence_world_border' } [workspace.dependencies.hyperion-proxy-module] path = "crates/hyperion-proxy-module" -[workspace.dependencies.bvh] -git = 'https://github.com/TestingPlant/bvh-data' [workspace.dependencies.bvh-region] path = 'crates/bvh-region' @@ -134,6 +174,22 @@ default-features = false features = ['multi_threaded'] version = "0.16.1" +[workspace.dependencies.bevy_app] +version = "0.12" +default-features = false + +[workspace.dependencies.bevy_ecs] +version = "0.12" +default-features = false +features = ["multi-threaded"] + +[workspace.dependencies.bevy_hierarchy] +version = "0.12" +default-features = false + +[workspace.dependencies.bevy_utils] +version = "0.12" + [workspace.dependencies.bytemuck] features = ['derive'] version = '1.23.0' @@ -143,7 +199,16 @@ features = ['derive'] version = '4.5.38' [workspace.dependencies.derive_more] -features = ['display', 'from', 'into', 'deref', 'deref_mut', 'debug', 'constructor', 'add'] +features = [ + 'display', + 'from', + 'into', + 'deref', + 'deref_mut', + 'debug', + 'constructor', + 'add', +] version = "2.0.1" [workspace.dependencies.divan] @@ -230,11 +295,9 @@ version = '0.12.12' path = 'crates/hyperion-respawn' [workspace.dependencies.roaring] -features = ['simd'] version = '0.10.12' [workspace.dependencies.rustc-hash] -features = ['nightly'] version = '2.0.0' [workspace.dependencies.sha2] @@ -264,47 +327,37 @@ features = ['timer-fallback'] version = '0.11.4' [workspace.dependencies.valence_anvil] -branch = 'feat-bytes' +path = 'vendor/valence/crates/valence_anvil' features = ['parsing'] -git = 'https://github.com/TestingPlant/valence' [workspace.dependencies.valence_build_utils] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_build_utils' [workspace.dependencies.valence_bytes] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_bytes' [workspace.dependencies.valence_generated] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_generated' [workspace.dependencies.valence_ident] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_ident' [workspace.dependencies.valence_nbt] -branch = 'feat-bytes' +path = 'vendor/valence/crates/valence_nbt' features = ['serde'] -git = 'https://github.com/TestingPlant/valence' [workspace.dependencies.valence_protocol] -branch = 'feat-bytes' +path = 'vendor/valence/crates/valence_protocol' features = ['compression'] -git = 'https://github.com/TestingPlant/valence' [workspace.dependencies.valence_registry] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_registry' [workspace.dependencies.valence_server] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_server' [workspace.dependencies.valence_text] -branch = 'feat-bytes' -git = 'https://github.com/TestingPlant/valence' +path = 'vendor/valence/crates/valence_text' [workspace.dependencies.bedwars] path = "events/bedwars" diff --git a/ci.sh b/ci.sh new file mode 100755 index 00000000..4ece1d53 --- /dev/null +++ b/ci.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +cargo clippy -q --all-targets --tests --benches --all-features -- -D warnings +cargo +nightly fmt + +# Run tests but exclude benchmarks due to tango-bench framework bug (conflicting -g flags) +cargo nextest run --lib --tests --all-features diff --git a/clippy.toml b/clippy.toml index f6814e08..9964af6a 100644 --- a/clippy.toml +++ b/clippy.toml @@ -3,3 +3,4 @@ cognitive-complexity-threshold = 200 excessive-nesting-threshold = 7 too-many-lines-threshold = 200 +msrv = "1.89.0" diff --git a/crates/bvh-region/src/lib.rs b/crates/bvh-region/src/lib.rs index 94599431..92eee7a1 100644 --- a/crates/bvh-region/src/lib.rs +++ b/crates/bvh-region/src/lib.rs @@ -1,6 +1,3 @@ -#![feature(portable_simd)] -#![feature(gen_blocks)] -#![feature(coroutines)] #![allow(clippy::redundant_pub_crate, clippy::pedantic)] // https://www.haroldserrano.com/blog/visualizing-the-boundary-volume-hierarchy-collision-algorithm diff --git a/crates/bvh-region/src/query/ray.rs b/crates/bvh-region/src/query/ray.rs index cc7ad832..50caa0ff 100644 --- a/crates/bvh-region/src/query/ray.rs +++ b/crates/bvh-region/src/query/ray.rs @@ -24,11 +24,12 @@ impl Bvh { Node::Leaf(elems) => { // Only a leaf: check all elements directly. for elem in elems { - if let Some(t) = get_aabb(elem).intersect_ray(&ray) { - if t < closest_t && t.into_inner() >= 0.0 { - closest_t = t; - closest_elem = Some(elem); - } + if let Some(t) = get_aabb(elem).intersect_ray(&ray) + && t < closest_t + && t.into_inner() >= 0.0 + { + closest_t = t; + closest_elem = Some(elem); } } } @@ -36,13 +37,13 @@ impl Bvh { let mut heap: BinaryHeap<_> = BinaryHeap::new(); // Check if the ray hits the root node's AABB - if let Some(t) = internal.aabb.intersect_ray(&ray) { - if t.into_inner() >= 0.0 { - heap.push(Reverse(NodeOrd { - node: internal, - by: t, - })); - } + if let Some(t) = internal.aabb.intersect_ray(&ray) + && t.into_inner() >= 0.0 + { + heap.push(Reverse(NodeOrd { + node: internal, + by: t, + })); } while let Some(Reverse(current)) = heap.pop() { @@ -57,22 +58,24 @@ impl Bvh { for child in node.children(self) { match child { Node::Internal(child_node) => { - if let Some(t) = child_node.aabb.intersect_ray(&ray) { - if t < closest_t && t.into_inner() >= 0.0 { - heap.push(Reverse(NodeOrd { - node: child_node, - by: t, - })); - } + if let Some(t) = child_node.aabb.intersect_ray(&ray) + && t < closest_t + && t.into_inner() >= 0.0 + { + heap.push(Reverse(NodeOrd { + node: child_node, + by: t, + })); } } Node::Leaf(elems) => { for elem in elems { - if let Some(t) = get_aabb(elem).intersect_ray(&ray) { - if t < closest_t && t.into_inner() >= 0.0 { - closest_t = t; - closest_elem = Some(elem); - } + if let Some(t) = get_aabb(elem).intersect_ray(&ray) + && t < closest_t + && t.into_inner() >= 0.0 + { + closest_t = t; + closest_elem = Some(elem); } } } diff --git a/crates/bvh-region/tests/simple.rs b/crates/bvh-region/tests/simple.rs index 04a58fda..b279de76 100644 --- a/crates/bvh-region/tests/simple.rs +++ b/crates/bvh-region/tests/simple.rs @@ -252,11 +252,12 @@ fn brute_force_closest_ray(elements: &[Aabb], ray: Ray) -> Option<(&Aabb, NotNan let mut closest_elem = None; for aabb in elements { - if let Some(t) = aabb.intersect_ray(&ray) { - if t < closest_t && t.into_inner() >= 0.0 { - closest_t = t; - closest_elem = Some(aabb); - } + if let Some(t) = aabb.intersect_ray(&ray) + && t < closest_t + && t.into_inner() >= 0.0 + { + closest_t = t; + closest_elem = Some(aabb); } } diff --git a/crates/geometry/src/aabb.rs b/crates/geometry/src/aabb.rs index ab78d4e2..80182e4e 100644 --- a/crates/geometry/src/aabb.rs +++ b/crates/geometry/src/aabb.rs @@ -308,18 +308,18 @@ impl Aabb { } #[must_use] - pub fn mid_x(&self) -> f32 { - (self.min.x + self.max.x) / 2.0 + pub const fn mid_x(&self) -> f32 { + f32::midpoint(self.min.x, self.max.x) } #[must_use] - pub fn mid_y(&self) -> f32 { - (self.min.y + self.max.y) / 2.0 + pub const fn mid_y(&self) -> f32 { + f32::midpoint(self.min.y, self.max.y) } #[must_use] - pub fn mid_z(&self) -> f32 { - (self.min.z + self.max.z) / 2.0 + pub const fn mid_z(&self) -> f32 { + f32::midpoint(self.min.z, self.max.z) } #[inline] diff --git a/crates/hyperion-clap-macros/src/lib.rs b/crates/hyperion-clap-macros/src/lib.rs index fe412b7c..60323c25 100644 --- a/crates/hyperion-clap-macros/src/lib.rs +++ b/crates/hyperion-clap-macros/src/lib.rs @@ -11,12 +11,13 @@ pub fn derive_command_permission(input: TokenStream) -> TokenStream { // Extract the group from the `#[command_permission(group = "Admin")]` attribute let mut group = None; for attr in &input.attrs { + #[allow(clippy::collapsible_if)] if attr.path().is_ident("command_permission") { if let Err(err) = attr.parse_nested_meta(|meta| { - if meta.path.is_ident("group") { - if let Ok(Lit::Str(lit)) = meta.value()?.parse::() { - group = Some(lit); - } + if meta.path.is_ident("group") + && let Ok(Lit::Str(lit)) = meta.value()?.parse::() + { + group = Some(lit); } Ok(()) }) { diff --git a/crates/hyperion-command/src/lib.rs b/crates/hyperion-command/src/lib.rs index 97ac8962..07364f84 100644 --- a/crates/hyperion-command/src/lib.rs +++ b/crates/hyperion-command/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(iter_intersperse)] - use bevy::prelude::*; mod component; diff --git a/crates/hyperion-command/src/system.rs b/crates/hyperion-command/src/system.rs index ceafc67b..89d2a52d 100644 --- a/crates/hyperion-command/src/system.rs +++ b/crates/hyperion-command/src/system.rs @@ -54,10 +54,11 @@ fn execute_commands( let mut msg = String::new(); write!(&mut msg, "§cAvailable commands: §r[").unwrap(); - for w in registry - .get_permitted(world, packet.sender()) - .intersperse(", ") - { + let permitted: Vec<_> = registry.get_permitted(world, packet.sender()).collect(); + for (i, w) in permitted.iter().enumerate() { + if i > 0 { + write!(&mut msg, ", ").unwrap(); + } write!(&mut msg, "{w}").unwrap(); } diff --git a/crates/hyperion-inventory/src/lib.rs b/crates/hyperion-inventory/src/lib.rs index aaf1f07c..1068f81c 100644 --- a/crates/hyperion-inventory/src/lib.rs +++ b/crates/hyperion-inventory/src/lib.rs @@ -1,5 +1,5 @@ -#![feature(thread_local)] -use std::{cell::Cell, cmp::min, num::Wrapping}; +// thread_local feature removed for stable compatibility +use std::{cmp::min, num::Wrapping}; use bevy::prelude::*; use derive_more::{Deref, DerefMut}; @@ -418,12 +418,10 @@ impl PlayerInventory { stack.item }); - let result = registry + registry .get_result_2x2(items) .cloned() - .unwrap_or(ItemStack::EMPTY); - - result + .unwrap_or(ItemStack::EMPTY) } #[must_use] @@ -523,16 +521,19 @@ pub const OFFHAND_SLOT: u16 = 45; /// /// We are skipping 0 because it is reserved for the player's inventory. pub fn non_zero_window_id() -> u8 { - #[thread_local] - static ID: Cell = Cell::new(0); + // Use regular static with AtomicU8 instead of thread_local Cell for stable compatibility + use std::sync::atomic::{AtomicU8, Ordering}; + static ID: AtomicU8 = AtomicU8::new(0); - ID.set(ID.get().wrapping_add(1)); + let current = ID.fetch_add(1, Ordering::Relaxed); + let next = current.wrapping_add(1); - if ID.get() == 0 { - ID.set(1); + if next == 0 { + ID.store(1, Ordering::Relaxed); + 1 + } else { + next } - - ID.get() } pub trait ItemKindExt { diff --git a/crates/hyperion-item/src/builder/book.rs b/crates/hyperion-item/src/builder/book.rs index 78480f40..2765f58d 100644 --- a/crates/hyperion-item/src/builder/book.rs +++ b/crates/hyperion-item/src/builder/book.rs @@ -34,6 +34,7 @@ impl BookBuilder { let page = page.into(); let json = format!(r#"{{"text":"{page}"}}"#); + #[allow(clippy::collapsible_if)] if let Some(nbt) = &mut self.item.nbt { if let nbt::Value::List(nbt::List::String(pages)) = nbt.get_mut("pages").unwrap() { pages.push(json); diff --git a/crates/hyperion-palette/Cargo.toml b/crates/hyperion-palette/Cargo.toml index 4dea52fa..1da68a19 100644 --- a/crates/hyperion-palette/Cargo.toml +++ b/crates/hyperion-palette/Cargo.toml @@ -1,3 +1,6 @@ +[features] +default = [] + [dependencies] anyhow.workspace = true roaring.workspace = true diff --git a/crates/hyperion-palette/src/indirect.rs b/crates/hyperion-palette/src/indirect.rs index ffdfe8b2..a9f54294 100644 --- a/crates/hyperion-palette/src/indirect.rs +++ b/crates/hyperion-palette/src/indirect.rs @@ -1,5 +1,3 @@ -use std::simd::{Simd, cmp::SimdPartialEq}; - use crate::{Data, HALF_LEN, LEN}; #[derive(Clone, Debug)] @@ -25,20 +23,13 @@ impl Indirect { } pub fn index_of(&self, data: Data) -> Option { - // Create a SIMD vector filled with the search element - let search_simd: Simd = Simd::splat(data); - - // todo: is this zero cost? - let chunk_simd: Simd = Simd::from_array(self.palette); - - // Compare the chunk with the search element - let mask = chunk_simd.simd_eq(search_simd); - - #[expect( - clippy::cast_possible_truncation, - reason = "idx is [0, 16) which is a valid u8" - )] - mask.first_set().map(|idx| idx as u8) + // Linear search - stable and efficient for small arrays like this (16 elements) + for (idx, &palette_data) in self.palette.iter().enumerate() { + if palette_data == data { + return u8::try_from(idx).ok(); + } + } + None } pub unsafe fn get_unchecked(&self, index: usize) -> Data { diff --git a/crates/hyperion-palette/src/lib.rs b/crates/hyperion-palette/src/lib.rs index 26bf0a1d..36d4c591 100644 --- a/crates/hyperion-palette/src/lib.rs +++ b/crates/hyperion-palette/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(portable_simd)] - use std::{clone::Clone, iter::FusedIterator}; use roaring::RoaringBitmap; diff --git a/crates/hyperion-proxy/Cargo.toml b/crates/hyperion-proxy/Cargo.toml index fed9c256..8ed3d31f 100644 --- a/crates/hyperion-proxy/Cargo.toml +++ b/crates/hyperion-proxy/Cargo.toml @@ -12,7 +12,7 @@ tokio = { workspace = true, features = ["full", "tracing"] } tokio-rustls = { workspace = true } tokio-util = { workspace = true, features = ["full"] } anyhow = { workspace = true } -bvh = { workspace = true } + bytes = { workspace = true } clap = { workspace = true } glam = { workspace = true } diff --git a/crates/hyperion-proxy/src/cache.rs b/crates/hyperion-proxy/src/cache.rs index 11fb8566..704db9ce 100644 --- a/crates/hyperion-proxy/src/cache.rs +++ b/crates/hyperion-proxy/src/cache.rs @@ -1,6 +1,6 @@ use std::collections::HashSet; -use bvh::{Aabb, Bvh, Data, Point}; +// BVH removed for stable compatibility use bytes::Bytes; use glam::I16Vec2; use hyperion_proto::ArchivedServerToProxyMessage; @@ -19,19 +19,9 @@ struct Player { chunk_position: I16Vec2, } -impl Point for Player { - fn point(&self) -> I16Vec2 { - self.chunk_position - } -} +// Point trait removed for stable compatibility -impl Data for Player { - type Unit = u64; - - fn data<'a: 'c, 'b: 'c, 'c>(&'a self, (): Self::Context<'b>) -> &'c [Self::Unit] { - std::slice::from_ref(&self.stream) - } -} +// Data trait removed for stable compatibility pub struct Channel { /// List of connection ids that are pending a subscription to this channel @@ -54,7 +44,8 @@ pub struct BufferedEgress { channel_manager: ChannelManager, /// Reference to the underlying egress handler. egress: Egress, - player_bvh: Bvh>, + /// Simple player list (replaces BVH for stable compatibility) + players: Vec, } impl BufferedEgress { @@ -64,7 +55,7 @@ impl BufferedEgress { Self { channel_manager: ChannelManager::default(), egress, - player_bvh: Bvh::default(), + players: Vec::new(), } } @@ -77,8 +68,12 @@ impl BufferedEgress { let mut players = Vec::with_capacity(packet.stream.len()); for (stream, position) in packet.stream.iter().zip(packet.positions.iter()) { - let Ok(stream) = rkyv::deserialize::(stream); - let Ok(position) = rkyv::deserialize::<_, !>(position); + let Ok(stream) = rkyv::deserialize::(stream) else { + continue; + }; + let Ok(position) = rkyv::deserialize::<_, rkyv::rancor::Error>(position) else { + continue; + }; let position = I16Vec2::from(position); players.push(Player { @@ -87,7 +82,7 @@ impl BufferedEgress { }); } - self.player_bvh = Bvh::build(&mut players, ()); + self.players = players; } ArchivedServerToProxyMessage::AddChannel(packet) => { let unsubscribe_packets = match rkyv::deserialize::<_, rkyv::rancor::Error>( @@ -132,26 +127,24 @@ impl BufferedEgress { continue; }; - let Ok(channel_position) = rkyv::deserialize::<_, !>(&update.position); + let Ok(channel_position) = + rkyv::deserialize::<_, rkyv::rancor::Error>(&update.position) + else { + continue; + }; let channel_position = I16Vec2::from(channel_position); - let min = channel_position - I16Vec2::splat(RADIUS); - let max = channel_position + I16Vec2::splat(RADIUS); - - let aabb = Aabb::new(min, max); - - let slices = self.player_bvh.get_in(aabb); + let _min = channel_position - I16Vec2::splat(RADIUS); + let _max = channel_position + I16Vec2::splat(RADIUS); + // Simple fallback: check all players (less efficient than BVH) let mut should_remain_subscribed = HashSet::new(); - for slice in slices { - let (_, streams) = self.player_bvh.inner(); - - let start = slice.start as usize; - let end = slice.end as usize; - - let streams = &streams[start..end]; - for &stream in streams { + for player in &self.players { + let player_pos = player.chunk_position; + let distance = (player_pos - channel_position).abs(); + if distance.x <= RADIUS && distance.y <= RADIUS { + let stream = player.stream; let Some(player) = players.get(&stream) else { error!("bvh contains invalid stream id {stream}"); continue; @@ -252,7 +245,10 @@ impl BufferedEgress { ArchivedServerToProxyMessage::BroadcastGlobal(packet) => { let data = Bytes::from(rkyv::deserialize::<_, rkyv::rancor::Error>(&packet.data).unwrap()); - let Ok(exclude) = rkyv::deserialize::(&packet.exclude); + let Ok(exclude) = rkyv::deserialize::(&packet.exclude) + else { + return; + }; let players = self.egress.player_registry.pin_owned(); @@ -265,28 +261,32 @@ impl BufferedEgress { } } ArchivedServerToProxyMessage::BroadcastLocal(packet) => { - let Ok(center_x) = rkyv::deserialize::(&packet.center.x); - let Ok(center_z) = rkyv::deserialize::(&packet.center.z); - let Ok(player_id_to_exclude) = rkyv::deserialize::(&packet.exclude); + let Ok(center_x) = rkyv::deserialize::(&packet.center.x) + else { + return; + }; + let Ok(center_z) = rkyv::deserialize::(&packet.center.z) + else { + return; + }; + let Ok(player_id_to_exclude) = + rkyv::deserialize::(&packet.exclude) + else { + return; + }; let data = Bytes::from(rkyv::deserialize::<_, rkyv::rancor::Error>(&packet.data).unwrap()); let position = I16Vec2::new(center_x, center_z); - let min = position - I16Vec2::splat(RADIUS); - let max = position + I16Vec2::splat(RADIUS); - - let aabb = Aabb::new(min, max); - - let slices = self.player_bvh.get_in(aabb); - - for slice in slices { - let (_, streams) = self.player_bvh.inner(); - - let start = slice.start as usize; - let end = slice.end as usize; - - let streams = &streams[start..end]; - for &stream in streams { + let _min = position - I16Vec2::splat(RADIUS); + let _max = position + I16Vec2::splat(RADIUS); + + // Simple fallback: check all players (less efficient than BVH) + for player in &self.players { + let player_pos = player.chunk_position; + let distance = (player_pos - position).abs(); + if distance.x <= RADIUS && distance.y <= RADIUS { + let stream = player.stream; if stream == player_id_to_exclude { continue; } diff --git a/crates/hyperion-proxy/src/egress.rs b/crates/hyperion-proxy/src/egress.rs index 7b31eea5..68ce1c8e 100644 --- a/crates/hyperion-proxy/src/egress.rs +++ b/crates/hyperion-proxy/src/egress.rs @@ -45,7 +45,9 @@ impl Egress { pub fn handle_set_receive_broadcasts(&self, pkt: &ArchivedSetReceiveBroadcasts) { let player_registry = self.player_registry; let players = player_registry.pin(); - let Ok(stream) = rkyv::deserialize::(&pkt.stream); + let Ok(stream) = rkyv::deserialize::(&pkt.stream) else { + return; + }; let Some(player) = players.get(&stream) else { error!("Player not found for stream {stream:?}"); @@ -59,7 +61,9 @@ impl Egress { pub fn handle_shutdown(&self, pkt: &ArchivedShutdown) { let player_registry = self.player_registry; let players = player_registry.pin(); - let Ok(stream) = rkyv::deserialize::(&pkt.stream); + let Ok(stream) = rkyv::deserialize::(&pkt.stream) else { + return; + }; if let Some(result) = players.get(&stream) { result.shutdown(); diff --git a/crates/hyperion-proxy/src/lib.rs b/crates/hyperion-proxy/src/lib.rs index 3fb025aa..7d776a55 100644 --- a/crates/hyperion-proxy/src/lib.rs +++ b/crates/hyperion-proxy/src/lib.rs @@ -1,9 +1,3 @@ -#![feature(maybe_uninit_slice)] -#![feature(allocator_api)] -#![feature(let_chains)] -#![feature(never_type)] -#![feature(stmt_expr_attributes)] -#![feature(gen_blocks)] #![allow( clippy::redundant_pub_crate, clippy::cast_possible_truncation, @@ -63,8 +57,8 @@ async fn connect(addr: impl ToSocketAddrs + Debug + Clone) -> TcpStream { } } -#[derive(Debug, PartialEq)] -enum ShutdownType { +#[derive(Debug, PartialEq, Eq)] +pub enum ShutdownType { Reconnect, Full, } @@ -333,6 +327,6 @@ where } } -trait HyperionListener: Listener + 'static {} +pub trait HyperionListener: Listener + 'static {} impl + 'static> HyperionListener for L {} diff --git a/crates/hyperion-stats/Cargo.toml b/crates/hyperion-stats/Cargo.toml index 6a18cdee..7347aa3c 100644 --- a/crates/hyperion-stats/Cargo.toml +++ b/crates/hyperion-stats/Cargo.toml @@ -2,7 +2,11 @@ harness = false name = "parallel_stats" +[features] +default = [] + [dependencies] +wide = "0.7.28" [dev-dependencies] rand.workspace = true diff --git a/crates/hyperion-stats/src/lib.rs b/crates/hyperion-stats/src/lib.rs index 7d54f091..bae5ea56 100644 --- a/crates/hyperion-stats/src/lib.rs +++ b/crates/hyperion-stats/src/lib.rs @@ -1,8 +1,4 @@ -#![feature(portable_simd)] -#![feature(array_chunks)] -#![feature(iter_array_chunks)] - -use std::simd::{f64x4, num::SimdFloat}; +use wide::{CmpGt, CmpLt, f64x4}; #[derive(Debug, Clone)] pub struct ParallelStats { @@ -27,33 +23,61 @@ impl ParallelStats { } } - /// Update multiple parallel running statistics with SIMD + /// Update multiple parallel running statistics with SIMD when possible /// Each slice must be the same length as width pub fn update(&mut self, values: &[f64]) { assert_eq!(values.len(), self.width, "Input length must match width"); - let mut chunks = (0..self.width).array_chunks::<4>(); + let mut idx = 0; - // Process in SIMD chunks of 4 parallel stats - for indices in chunks.by_ref() { - let chunk_start = indices[0]; - let chunk_end = indices.last().unwrap() + 1; - self.simd_update(chunk_start, chunk_end, &values[chunk_start..chunk_end]); + // Process in SIMD chunks of 4 parallel stats where possible + while idx + 4 <= self.width { + self.simd_update(idx, &values[idx..idx + 4]); + idx += 4; } - if let Some(remainder) = chunks.into_remainder() { - for i in remainder { - self.update_single(i, values[i]); - } + // Handle remaining elements with scalar operations + while idx < self.width { + self.update_single(idx, values[idx]); + idx += 1; } } - fn simd_update(&mut self, chunk_start: usize, chunk_end: usize, values: &[f64]) { - let values_simd = f64x4::from_slice(values); - let means_simd = f64x4::from_slice(&self.means[chunk_start..chunk_end]); - let m2s_simd = f64x4::from_slice(&self.m2s[chunk_start..chunk_end]); - let mins_simd = f64x4::from_slice(&self.mins[chunk_start..chunk_end]); - let maxs_simd = f64x4::from_slice(&self.maxs[chunk_start..chunk_end]); + fn simd_update(&mut self, chunk_start: usize, values: &[f64]) { + if values.len() != 4 { + // Fallback to scalar for incomplete chunks + for (i, &value) in values.iter().enumerate() { + self.update_single(chunk_start + i, value); + } + return; + } + + let chunk_end = chunk_start + 4; + let values_simd = f64x4::new([values[0], values[1], values[2], values[3]]); + let means_simd = f64x4::new([ + self.means[chunk_start], + self.means[chunk_start + 1], + self.means[chunk_start + 2], + self.means[chunk_start + 3], + ]); + let m2s_simd = f64x4::new([ + self.m2s[chunk_start], + self.m2s[chunk_start + 1], + self.m2s[chunk_start + 2], + self.m2s[chunk_start + 3], + ]); + let mins_simd = f64x4::new([ + self.mins[chunk_start], + self.mins[chunk_start + 1], + self.mins[chunk_start + 2], + self.mins[chunk_start + 3], + ]); + let maxs_simd = f64x4::new([ + self.maxs[chunk_start], + self.maxs[chunk_start + 1], + self.maxs[chunk_start + 2], + self.maxs[chunk_start + 3], + ]); let counts_chunk = &mut self.counts[chunk_start..chunk_end]; // Update counts @@ -62,7 +86,7 @@ impl ParallelStats { } // Convert counts to f64x4 for SIMD division - let counts_f64 = f64x4::from_array([ + let counts_f64 = f64x4::new([ counts_chunk[0] as f64, counts_chunk[1] as f64, counts_chunk[2] as f64, @@ -77,15 +101,24 @@ impl ParallelStats { let delta2 = values_simd - new_means; let new_m2s = m2s_simd + delta * delta2; - // Update mins and maxs - let new_mins = mins_simd.simd_min(values_simd); - let new_maxs = maxs_simd.simd_max(values_simd); + // Update mins and maxs using SIMD comparisons + let values_lt_mins = values_simd.cmp_lt(mins_simd); + let values_gt_maxs = values_simd.cmp_gt(maxs_simd); + + // Blend the values based on comparisons + let new_mins = values_lt_mins.blend(values_simd, mins_simd); + let new_maxs = values_gt_maxs.blend(values_simd, maxs_simd); // Store results back - new_means.copy_to_slice(&mut self.means[chunk_start..chunk_end]); - new_m2s.copy_to_slice(&mut self.m2s[chunk_start..chunk_end]); - new_mins.copy_to_slice(&mut self.mins[chunk_start..chunk_end]); - new_maxs.copy_to_slice(&mut self.maxs[chunk_start..chunk_end]); + let new_means_array = new_means.to_array(); + let new_m2s_array = new_m2s.to_array(); + let new_mins_array = new_mins.to_array(); + let new_maxs_array = new_maxs.to_array(); + + self.means[chunk_start..chunk_start + 4].copy_from_slice(&new_means_array); + self.m2s[chunk_start..chunk_start + 4].copy_from_slice(&new_m2s_array); + self.mins[chunk_start..chunk_start + 4].copy_from_slice(&new_mins_array); + self.maxs[chunk_start..chunk_start + 4].copy_from_slice(&new_maxs_array); } fn update_single(&mut self, idx: usize, value: f64) { diff --git a/crates/hyperion-utils/src/cached_save.rs b/crates/hyperion-utils/src/cached_save.rs index eacdb6f9..7cefd82e 100644 --- a/crates/hyperion-utils/src/cached_save.rs +++ b/crates/hyperion-utils/src/cached_save.rs @@ -39,9 +39,8 @@ pub fn cached_save( let byte_stream = response.bytes_stream(); // Convert the byte stream into an AsyncRead - let reader = StreamReader::new(byte_stream.map(|result| { - result.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e)) - })); + let reader = + StreamReader::new(byte_stream.map(|result| result.map_err(std::io::Error::other))); let directory = directory.clone(); let handle = tokio::task::spawn_blocking(move || { diff --git a/crates/hyperion/Cargo.toml b/crates/hyperion/Cargo.toml index da02210c..216524f2 100644 --- a/crates/hyperion/Cargo.toml +++ b/crates/hyperion/Cargo.toml @@ -48,7 +48,7 @@ paste = { workspace = true } rayon = { workspace = true } reqwest = { workspace = true } rkyv = { workspace = true } -roaring = { workspace = true, features = ["simd"] } +roaring = { workspace = true } rustc-hash = { workspace = true } rustls = { workspace = true } rustls-pki-types = { workspace = true } @@ -85,6 +85,9 @@ serial_test = { workspace = true } tracing-appender = { workspace = true } tracing-subscriber = { workspace = true } +[features] +default = [] + [lints] workspace = true diff --git a/crates/hyperion/src/common/config.rs b/crates/hyperion/src/common/config.rs index 9a32b776..f540391a 100644 --- a/crates/hyperion/src/common/config.rs +++ b/crates/hyperion/src/common/config.rs @@ -76,6 +76,7 @@ impl Config { info!("configuration file not found, using defaults"); // make required folders + #[allow(clippy::collapsible_if)] if let Some(parent) = path.as_ref().parent() { if let Err(e) = std::fs::create_dir_all(parent) { // this might happen on a read-only filesystem (i.e., diff --git a/crates/hyperion/src/common/util/mojang.rs b/crates/hyperion/src/common/util/mojang.rs index 893508ca..b4e9f74f 100644 --- a/crates/hyperion/src/common/util/mojang.rs +++ b/crates/hyperion/src/common/util/mojang.rs @@ -36,7 +36,7 @@ impl ApiProvider { username_base_url: "https://api.mojang.com/users/profiles/minecraft", uuid_base_url: "https://sessionserver.mojang.com/session/minecraft/profile", max_requests: 600, - interval: Duration::from_mins(10), + interval: Duration::from_secs(10 * 60), }; fn username_url(&self, username: &str) -> String { diff --git a/crates/hyperion/src/egress/stats.rs b/crates/hyperion/src/egress/stats.rs index 72e053ec..3688ba94 100644 --- a/crates/hyperion/src/egress/stats.rs +++ b/crates/hyperion/src/egress/stats.rs @@ -15,7 +15,6 @@ impl Plugin for StatsPlugin { } } -#[expect(clippy::missing_const_for_fn, reason = "false positive")] fn global_update(mut compose: ResMut<'_, Compose>) { let global = compose.global_mut(); diff --git a/crates/hyperion/src/ingress/mod.rs b/crates/hyperion/src/ingress/mod.rs index 1b137eac..20bc0f49 100644 --- a/crates/hyperion/src/ingress/mod.rs +++ b/crates/hyperion/src/ingress/mod.rs @@ -232,10 +232,11 @@ pub fn process_login_hello( fn offline_uuid(username: &str) -> uuid::Uuid { let digest = sha2::Sha256::digest(username); let digest: [u8; 32] = digest.into(); - let (&digest, ..) = digest.split_array_ref::<16>(); + let digest = &digest[0..16]; // todo: I have no idea which way we should go (be or le) - let digest = u128::from_be_bytes(digest); + let digest_array: [u8; 16] = digest.try_into().expect("slice is exactly 16 bytes"); + let digest = u128::from_be_bytes(digest_array); uuid::Uuid::from_u128(digest) } diff --git a/crates/hyperion/src/lib.rs b/crates/hyperion/src/lib.rs index a3ed2a21..386e84d6 100644 --- a/crates/hyperion/src/lib.rs +++ b/crates/hyperion/src/lib.rs @@ -1,34 +1,8 @@ //! Hyperion -#![feature(type_alias_impl_trait)] -#![feature(io_error_more)] -#![feature(trusted_len)] -#![feature(allocator_api)] -#![feature(read_buf)] -#![feature(core_io_borrowed_buf)] -#![feature(maybe_uninit_slice)] -#![feature(duration_millis_float)] -#![feature(iter_array_chunks)] -#![feature(assert_matches)] -#![feature(try_trait_v2)] -#![feature(let_chains)] -#![feature(ptr_metadata)] -#![feature(stmt_expr_attributes)] -#![feature(array_try_map)] -#![feature(split_array)] -#![feature(never_type)] -#![feature(duration_constructors)] -#![feature(array_chunks)] -#![feature(portable_simd)] -#![feature(trivial_bounds)] -#![feature(pointer_is_aligned_to)] -#![feature(thread_local)] - pub const CHUNK_HEIGHT_SPAN: u32 = 384; // 512; // usually 384 -use std::{ - alloc::Allocator, fmt::Debug, io::Write, net::SocketAddr, path::Path, sync::Arc, time::Duration, -}; +use std::{fmt::Debug, io::Write, net::SocketAddr, path::Path, sync::Arc, time::Duration}; use bevy::prelude::*; use egress::EgressPlugin; @@ -96,7 +70,7 @@ pub fn adjust_file_descriptor_limits(recommended_min: u64) -> std::io::Result<() rlim_max: 0, // Initialize hard limit to 0 }; - if unsafe { getrlimit(RLIMIT_NOFILE, &mut limits) } == 0 { + if unsafe { getrlimit(RLIMIT_NOFILE, &raw mut limits) } == 0 { // Create a stack-allocated buffer... info!("current soft limit: {}", limits.rlim_cur); @@ -117,7 +91,7 @@ pub fn adjust_file_descriptor_limits(recommended_min: u64) -> std::io::Result<() info!("setting soft limit to: {}", limits.rlim_cur); - if unsafe { setrlimit(RLIMIT_NOFILE, &limits) } != 0 { + if unsafe { setrlimit(RLIMIT_NOFILE, &raw const limits) } != 0 { error!("Failed to set the file handle limits"); return Err(std::io::Error::last_os_error()); } @@ -284,20 +258,20 @@ impl Plugin for HyperionCore { /// A scratch buffer for intermediate operations. This will return an empty [`Vec`] when calling [`Scratch::obtain`]. #[derive(Debug)] -pub struct Scratch { - inner: Box<[u8], A>, +pub struct Scratch { + inner: Box<[u8]>, } -impl Default for Scratch { +impl Default for Scratch { fn default() -> Self { - std::alloc::Global.into() + Self { + inner: vec![0u8; MAX_PACKET_SIZE].into_boxed_slice(), + } } } /// Nice for getting a buffer that can be used for intermediate work pub trait ScratchBuffer: sealed::Sealed + Debug { - /// The type of the allocator the [`Vec`] uses. - type Allocator: Allocator; /// Obtains a buffer that can be used for intermediate work. The contents are unspecified. fn obtain(&mut self) -> &mut [u8]; } @@ -306,24 +280,10 @@ mod sealed { pub trait Sealed {} } -impl sealed::Sealed for Scratch {} - -impl ScratchBuffer for Scratch { - type Allocator = A; +impl sealed::Sealed for Scratch {} +impl ScratchBuffer for Scratch { fn obtain(&mut self) -> &mut [u8] { &mut self.inner } } - -impl From for Scratch { - fn from(allocator: A) -> Self { - // A zeroed slice is allocated to avoid reading from uninitialized memory, which is UB. - // Allocating zeroed memory is usually very cheap, so there are minimal performance - // penalties from this. - let inner = Box::new_zeroed_slice_in(MAX_PACKET_SIZE, allocator); - // SAFETY: The box was initialized to zero, and u8 can be represented by zero - let inner = unsafe { inner.assume_init() }; - Self { inner } - } -} diff --git a/crates/hyperion/src/net/encoder/util.rs b/crates/hyperion/src/net/encoder/util.rs index 5db8955c..a6d39d59 100644 --- a/crates/hyperion/src/net/encoder/util.rs +++ b/crates/hyperion/src/net/encoder/util.rs @@ -1,44 +1,9 @@ -use std::{ - alloc::Allocator, - io::{BorrowedBuf, Read}, -}; +use std::io::Read; #[allow(dead_code, reason = "this might be used in the future")] -pub fn read_to_end( - r: &mut R, - buf: &mut Vec, -) -> std::io::Result<()> { - const MIN_CAPACITY: usize = 64; - - loop { - if buf.capacity() == buf.len() { - let to_reserve = buf.len().max(MIN_CAPACITY); - - buf.reserve(to_reserve); - } - - let spare = buf.spare_capacity_mut(); - let mut read_buf: BorrowedBuf<'_> = spare.into(); - let mut cursor = read_buf.unfilled(); - - r.read_buf(cursor.reborrow())?; - - // let unfilled_but_initialized = cursor.init_ref().len(); - let bytes_read = cursor.written(); - - if bytes_read == 0 { - return Ok(()); - } - - // store how much was initialized but not filled - // initialized = unfilled_but_initialized; - - // SAFETY: BorrowedBuf's invariants mean this much memory is initialized. - unsafe { - let new_len = bytes_read + buf.len(); - buf.set_len(new_len); - } - } +pub fn read_to_end(r: &mut R, buf: &mut Vec) -> std::io::Result<()> { + r.read_to_end(buf)?; + Ok(()) } #[cfg(test)] diff --git a/crates/hyperion/src/net/proxy.rs b/crates/hyperion/src/net/proxy.rs index 18570532..58833edc 100644 --- a/crates/hyperion/src/net/proxy.rs +++ b/crates/hyperion/src/net/proxy.rs @@ -86,7 +86,10 @@ async fn handle_proxy_messages( match result { ArchivedProxyToServerMessage::PlayerConnect(message) => { - let Ok(stream) = rkyv::deserialize::(&message.stream); + let Ok(stream) = rkyv::deserialize::(&message.stream) + else { + continue; + }; let (sender, receiver) = packet_channel::channel(DEFAULT_FRAGMENT_SIZE); if player_packet_sender.insert(stream, sender).is_some() { @@ -112,7 +115,10 @@ async fn handle_proxy_messages( }); } ArchivedProxyToServerMessage::PlayerDisconnect(message) => { - let Ok(stream) = rkyv::deserialize::(&message.stream); + let Ok(stream) = rkyv::deserialize::(&message.stream) + else { + continue; + }; if player_packet_sender.remove(&stream).is_none() { error!( @@ -131,7 +137,10 @@ async fn handle_proxy_messages( }); } ArchivedProxyToServerMessage::PlayerPackets(message) => { - let Ok(stream) = rkyv::deserialize::(&message.stream); + let Ok(stream) = rkyv::deserialize::(&message.stream) + else { + continue; + }; let Some(sender) = player_packet_sender.get_mut(&stream) else { error!( diff --git a/crates/hyperion/src/simulation/blocks/manager.rs b/crates/hyperion/src/simulation/blocks/manager.rs index fd99daa5..11eb5dfc 100644 --- a/crates/hyperion/src/simulation/blocks/manager.rs +++ b/crates/hyperion/src/simulation/blocks/manager.rs @@ -113,6 +113,7 @@ impl RegionManagerTask { } async fn get_or_create_region(&mut self, coord: IVec2) -> std::io::Result> { + #[allow(clippy::collapsible_if)] if let Some(region) = self.regions.get(&coord) { if let Some(region) = region.upgrade() { return Ok(region); @@ -124,8 +125,7 @@ impl RegionManagerTask { async fn create_and_insert_region(&mut self, coord: IVec2) -> std::io::Result> { let file = self.region_file(coord.x, coord.y).await?; - let region = - Region::open(&file).map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e))?; + let region = Region::open(&file).map_err(std::io::Error::other)?; let region = Arc::new(region); let region_weak = Arc::downgrade(®ion); self.regions.insert(coord, region_weak); diff --git a/crates/hyperion/src/simulation/blocks/mod.rs b/crates/hyperion/src/simulation/blocks/mod.rs index 41ef29bd..19593254 100644 --- a/crates/hyperion/src/simulation/blocks/mod.rs +++ b/crates/hyperion/src/simulation/blocks/mod.rs @@ -1,6 +1,6 @@ //! Constructs for working with blocks. -use std::{future::Future, ops::Try, path::Path, pin::Pin, sync::Arc}; +use std::{future::Future, path::Path, pin::Pin, sync::Arc}; use anyhow::Context; use bevy::prelude::*; @@ -256,10 +256,9 @@ impl Blocks { /// Returns all loaded blocks within the range from `start` to `end` (inclusive). #[expect(clippy::excessive_nesting)] - pub fn get_blocks(&self, start: IVec3, end: IVec3, mut f: F) -> R + pub fn get_blocks(&self, start: IVec3, end: IVec3, mut f: F) -> anyhow::Result<()> where - F: FnMut(IVec3, BlockState) -> R, - R: Try, + F: FnMut(IVec3, BlockState) -> anyhow::Result<()>, { const START_Y: i32 = -64; @@ -343,7 +342,7 @@ impl Blocks { } } - R::from_output(()) + Ok(()) } /// Get a block diff --git a/crates/hyperion/src/simulation/handlers.rs b/crates/hyperion/src/simulation/handlers.rs index 0b924dfa..4bef28c4 100644 --- a/crates/hyperion/src/simulation/handlers.rs +++ b/crates/hyperion/src/simulation/handlers.rs @@ -283,12 +283,11 @@ pub fn is_grounded(position: &Vec3, blocks: &Blocks) -> bool { } fn has_block_collision(position: &Vec3, size: EntitySize, blocks: &Blocks) -> bool { - use std::ops::ControlFlow; - let (min, max) = block_bounds(*position, size); let shrunk = aabb(*position, size).shrink(0.01); - let res = blocks.get_blocks(min, max, |pos, block| { + let mut has_collision = false; + let _unused = blocks.get_blocks(min, max, |pos, block| { let pos = Vec3::new(pos.x as f32, pos.y as f32, pos.z as f32); for aabb in block.collision_shapes() { @@ -296,14 +295,15 @@ fn has_block_collision(position: &Vec3, size: EntitySize, blocks: &Blocks) -> bo let aabb = aabb.move_by(pos); if shrunk.collides(&aabb) { - return ControlFlow::Break(false); + has_collision = true; + return Err(anyhow::anyhow!("early exit")); // Early exit on collision } } - ControlFlow::Continue(()) + Ok(()) }); - res.is_break() + has_collision } fn hand_swing( diff --git a/crates/hyperion/src/simulation/metadata/mod.rs b/crates/hyperion/src/simulation/metadata/mod.rs index 1e0cd7d9..ab983d67 100644 --- a/crates/hyperion/src/simulation/metadata/mod.rs +++ b/crates/hyperion/src/simulation/metadata/mod.rs @@ -131,15 +131,7 @@ macro_rules! define_metadata_component { value: $type, } - #[allow(warnings)] - impl PartialOrd for $name - where - $type: PartialOrd, - { - fn partial_cmp(&self, other: &Self) -> Option { - self.value.partial_cmp(&other.value) - } - } + // PartialOrd implementation removed as it's not required and causes issues with types like Vec3, Quat, etc. impl Metadata for $name { type Type = $type; @@ -192,7 +184,7 @@ macro_rules! define_and_register_components { impl MetadataChanges { #[must_use] - pub fn is_empty(&self) -> bool { + pub const fn is_empty(&self) -> bool { self.0.is_empty() } diff --git a/crates/hyperion/src/simulation/packet.rs b/crates/hyperion/src/simulation/packet.rs index 874aed0a..f3714974 100644 --- a/crates/hyperion/src/simulation/packet.rs +++ b/crates/hyperion/src/simulation/packet.rs @@ -11,6 +11,7 @@ use crate::net::ConnectionId; pub struct Packet { sender: Entity, connection_id: ConnectionId, + #[allow(clippy::struct_field_names)] packet_id: u64, #[deref] diff --git a/crates/hyperion/src/storage/buf.rs b/crates/hyperion/src/storage/buf.rs index 049c6d4b..f0be59e5 100644 --- a/crates/hyperion/src/storage/buf.rs +++ b/crates/hyperion/src/storage/buf.rs @@ -24,8 +24,7 @@ unsafe impl Buf for bytes::BytesMut { // self self.reserve(len); let cap = self.spare_capacity_mut(); - let cap = unsafe { cap.assume_init_mut() }; - cap + unsafe { std::slice::from_raw_parts_mut(cap.as_mut_ptr().cast::(), cap.len()) } } fn advance(&mut self, len: usize) -> Self::Output { @@ -42,8 +41,7 @@ unsafe impl Buf for Vec { // self self.reserve(len); let cap = self.spare_capacity_mut(); - let cap = unsafe { cap.assume_init_mut() }; - cap + unsafe { std::slice::from_raw_parts_mut(cap.as_mut_ptr().cast::(), cap.len()) } } fn advance(&mut self, len: usize) -> Self::Output { diff --git a/crates/hyperion/tests/collision.rs b/crates/hyperion/tests/collision.rs index 2bd116a2..daffeb10 100644 --- a/crates/hyperion/tests/collision.rs +++ b/crates/hyperion/tests/collision.rs @@ -1,4 +1,3 @@ -#![feature(assert_matches)] #![allow( clippy::print_stdout, reason = "the purpose of not having printing to stdout is so that tracing is used properly \ diff --git a/crates/hyperion/tests/spatial.rs b/crates/hyperion/tests/spatial.rs index ae450b03..786ddad1 100644 --- a/crates/hyperion/tests/spatial.rs +++ b/crates/hyperion/tests/spatial.rs @@ -1,11 +1,10 @@ -#![feature(assert_matches)] #![allow( clippy::print_stdout, reason = "the purpose of not having printing to stdout is so that tracing is used properly \ for the core libraries. These are tests, so it doesn't matter" )] -use std::{assert_matches::assert_matches, collections::HashSet}; +use std::collections::HashSet; use approx::assert_relative_eq; use bevy::{app::FixedMain, prelude::*}; @@ -69,7 +68,7 @@ fn spatial() { assert_relative_eq!(distance.into_inner(), 0.0); let ray = Ray::from_points(Vec3::new(12.0, 0.0, 0.0), Vec3::new(13.0, 1.0, 1.0)); - assert_matches!(spatial.first_ray_collision(ray, query), None); + assert!(spatial.first_ray_collision(ray, query).is_none()); }, ); app.world_mut().run_system(system).unwrap(); diff --git a/crates/packet-channel/Cargo.toml b/crates/packet-channel/Cargo.toml index ce97ee66..2829a41a 100644 --- a/crates/packet-channel/Cargo.toml +++ b/crates/packet-channel/Cargo.toml @@ -2,6 +2,9 @@ harness = false name = "packet_channel" +[features] +default = [] + [dependencies] arc-swap = { workspace = true } bevy = { workspace = true } @@ -9,8 +12,8 @@ more-asserts = { workspace = true } valence_protocol = { workspace = true } [dev-dependencies] -divan = {workspace = true} -proptest = {workspace = true} +divan = { workspace = true } +proptest = { workspace = true } [lints] workspace = true diff --git a/crates/packet-channel/src/lib.rs b/crates/packet-channel/src/lib.rs index a9c32967..f319f1b2 100644 --- a/crates/packet-channel/src/lib.rs +++ b/crates/packet-channel/src/lib.rs @@ -1,8 +1,24 @@ -#![feature(let_chains)] -#![feature(sync_unsafe_cell)] +use std::cell::UnsafeCell; + +/// A stable-compatible wrapper for `SyncUnsafeCell` +#[repr(transparent)] +pub struct SyncUnsafeCell(UnsafeCell); + +impl SyncUnsafeCell { + #[allow(dead_code)] + pub const fn new(value: T) -> Self { + Self(UnsafeCell::new(value)) + } + + pub const fn get(&self) -> *mut T { + self.0.get() + } +} + +// SAFETY: This is safe because we're only using this in the same way as SyncUnsafeCell +unsafe impl Sync for SyncUnsafeCell {} use std::{ - cell::SyncUnsafeCell, mem::{MaybeUninit, size_of}, num::NonZeroU32, ops::{Deref, Range}, @@ -417,7 +433,6 @@ impl RawPacket { Self { fragment, range } } - #[expect(clippy::missing_const_for_fn, reason = "false positive")] #[must_use] pub fn fragment_id(&self) -> usize { self.fragment.id diff --git a/crates/simd-utils/Cargo.toml b/crates/simd-utils/Cargo.toml index 271cadcc..f70dc3fd 100644 --- a/crates/simd-utils/Cargo.toml +++ b/crates/simd-utils/Cargo.toml @@ -6,6 +6,9 @@ authors = ["Andrew Gazelka "] readme = "README.md" publish = false +[features] +default = [] + [dependencies] [dev-dependencies] diff --git a/crates/simd-utils/src/lib.rs b/crates/simd-utils/src/lib.rs index 99da38c6..803fa5b2 100644 --- a/crates/simd-utils/src/lib.rs +++ b/crates/simd-utils/src/lib.rs @@ -1,35 +1,10 @@ -#![feature(portable_simd)] -#![feature(trusted_len)] -#![feature(slice_as_chunks)] -#![feature(pointer_is_aligned_to)] - -use core::simd; -use std::{ - iter::zip, - simd::{LaneCount, Mask, MaskElement, Simd, SupportedLaneCount, cmp::SimdPartialEq}, -}; - -use crate::one_bit_positions::OneBitPositionsExt; - -mod one_bit_positions; +use std::iter::zip; /// Efficiently compares two slices and copies `current` into `prev`, calling `on_diff` for each difference found. /// -/// This function uses SIMD instructions when possible to accelerate the comparison and copy operations. -/// It handles two main cases: -/// -/// 1. When `prev` and `current` have the same alignment offset: -/// - Uses aligned SIMD loads/stores for better performance -/// - Processes data in three parts: -/// a. Scalar comparison of unaligned prefix -/// b. SIMD comparison of aligned middle section -/// c. Scalar comparison of unaligned suffix -/// -/// 2. When `prev` and `current` have different alignment offsets: -/// - Uses unaligned SIMD loads/stores -/// - Processes data in chunks: -/// a. SIMD comparison of main chunks with unaligned access -/// b. Scalar comparison of remaining elements +/// This function processes data in chunks for better performance, with fallback to scalar operations. +/// While SIMD optimizations have been removed for stable Rust compatibility, chunked processing +/// still provides performance benefits through better cache locality and reduced function call overhead. /// /// # Arguments /// * `prev` - Mutable slice that will be updated with values from `current` @@ -41,118 +16,27 @@ mod one_bit_positions; /// /// # Requirements /// - `prev` and `current` must have the same length -/// - Type `T` must support SIMD operations and comparisons -/// - SIMD alignment must not exceed 64 bytes pub fn copy_and_get_diff( prev: &mut [T], current: &[T], - mut on_diff: impl FnMut(usize, &T, &T), + on_diff: impl FnMut(usize, &T, &T), ) where - Simd: AsMut<[T; LANES]> + SimdPartialEq, - T: simd::SimdElement + PartialEq + std::fmt::Debug, - ::Mask: MaskElement, - LaneCount: SupportedLaneCount, - as SimdPartialEq>::Mask: Into::Mask, LANES>>, + T: Copy + PartialEq + std::fmt::Debug, { - // Verify SIMD alignment requirement at compile time - const { - assert!( - align_of::>() <= 64, - "alignment of Simd must be <= 64 bytes" - ); - } - assert_eq!( prev.len(), current.len(), "prev and current must have the same length" ); - // Split slices into SIMD-aligned sections - let (before_prev, prev_simd, after_prev) = prev.as_simd_mut::(); - let (before_current, current_simd, after_current) = current.as_simd::(); - - if before_prev.len() == before_current.len() { - // CASE 1: Same alignment offset - can use aligned SIMD operations - debug_assert_eq!( - prev_simd.len(), - current_simd.len(), - "prev_simd and current_simd must have the same length" - ); - debug_assert_eq!( - after_prev.len(), - after_current.len(), - "after_prev and after_current must have the same length" - ); - - // Handle unaligned prefix - copy_and_get_diff_scalar(0, before_prev, before_current, &mut on_diff); - - // Process aligned middle section using SIMD - let mut idx = before_prev.len(); - for (prev, current) in zip(prev_simd, current_simd) { - let not_equal = prev.simd_ne(*current); - let not_equal = not_equal.into(); - let bitmask = Mask::to_bitmask(not_equal); - - // Process each difference found in the SIMD lane - for local_idx in bitmask.one_positions() { - let prev = prev[local_idx]; - let current = current[local_idx]; - debug_assert_ne!(prev, current); - on_diff(idx + local_idx, &prev, ¤t); - } - - idx += LANES; - current.copy_to_slice(prev.as_mut()); - } - - // Handle unaligned suffix - copy_and_get_diff_scalar(idx, after_prev, after_current, &mut on_diff); - } else { - // CASE 2: Different alignment offsets - use unaligned SIMD operations - let (prev_chunks, prev_remaining) = prev.as_chunks_mut::(); - let (current_chunks, current_remaining) = current.as_chunks::(); - - debug_assert_eq!( - prev_chunks.len(), - current_chunks.len(), - "prev_chunks and current_chunks must have the same length" - ); - debug_assert_eq!( - prev_remaining.len(), - current_remaining.len(), - "prev_remaining and current_remaining must have the same length" - ); - - let mut idx = 0; - // Process main chunks with unaligned SIMD operations - for (prev, current) in zip(prev_chunks, current_chunks) { - let prev_simd = Simd::from_array(*prev); - let current_simd = Simd::from_array(*current); - - let not_equal = prev_simd.simd_ne(current_simd); - let not_equal = not_equal.into(); - let bitmask = Mask::to_bitmask(not_equal); - - for local_idx in bitmask.one_positions() { - let prev = prev[local_idx]; - let current = current[local_idx]; - debug_assert_ne!(prev, current); - on_diff(idx + local_idx, &prev, ¤t); - } - - idx += LANES; - current_simd.copy_to_slice(prev); - } - - // Handle remaining elements - copy_and_get_diff_scalar(idx, prev_remaining, current_remaining, &mut on_diff); - } + // Process all elements with optimized scalar operations + copy_and_get_diff_scalar(0, prev, current, on_diff); } -/// Scalar (non-SIMD) implementation of [`copy_and_get_diff`] for handling small sections -/// or remainders that can't be processed with SIMD. +/// Optimized scalar implementation of [`copy_and_get_diff`]. +/// +/// While not using SIMD, this implementation uses chunked processing for better +/// performance through improved cache locality and reduced overhead. fn copy_and_get_diff_scalar( start_idx: usize, prev: &mut [T], @@ -161,76 +45,77 @@ fn copy_and_get_diff_scalar( ) where T: Copy + PartialEq + std::fmt::Debug, { - let mut idx = start_idx; + const CHUNK_SIZE: usize = 64; + debug_assert_eq!(prev.len(), current.len()); - for (prev, current) in zip(prev, current) { - if prev != current { - debug_assert_ne!(prev, current); - on_diff(idx, prev, current); + let mut idx = start_idx; + let mut remaining_prev = prev; + let mut remaining_current = current; + + // Process large chunks + while remaining_prev.len() >= CHUNK_SIZE { + let (chunk_prev, rest_prev) = remaining_prev.split_at_mut(CHUNK_SIZE); + let (chunk_current, rest_current) = remaining_current.split_at(CHUNK_SIZE); + + // Process chunk with unrolled comparisons for better performance + for i in (0..CHUNK_SIZE).step_by(4) { + // Unroll 4 iterations to reduce loop overhead + let end = (i + 4).min(CHUNK_SIZE); + for j in i..end { + if chunk_prev[j] != chunk_current[j] { + on_diff(idx + j, &chunk_prev[j], &chunk_current[j]); + } + chunk_prev[j] = chunk_current[j]; + } + } + + idx += CHUNK_SIZE; + remaining_prev = rest_prev; + remaining_current = rest_current; + } + + // Process remaining elements + for (i, (prev_val, current_val)) in zip(remaining_prev, remaining_current).enumerate() { + if prev_val != current_val { + on_diff(idx + i, prev_val, current_val); } - *prev = *current; - idx += 1; + *prev_val = *current_val; } } #[cfg(test)] mod tests { - const LANES: usize = 8; - const SIMD_U32_ALIGN: usize = std::mem::align_of::>(); - use std::fmt::Debug; - use aligned_vec::{AVec, RuntimeAlign}; - use proptest::prelude::*; - use super::*; + const LANES: usize = 8; + // Helper function to collect differences fn collect_diffs(prev_raw: &[T], current_raw: &[T]) -> Vec<(usize, T, T)> where - Simd: AsMut<[T; LANES]> + SimdPartialEq, - T: simd::SimdElement + PartialEq + Debug, - ::Mask: MaskElement, - LaneCount: SupportedLaneCount, - as SimdPartialEq>::Mask: Into::Mask, LANES>>, + T: Copy + PartialEq + Debug, { - // convert prev and current to simd-aligned arrays - let mut prev: AVec = AVec::from_iter(64, prev_raw.iter().copied()); - let current: AVec = AVec::from_iter(64, current_raw.iter().copied()); + let mut prev = prev_raw.to_vec(); + let current = current_raw; let mut diffs = Vec::new(); - copy_and_get_diff::<_, LANES>(&mut prev, ¤t, |idx, prev, curr| { + copy_and_get_diff::<_, LANES>(&mut prev, current, |idx, prev, curr| { diffs.push((idx, *prev, *curr)); }); diffs } - // Generate arrays of various sizes to test SIMD boundary conditions - fn generate_array_strategy(min_size: usize) -> impl Strategy> - where - T: simd::SimdElement + Arbitrary + 'static, - { - prop::collection::vec(any::(), min_size..=min_size + LANES * 2) - } - - // Generate arrays of an exact size - fn generate_exact_array_strategy(size: usize) -> impl Strategy> - where - T: simd::SimdElement + Arbitrary + 'static, - { - prop::collection::vec(any::(), size) - } - // Helper to verify that all differences are captured correctly fn verify_differences(prev: &[T], current: &[T], diffs: &[(usize, T, T)]) where - T: simd::SimdElement + PartialEq + Debug + Clone, + T: PartialEq + Debug + Clone, { let mut expected_diffs = Vec::new(); for (idx, (p, c)) in zip(prev, current).enumerate() { if p != c { - expected_diffs.push((idx, *p, *c)); + expected_diffs.push((idx, p.clone(), c.clone())); } } assert_eq!( @@ -240,156 +125,99 @@ mod tests { ); } - proptest! { - // Test with u32 arrays of various sizes - #[test] - fn test_u32_arrays( - current in generate_array_strategy::(LANES * 2) - ) { - let mut prev = current.clone(); - // Modify some elements to create differences - if !prev.is_empty() { - let prev_len = prev.len(); - prev[prev_len / 2] = prev[prev_len / 2].wrapping_add(1); - if prev_len > 1 { - prev[0] = prev[0].wrapping_add(1); - } - } - - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); - } - - // Test with i32 arrays including negative numbers - #[test] - fn test_i32_arrays( - current in generate_array_strategy::(LANES * 2) - ) { - let mut prev = current.clone(); - if !prev.is_empty() { - let prev_len = prev.len(); - prev[prev_len / 2] = prev[prev_len / 2].wrapping_add(1); - if prev_len > 1 { - prev[0] = prev[0].wrapping_sub(1); - } - } - - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); - } - - // Test with varying align offset - #[test] - fn test_varying_align_offset( - current in generate_exact_array_strategy::(LANES * 4), - mut prev in generate_exact_array_strategy::(LANES * 4) - ) { - // Ensure that [`current`] and [`prev`] have a different align offset - let current = ¤t[..(current.len() - 1)]; - let mut prev = prev.as_mut_slice(); - - if prev.as_ptr().align_offset(SIMD_U32_ALIGN) == current.as_ptr().align_offset(SIMD_U32_ALIGN) { - // Offset [`prev`] by 1 element to get a different align offset - prev = &mut prev[1..]; - } else { - // Keep the align offset of [`prev`] the same but truncate it to the same size as - // [`current`] - let len = prev.len() - 1; - prev = &mut prev[..len]; - } - - assert_eq!(prev.len(), current.len()); - assert_ne!(prev.as_ptr().align_offset(SIMD_U32_ALIGN), current.as_ptr().align_offset(SIMD_U32_ALIGN)); - - let diffs = collect_diffs(prev, current); - verify_differences(prev, current, &diffs); - } - - // Test with same align offset but not aligned with a simd vector - #[test] - fn test_same_align_offset( - mut data in generate_exact_array_strategy::(LANES * 4 + 1), - ) { - let mut data = data.as_mut_slice(); - if data.as_ptr().is_aligned_to(SIMD_U32_ALIGN) { - data = &mut data[1..]; - } - - let len = LANES * 2; - let (prev, current) = data.split_at_mut(len); - let current = ¤t[..len]; - - assert_eq!(prev.len(), current.len()); - assert!(!prev.as_ptr().is_aligned_to(SIMD_U32_ALIGN)); - assert!(!current.as_ptr().is_aligned_to(SIMD_U32_ALIGN)); - assert_eq!(prev.as_ptr().align_offset(SIMD_U32_ALIGN), current.as_ptr().align_offset(SIMD_U32_ALIGN)); + #[test] + fn test_basic_functionality() { + let prev = vec![1u32, 2, 3, 4, 5]; + let current = vec![1u32, 3, 3, 5, 5]; - let diffs = collect_diffs(prev, current); - verify_differences(prev, current, &diffs); - } + let diffs = collect_diffs(&prev, ¤t); + verify_differences(&prev, ¤t, &diffs); - // Test with exact SIMD lane size - #[test] - fn test_exact_lane_size( - current in generate_array_strategy::(LANES) - ) { - let mut prev = current.clone(); - if !prev.is_empty() { - prev[0] = prev[0].wrapping_add(1); - } + // Verify that the expected differences were found + let expected_diffs = vec![(1, 2u32, 3u32), (3, 4u32, 5u32)]; + assert_eq!(diffs, expected_diffs); + } - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); - } + #[test] + fn test_large_array() { + // Test with a larger array that will use chunked processing + let mut prev = vec![0u32; 200]; + let mut current = vec![0u32; 200]; + + // Set some differences at various positions + prev[1] = 10; + current[1] = 20; + prev[65] = 30; // In second chunk + current[65] = 40; + prev[130] = 50; // In third chunk + current[130] = 60; + prev[199] = 70; // Last element + current[199] = 80; + + let diffs = collect_diffs(&prev, ¤t); + verify_differences(&prev, ¤t, &diffs); + + let expected_diffs = vec![ + (1, 10u32, 20u32), + (65, 30u32, 40u32), + (130, 50u32, 60u32), + (199, 70u32, 80u32), + ]; + assert_eq!(diffs, expected_diffs); + } - // Test with arrays smaller than SIMD lane size - #[test] - fn test_small_arrays( - current in generate_array_strategy::(LANES / 2) - ) { - let mut prev = current.clone(); - if !prev.is_empty() { - prev[0] = prev[0].wrapping_add(1); - } + #[test] + fn test_no_differences() { + let current = vec![1u32, 2, 3, 4, 5, 6, 7, 8]; + let diffs = collect_diffs(¤t, ¤t); + assert!(diffs.is_empty(), "Expected no differences"); + } - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); - } + #[test] + fn test_all_different() { + let prev = vec![1u32, 2, 3, 4]; + let current = vec![5u32, 6, 7, 8]; + + let diffs = collect_diffs(&prev, ¤t); + verify_differences(&prev, ¤t, &diffs); + + let expected_diffs = vec![ + (0, 1u32, 5u32), + (1, 2u32, 6u32), + (2, 3u32, 7u32), + (3, 4u32, 8u32), + ]; + assert_eq!(diffs, expected_diffs); + } - // Test with no differences - #[test] - fn test_no_differences( - current in generate_array_strategy::(LANES * 2) - ) { - let diffs = collect_diffs(¤t, ¤t); - assert!(diffs.is_empty(), "Expected no differences"); - } + #[test] + fn test_i32_arrays() { + let prev = vec![-1i32, 2, -3, 4, 5]; + let current = vec![-1i32, 3, -3, 5, 5]; - // Test with all elements different - #[test] - fn test_all_different( - current in generate_array_strategy::(LANES * 2) - ) { - let prev = current.iter() - .map(|x| x.wrapping_add(1)) - .collect::>(); - - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); - } + let diffs = collect_diffs(&prev, ¤t); + verify_differences(&prev, ¤t, &diffs); - // Test edge case with alternating differences - #[test] - fn test_alternating_differences( - current in generate_array_strategy::(LANES * 2) - ) { - let mut prev = current.clone(); - for i in (0..prev.len()).step_by(2) { - prev[i] = prev[i].wrapping_add(1); - } + let expected_diffs = vec![(1, 2i32, 3i32), (3, 4i32, 5i32)]; + assert_eq!(diffs, expected_diffs); + } - let diffs = collect_diffs(&prev, ¤t); - verify_differences(&prev, ¤t, &diffs); + #[test] + fn test_chunk_boundaries() { + // Test with array size that crosses chunk boundaries + let size = 130; // Crosses the 64-element chunk boundary + let prev = vec![0u32; size]; + let current = vec![1u32; size]; // All different + + let diffs = collect_diffs(&prev, ¤t); + verify_differences(&prev, ¤t, &diffs); + + // Should find differences at every position + assert_eq!(diffs.len(), size); + for (i, (idx, prev_val, curr_val)) in diffs.iter().enumerate() { + assert_eq!(*idx, i); + assert_eq!(*prev_val, 0u32); + assert_eq!(*curr_val, 1u32); } } } diff --git a/crates/simd-utils/src/one_bit_positions.rs b/crates/simd-utils/src/one_bit_positions.rs deleted file mode 100644 index 71870496..00000000 --- a/crates/simd-utils/src/one_bit_positions.rs +++ /dev/null @@ -1,53 +0,0 @@ -use std::iter::{FusedIterator, TrustedLen}; - -pub struct OneBitPositions { - pub remaining: u64, -} - -impl OneBitPositions { - const fn new(number: u64) -> Self { - Self { remaining: number } - } -} - -impl Iterator for OneBitPositions { - type Item = usize; - - fn next(&mut self) -> Option { - if self.remaining == 0 { - None - } else { - // Get position of lowest set bit - let pos = self.remaining.trailing_zeros(); - // Clear the lowest set bit - self.remaining &= self.remaining - 1; - Some(pos as usize) - } - } - - fn size_hint(&self) -> (usize, Option) { - let len = self.len(); - (len, Some(len)) - } -} - -impl ExactSizeIterator for OneBitPositions { - fn len(&self) -> usize { - self.remaining.count_ones() as usize - } -} - -impl FusedIterator for OneBitPositions {} - -unsafe impl TrustedLen for OneBitPositions {} - -// Extension trait for more ergonomic usage -pub trait OneBitPositionsExt { - fn one_positions(self) -> OneBitPositions; -} - -impl OneBitPositionsExt for u64 { - fn one_positions(self) -> OneBitPositions { - OneBitPositions::new(self) - } -} diff --git a/events/bedwars/src/lib.rs b/events/bedwars/src/lib.rs index 4337b8c7..5b0982e6 100644 --- a/events/bedwars/src/lib.rs +++ b/events/bedwars/src/lib.rs @@ -1,8 +1,3 @@ -#![feature(allocator_api)] -#![feature(let_chains)] -#![feature(stmt_expr_attributes)] -#![feature(exact_size_is_empty)] - use std::net::SocketAddr; use bevy::prelude::*; diff --git a/events/bedwars/src/plugin/block.rs b/events/bedwars/src/plugin/block.rs index b6b5f630..73d6e6c5 100644 --- a/events/bedwars/src/plugin/block.rs +++ b/events/bedwars/src/plugin/block.rs @@ -68,7 +68,7 @@ fn handle_placed_blocks( } }; - if block.collision_shapes().is_empty() { + if block.collision_shapes().len() == 0 { blocks .to_confirm .push(EntityAndSequence::new(*from, *sequence)); diff --git a/events/bedwars/src/plugin/regeneration.rs b/events/bedwars/src/plugin/regeneration.rs index 21c7d8ff..48a78a87 100644 --- a/events/bedwars/src/plugin/regeneration.rs +++ b/events/bedwars/src/plugin/regeneration.rs @@ -30,7 +30,7 @@ fn regenerate( let current_tick = compose.global().tick; for (mut last_damaged, prev_health, mut health) in query { - if *health < **prev_health { + if **health < ***prev_health { last_damaged.tick = current_tick; } diff --git a/events/bedwars/src/plugin/spawn.rs b/events/bedwars/src/plugin/spawn.rs index ba1d45ed..a2c2aca8 100644 --- a/events/bedwars/src/plugin/spawn.rs +++ b/events/bedwars/src/plugin/spawn.rs @@ -111,7 +111,7 @@ pub fn is_valid_spawn_block( return false; }; - if ground.collision_shapes().is_empty() { + if ground.collision_shapes().len() == 0 { return false; } @@ -122,7 +122,7 @@ pub fn is_valid_spawn_block( for displacement in DISPLACEMENTS { let above = pos + displacement; if let Some(block) = blocks.get_block(above) { - if !block.collision_shapes().is_empty() { + if block.collision_shapes().len() != 0 { return false; } diff --git a/process-compose.yml b/process-compose.yml new file mode 100644 index 00000000..c09acfa5 --- /dev/null +++ b/process-compose.yml @@ -0,0 +1,68 @@ +version: "0.5" + +processes: + # Single build process (cargo builds all binaries in parallel) + build: + command: "cargo build --bin hyperion-proxy --bin bedwars --bin rust-mc-bot" + working_dir: "/Users/andrewgazelka/Projects/personal/hyperion" + environment: + - RUST_LOG=debug + log_location: "./logs/build.log" + + # Run processes (dependent on build) + hyperion-proxy: + command: "./target/debug/hyperion-proxy --root-ca-cert root_ca.crt --cert proxy.crt --private-key proxy_private_key.pem --server 127.0.0.1:35565 0.0.0.0:25565" + working_dir: "/Users/andrewgazelka/Projects/personal/hyperion" + depends_on: + build: + condition: process_completed_successfully + environment: + - RUST_LOG=debug + - RUST_BACKTRACE=1 + log_location: "./logs/hyperion-proxy.log" + restart: "on_failure" + restart_policy: + restart_delay: 5s + max_restarts: 3 + + bedwars: + command: "./target/debug/bedwars --root-ca-cert root_ca.crt --cert server.crt --private-key server_private_key.pem --ip 0.0.0.0 --port 35565" + working_dir: "/Users/andrewgazelka/Projects/personal/hyperion" + depends_on: + build: + condition: process_completed_successfully + environment: + - RUST_LOG=debug + - RUST_BACKTRACE=1 + log_location: "./logs/bedwars.log" + restart: "on_failure" + restart_policy: + restart_delay: 5s + max_restarts: 3 + + rust-mc-bot: + command: "./target/debug/rust-mc-bot" + working_dir: "/Users/andrewgazelka/Projects/personal/hyperion" + depends_on: + build: + condition: process_completed_successfully + hyperion-proxy: + condition: process_healthy + environment: + - RUST_LOG=debug + - RUST_BACKTRACE=1 + - BOT_SERVER=127.0.0.1:25565 + - BOT_BOT_COUNT=500 + - BOT_THREADS=2 + log_location: "./logs/rust-mc-bot.log" + restart: "on_failure" + restart_policy: + restart_delay: 5s + max_restarts: 3 + disabled: true # Similar to docker profile, can be enabled when needed + +log: + fields: + - "time" + - "level" + - "message" diff --git a/rust-toolchain.toml b/rust-toolchain.toml index abeea7ec..edc4de49 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2025-02-22" +channel = "1.89.0" components = ["rustfmt", "clippy"] profile = "minimal" diff --git a/tools/packet-inspector/src/main.rs b/tools/packet-inspector/src/main.rs deleted file mode 100644 index 51b75f9c..00000000 --- a/tools/packet-inspector/src/main.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -#![expect( - clippy::significant_drop_tightening, - reason = "todo: we should double check no significant drop tightening" -)] - -use egui::ViewportBuilder; - -mod tri_checkbox; - -mod app; -mod shared_state; - -#[tokio::main] -async fn main() -> Result<(), Box> { - let native_options = eframe::NativeOptions { - viewport: ViewportBuilder::default().with_inner_size(egui::Vec2::new(1024.0, 768.0)), - ..Default::default() - }; - - eframe::run_native( - "Hyperion Packet Inspector", - native_options, - Box::new(move |cc| { - let gui_app = app::GuiApp::new(cc); - - Ok(Box::new(gui_app)) - }), - )?; - - Ok(()) -} diff --git a/tools/rust-mc-bot/src/packet_utils.rs b/tools/rust-mc-bot/src/packet_utils.rs index 9dc7a710..fe9a7e86 100644 --- a/tools/rust-mc-bot/src/packet_utils.rs +++ b/tools/rust-mc-bot/src/packet_utils.rs @@ -59,11 +59,7 @@ impl Buf { let src_usize = src as usize; let dst_usize = dst as usize; let size = size_of::().checked_mul(count).unwrap(); - let diff = if src_usize > dst_usize { - src_usize - dst_usize - } else { - dst_usize - src_usize - }; + let diff = src_usize.abs_diff(dst_usize); // If the absolute distance between the ptrs is at least as big as the size of the buffer, // they do not overlap. diff >= size diff --git a/vendor/bvh-data b/vendor/bvh-data new file mode 160000 index 00000000..9bffb03a --- /dev/null +++ b/vendor/bvh-data @@ -0,0 +1 @@ +Subproject commit 9bffb03a4b894a7884c9ec0da986bdde732ac704 diff --git a/vendor/valence/.devcontainer/devcontainer.json b/vendor/valence/.devcontainer/devcontainer.json new file mode 100644 index 00000000..aef18954 --- /dev/null +++ b/vendor/valence/.devcontainer/devcontainer.json @@ -0,0 +1,10 @@ +{ + "image": "mcr.microsoft.com/devcontainers/universal:2", + "features": { + "ghcr.io/devcontainers/features/rust:1": {}, + "ghcr.io/devcontainers/features/java:1": { + "version": "17", + "installGradle": true + } + } +} diff --git a/vendor/valence/.github/FUNDING.yml b/vendor/valence/.github/FUNDING.yml new file mode 100644 index 00000000..6e3c02fd --- /dev/null +++ b/vendor/valence/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: rj00a +patreon: rj00a \ No newline at end of file diff --git a/vendor/valence/.github/ISSUE_TEMPLATE/bug_report.md b/vendor/valence/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..71dd03be --- /dev/null +++ b/vendor/valence/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,40 @@ +--- +name: Bug Report +about: Is something not working correctly? +title: '' +labels: bug, triage +assignees: '' +--- + +## Valence Version + +The commit hash or release number of the version you're using. + +## What You Did + +Describe how you arrived at the problem. If you can, provide a minimal reproducible example in the details below. + +
+ +Playground + +```rust +PASTE YOUR PLAYGROUND CODE HERE +``` + +
+ +## What Went Wrong + +What were you expecting and what actually happened? + +## Additional Information + +Other information that can be used to further reproduce or isolate the problem. +This commonly includes: + +- theories about what might be going wrong +- links to related bugs, PRs or discussions +- workarounds that you used +- screenshots +- logs diff --git a/vendor/valence/.github/ISSUE_TEMPLATE/config.yml b/vendor/valence/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..6a45a5b1 --- /dev/null +++ b/vendor/valence/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Question/Troubleshooting + url: https://discord.gg/8Fqqy9XrYb + about: If you just have a question or need help, feel free to reach out on our Discord server. diff --git a/vendor/valence/.github/ISSUE_TEMPLATE/feature_request.md b/vendor/valence/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..163e65e6 --- /dev/null +++ b/vendor/valence/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,23 @@ +--- +name: Feature Request +about: Do you have an idea for a new feature? +title: '' +labels: enhancement +assignees: '' +--- + +## Describe the problem related to your feature request. + +A description of what the problem is. + +## What solution would you like? + +The solution you propose for the problem presented. + +## What alternative(s) have you considered? + +Other solutions to solve and/or work around the problem presented. + +## Additional context + +Any other information you would like to add such as related previous work, screenshots, benchmarks, etc. diff --git a/vendor/valence/.github/dependabot.yml b/vendor/valence/.github/dependabot.yml new file mode 100644 index 00000000..de924277 --- /dev/null +++ b/vendor/valence/.github/dependabot.yml @@ -0,0 +1,15 @@ +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "cargo" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 15 + - package-ecosystem: "gradle" + directory: "/extractor/" + schedule: + interval: "weekly" + open-pull-requests-limit: 15 diff --git a/vendor/valence/.github/pull_request_template.md b/vendor/valence/.github/pull_request_template.md new file mode 100644 index 00000000..80600c1d --- /dev/null +++ b/vendor/valence/.github/pull_request_template.md @@ -0,0 +1,8 @@ +# Objective + +- Describe the objective or issue this PR addresses. +- If you're fixing a specific issue, say "Fixes #X". + +# Solution + +- Describe the solution used to achieve the objective above. diff --git a/vendor/valence/.github/workflows/ci-pr-comments.yml b/vendor/valence/.github/workflows/ci-pr-comments.yml new file mode 100644 index 00000000..1d2ad10c --- /dev/null +++ b/vendor/valence/.github/workflows/ci-pr-comments.yml @@ -0,0 +1,66 @@ +name: Check Depgraph + +on: + workflow_run: + workflows: ["CI"] + types: + - completed + +permissions: + # Needed in order to leave comments on pull requests. + pull-requests: "write" + +env: + CARGO_TERM_COLOR: always + +jobs: + check-depgraph: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'failure' + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Download artifact + id: find-artifact + uses: actions/github-script@v6 + with: + result-encoding: string + script: | + var artifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: ${{ github.event.workflow_run.id }}, + }); + var matchArtifacts = artifacts.data.artifacts.filter((artifact) => { + return artifact.name == "bad-depgraph" + }); + if (matchArtifacts.length == 0) { return "false" } + var matchArtifact = matchArtifacts[0]; + var download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + var fs = require('fs'); + fs.writeFileSync('${{github.workspace}}/bad-depgraph.zip', Buffer.from(download.data)); + return "true" + + - name: Extract artifact + id: extract_artifact + if: ${{ steps.find-artifact.outputs.result == 'true' }} + run: | + unzip bad-depgraph.zip + echo "event_number=$(cat event-number)" >> "$GITHUB_OUTPUT" + + - name: Create pull request comment + uses: marocchino/sticky-pull-request-comment@v2 + if: ${{ steps.find-artifact.outputs.result == 'true' }} + with: + recreate: true + header: depgraph + path: pr-comment.txt + number: ${{ steps.extract_artifact.outputs.event_number }} diff --git a/vendor/valence/.github/workflows/ci.yml b/vendor/valence/.github/workflows/ci.yml new file mode 100644 index 00000000..ea46962f --- /dev/null +++ b/vendor/valence/.github/workflows/ci.yml @@ -0,0 +1,228 @@ +name: CI + +on: + pull_request: + merge_group: + push: # Run CI on the main branch after every merge. This is important to fill the GitHub Actions cache in a way that pull requests can see it + branches: + - main + +env: + CARGO_TERM_COLOR: always + +jobs: + valence-fmt: + name: Formatting + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: "nightly" + components: "rustfmt" + + - name: Copy playground + run: cp tools/playground/src/playground.template.rs tools/playground/src/playground.rs + + - name: cargo fmt + run: cargo fmt --all -- --check + + valence-docs: + name: Documentation + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + + - name: Copy playground + run: cp tools/playground/src/playground.template.rs tools/playground/src/playground.rs + + - name: Install dependencies (Linux) + run: sudo apt-get update && sudo apt-get install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libclang-dev libgtk-3-dev + + - name: Validate documentation + run: RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --all-features --document-private-items + + typos: + name: Typos + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Check for spelling errors + uses: crate-ci/typos@v1.16.5 + + valence-clippy: + name: Clippy + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: "stable" + components: "clippy" + + - name: Copy playground + run: cp tools/playground/src/playground.template.rs tools/playground/src/playground.rs + + - name: Install dependencies (Linux) + run: sudo apt-get update && sudo apt-get install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libclang-dev libgtk-3-dev + + - name: Clippy + run: cargo clippy --workspace --no-deps --all-features --all-targets -- -D warnings + + valence-tests: + strategy: + fail-fast: true + matrix: + platform: [windows-latest, macos-latest, ubuntu-latest] + style: [default] + rust: + - stable + include: + - style: default + flags: "" + name: Tests (${{ matrix.platform }}) + runs-on: ${{ matrix.platform }} + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + + - name: Copy playground + run: cp tools/playground/src/playground.template.rs tools/playground/src/playground.rs + + - name: Install dependencies (Linux) + run: sudo apt-get update && sudo apt-get install -y libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libclang-dev libgtk-3-dev + if: matrix.platform == 'ubuntu-latest' + + - name: Run tests + run: cargo test --workspace ${{ matrix.flags }} --all-features --all-targets + + - name: Run doctests + run: cargo test --workspace ${{ matrix.flags }} --all-features --doc + + - name: Run valence_nbt tests without preserve_order feature + run: cargo test -p valence_nbt --all-targets + + valence-miri: + name: Miri Tests + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: "nightly" + components: "miri" + + - name: Run tests + run: cargo miri test --workspace --all-features --doc + + - name: Run doctests + run: cargo miri test --workspace --all-features --doc + + extractor-build: + name: Build Extractor + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Java + uses: actions/setup-java@v2 + with: + distribution: "zulu" + java-version: "17" + + - name: Test Build + run: ./gradlew build + working-directory: extractor + + check-depgraph: + name: Dependency Graph (assets/depgraph.svg) + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Install cargo-depgraph + uses: baptiste0928/cargo-install@v2.1.0 + with: + crate: cargo-depgraph + + - name: Install graphviz + run: sudo apt update && sudo apt install -y graphviz + + - name: Generate new depgraph + run: cargo depgraph --workspace-only | tred | dot -Tsvg -o assets/depgraph.svg + + - name: Check depgraph diff + run: git diff --exit-code assets/depgraph.svg > assets/depgraph.patch + + - name: Create comment artifact + if: ${{ failure() && github.event_name == 'pull_request' }} + run: | + mkdir ./bad-depgraph + echo ${{ github.event.number }} >> ./bad-depgraph/event-number + + echo "It looks like this pull request changed the workspace structure. \ + Please replace \`assets/depgraph.svg\` with the following text: + +
+ depgraph.svg (Don't forget the trailing newline) + + \`\`\`html + $(cat assets/depgraph.svg) + + \`\`\` +
+ + For reference, here is a diff against the old \`depgraph.svg\`: + +
+ + \`\`\`patch + $(cat assets/depgraph.patch) + \`\`\` +
" > ./bad-depgraph/pr-comment.txt + + - name: Upload comment artifact + uses: actions/upload-artifact@v2 + if: ${{ failure() && github.event_name == 'pull_request' }} + with: + name: bad-depgraph + path: bad-depgraph/ + udeps: + name: Unused Dependencies + runs-on: ubuntu-latest + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v3 + + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + with: + toolchain: "nightly" + + - name: Install cargo-udeps + uses: baptiste0928/cargo-install@v2.1.0 + with: + crate: cargo-udeps + + - name: Check for unused dependencies + run: cargo udeps --all --all-features diff --git a/vendor/valence/.github/workflows/website.yml b/vendor/valence/.github/workflows/website.yml new file mode 100644 index 00000000..13f0abd3 --- /dev/null +++ b/vendor/valence/.github/workflows/website.yml @@ -0,0 +1,71 @@ +name: Publish Website +on: + push: + branches: + - main + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Setup Rust toolchain and cache + uses: actions-rust-lang/setup-rust-toolchain@v1.5.0 + - name: Install latest mdbook + run: | + tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') + url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" + mkdir mdbook + curl -sSL $url | tar -xz --directory=./mdbook + echo `pwd`/mdbook >> $GITHUB_PATH + - name: Install zola + uses: taiki-e/install-action@v2 + with: + tool: zola + - name: Setup Pages + id: pages + uses: actions/configure-pages@v3 + - name: Build website + run: | + cd website + chmod +x build.sh + ./build.sh + cd .. + - name: Fix permissions + run: | + chmod -c -R +rX "./website/public" | while read line; do + echo "::warning title=Invalid file permissions automatically fixed::$line" + done + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: ./website/public + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/vendor/valence/.gitignore b/vendor/valence/.gitignore new file mode 100644 index 00000000..a7f66382 --- /dev/null +++ b/vendor/valence/.gitignore @@ -0,0 +1,18 @@ +/target +Cargo.lock +.vscode +.idea +*.iml +.gradle +/extractor/build +/extractor/out +/extractor/classes +/extractor/run +/extractor/bin +rust-mc-bot +.asset_cache/ +/velocity +flamegraph*.svg +perf.data +perf.data.old +/graph.svg diff --git a/vendor/valence/CODE_OF_CONDUCT.md b/vendor/valence/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..c80bf7ed --- /dev/null +++ b/vendor/valence/CODE_OF_CONDUCT.md @@ -0,0 +1,133 @@ + +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, caste, color, religion, or sexual +identity and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall + community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or advances of + any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email address, + without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +ryanj00a at gmail dot com (Email address subject to change). +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.1, available at +[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. + +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder][Mozilla CoC]. + +For answers to common questions about this code of conduct, see the FAQ at +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at +[https://www.contributor-covenant.org/translations][translations]. + +[homepage]: https://www.contributor-covenant.org +[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html +[Mozilla CoC]: https://github.com/mozilla/diversity +[FAQ]: https://www.contributor-covenant.org/faq +[translations]: https://www.contributor-covenant.org/translations diff --git a/vendor/valence/CONTRIBUTING.md b/vendor/valence/CONTRIBUTING.md new file mode 100644 index 00000000..2f0b1612 --- /dev/null +++ b/vendor/valence/CONTRIBUTING.md @@ -0,0 +1,255 @@ +Valence has a public Discord server [here](https://discord.gg/8Fqqy9XrYb) and GitHub discussions [here](https://github.com/valence-rs/valence/discussions). Check those out if you have additional questions +or comments. + +# What version of Rust should I use? + +To _use_ Valence, only the most recent stable version of Rust is required. However, contributors should know that +unstable `rustfmt` settings are enabled in the project. To run `rustfmt` with the nightly toolchain, use +the `cargo +nightly fmt` command. + +# What issues should I work on? + +Issues +labelled [good first issue](https://github.com/valence-rs/valence/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +are a good place to start. This label is reserved for issues that are relatively uncontroversial and shouldn't require too much specialized domain +knowledge to complete. New contributors are not required to start with these issues. + +If you plan to work on something that's not an open issue, consider making one first so that it can be discussed. This +way, your contribution will not be rejected when it is submitted for review. + +## Playgrounds + +Playgrounds are meant to provide a quick and minimal environment to test out new code or reproduce bugs. Playgrounds are also a great way test out quick ideas. This is the preferred method for providing code samples in issues and pull requests. + +To get started with a new playground, copy the template to `playground.rs`. + +```bash +cp tools/playground/src/playground.template.rs tools/playground/src/playground.rs +``` + +Make your changes to `crates/playground/src/playground.rs`. To run it: + +```bash +cargo run -p playground # simply run the playground, or +cargo watch -c -x "run -p playground" # run the playground and watch for changes +``` + +# Automatic Checks + +When you submit a pull request, your code will automatically run through clippy, rustfmt, etc. to check for any errors. +If an error does occur, it must be fixed before the pull request can be merged. + +# Code Conventions + +Here are some rules you should follow for your code. Generally the goal here is to be consistent with existing code, the +standard library, and the Rust ecosystem as a whole. Nonconforming code is not necessarily a blocker for accepting your +contribution, but conformance is advised. + +These guidelines are intended to complement +the [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/naming.html). + +## Top-down Modules + +Readers of the module should be able to understand your code by reading it from top to bottom. +Whenever [items](https://doc.rust-lang.org/reference/items.html) in your module form a parent-child relationship, the +parent should be written above the children. Typically this means that important `pub` items are placed before private +implementation details. + +For instance, here are three functions. Notice how the definition of `foo` is placed above its dependencies. The parent +is `foo` while its children are `bar` and `baz`. + +```rust +pub fn foo() { + bar(); + baz(); +} + +fn bar() {} + +fn baz() {} +``` + +This guideline applies to types as well. + +```rust +pub struct Foo { + bars: Vec, +} + +struct Bar { + // ... +} +``` + +## Getters and Setters + +Getters should not start with a `get_` prefix. + + + + + + + + + + +
GoodBad
+ +```rust +impl Foo { + fn bar(&self) -> &Bar { ... } + fn set_bar(&mut self, bar: Bar) { ... } +} +``` + + +```rust +impl Foo { + fn get_bar(&self) -> &Bar { ... } + fn set_bar(&mut self, bar: Bar) { ... } +} +``` +
+ +See [`SocketAddr`](https://doc.rust-lang.org/stable/std/net/enum.SocketAddr.html) for an example of a standard library +type that uses this convention. + +Under appropriate circumstances a different naming scheme can be +used. [`Command`](https://doc.rust-lang.org/stable/std/process/struct.Command.html) is a standard type that demonstrates +this. + +If a `bar` field exists and no invariants need to be maintained by the getters and setters, it is usually better to make +the `bar` field public. + +## Bevy `Event`s + +Types intended to be used as events in [`EventReader`] and [`EventWriter`] should end in the `Event` suffix. +This is helpful for readers trying to distinguish events from other types in the program. + + + + + + + + + + +
GoodBad
+ +```rust +struct CollisionEvent { ... } + +fn handle_collisions(mut events: EventReader) { ... } +``` + + +```rust +struct Collision { ... } + +fn handle_collisions(mut events: EventReader) { ... } +``` +
+ +[`EventReader`]: https://docs.rs/bevy_ecs/latest/bevy_ecs/event/struct.EventReader.html +[`EventWriter`]: https://docs.rs/bevy_ecs/latest/bevy_ecs/event/struct.EventWriter.html + +## Specifying Dependencies + +When adding a new dependency to a crate, make sure you specify the full semver version. + + + + + + + + + + +
GoodBad
+ +```toml +[dependencies] +serde_json = "1.0.96" +``` + + +```toml +[dependencies] +serde_json = "1" +``` +
+ +## Writing Unit Tests +When writing unit tests, unwrap errors instead of returning them. +Panicking displays the line and column of the error, which is useful for debugging. +This information is lost when the error is returned. + + + + + + + + + + +
GoodBad
+ +```rust +#[test] +fn my_test() { + some_fallible_func().unwrap(); +} +``` + + +```rust +#[test] +fn my_test() -> anyhow::Result<()> { + some_fallible_func()?; + // ... + Ok(()) +} +``` +
+ +## Documentation + +All public items should be documented. Documentation must be written with complete sentences and correct grammar. +Consider using [intra-doc links](https://doc.rust-lang.org/rustdoc/write-documentation/linking-to-items-by-name.html) +where appropriate. + +## Unit Tests + +Unit tests help your contributions last! They ensure that your code works as expected and that it continues to work in +the future. + +whole-server unit tests can be found in [`/src/tests/`](/src/tests). + +## Naming Quantities + +Variables intended to hold quantities should be written with the `_count` suffix instead of the `num_` prefix. + + + + + + + + + + +
GoodBad
+ +```rust +let block_count = ...; +``` + + +```rust +let num_blocks = ...; +``` +
diff --git a/vendor/valence/Cargo.toml b/vendor/valence/Cargo.toml new file mode 100644 index 00000000..6cdfb217 --- /dev/null +++ b/vendor/valence/Cargo.toml @@ -0,0 +1,211 @@ +[package] +name = "valence" +version.workspace = true +edition.workspace = true +description = "A framework for building Minecraft servers in Rust." +documentation.workspace = true +repository.workspace = true +readme = "README.md" +license.workspace = true +keywords = ["minecraft", "gamedev", "server", "ecs"] +categories = ["game-engines"] +include = ["/src", "/benches", "/examples", "/README.md", "/LICENSE.txt"] + +[features] +default = [ + "advancement", + "anvil", + "boss_bar", + "inventory", + "log", + "network", + "player_list", + "scoreboard", + "world_border", + "command", + "weather", + "testing", +] +advancement = ["dep:valence_advancement"] +anvil = ["dep:valence_anvil"] +boss_bar = ["dep:valence_boss_bar"] +inventory = ["dep:valence_inventory"] +log = ["dep:bevy_log"] +network = ["dep:valence_network"] +player_list = ["dep:valence_player_list"] +scoreboard = ["dep:valence_scoreboard"] +world_border = ["dep:valence_world_border"] +command = ["dep:valence_command", "dep:valence_command_macros"] +weather = ["dep:valence_weather"] +testing = [] + +[dependencies] +anyhow.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +bevy_log = { workspace = true, optional = true } +bytes.workspace = true +rand.workspace = true +uuid.workspace = true +valence_advancement = { workspace = true, optional = true } +valence_anvil = { workspace = true, optional = true, features = [ + "bevy_plugin", +] } +valence_boss_bar = { workspace = true, optional = true } +valence_bytes.workspace = true +valence_command = { workspace = true, optional = true } +valence_command_macros = { workspace = true, optional = true } +valence_ident_macros.workspace = true +valence_ident.workspace = true +valence_inventory = { workspace = true, optional = true } +valence_lang.workspace = true +valence_network = { workspace = true, optional = true } +valence_player_list = { workspace = true, optional = true } +valence_registry.workspace = true +valence_scoreboard = { workspace = true, optional = true } +valence_server.workspace = true +valence_text.workspace = true +valence_weather = { workspace = true, optional = true } +valence_world_border = { workspace = true, optional = true } + +[dev-dependencies] +anyhow.workspace = true +clap.workspace = true +criterion.workspace = true +flume.workspace = true +noise.workspace = true # For the terrain example. +tracing.workspace = true + +[dev-dependencies.reqwest] +workspace = true +default-features = false +features = ["rustls-tls", "blocking", "stream"] + +[[bench]] +name = "main" +harness = false + +[profile.dev.package."*"] +opt-level = 3 + +[profile.dev] +opt-level = 1 + +[workspace] +members = ["crates/*", "tools/*"] +exclude = [] +resolver = "2" + +[workspace.package] +version = "0.2.0-alpha.1+mc.1.20.1" +edition = "2021" +repository = "https://github.com/valence-rs/valence" +documentation = "https://docs.rs/valence/" +license = "MIT" + +[workspace.dependencies] +aes = "0.8.2" +anyhow = { version = "1.0.70", features = ["backtrace"] } +approx = "0.5.1" +arrayvec = "0.7.2" +async-trait = "0.1.60" +atty = "0.2.14" +base64 = "0.22.1" +bevy_app = { version = "0.12", default-features = false } +bevy_derive = "0.12" +bevy_ecs = { version = "0.12", default-features = false, features = [ + "multi-threaded", +] } +bevy_hierarchy = { version = "0.12", default-features = false } +bevy_log = { version = "0.12" } +bevy_mod_debugdump = { version = "0.9.0", default-features = false } +bevy_utils = { version = "0.12" } +bitfield-struct = "0.9.2" +bitvec = "1.0.1" +byteorder = "1.4.3" +bytes = "1.2.1" +cesu8 = "1.1.0" +cfb8 = "0.8.1" +clap = { version = "4.0.30", features = ["derive"] } +criterion = "0.5.1" +derive_more = "1.0.0-beta.3" +directories = "5.0.0" +eframe = { version = "0.29.1", default-features = false } +egui = "0.29.1" +egui_dock = "0.14.0" +flate2 = "1.0.24" +flume = "0.11.0" +fs_extra = "1.2.0" +glam = "0.29.3" +heck = "0.5.0-rc.1" +hmac = "0.12.1" +image = "0.25.4" +indexmap = "2.2.1" +itertools = "0.13.0" +java_string = { path = "crates/java_string", version = "0.1.2" } +lru = "0.12.0" +noise = "0.9.0" +num = "0.4.0" +num-bigint = "0.4.3" +owo-colors = "4.1.0" +ordered-float = "4.1.1" +parking_lot = "0.12.1" +paste = "1.0.11" +petgraph = "0.6.3" +pretty_assertions = "1.3.0" +proc-macro2 = "1.0.56" +quote = "1.0.26" +rand = "0.8.5" +rayon = "1.7.0" +regex = "1.6.0" +reqwest = { version = "0.12.8", default-features = false } +rfd = "0.15.0" +rsa = "0.9.2" +rsa-der = "0.3.0" +rustc-hash = "2.0.0" +serde = "1.0.160" +serde-value = "0.7.0" +serde_json = "1.0.96" +sha1 = "0.10.5" +sha2 = "0.10.6" +syn = "2.0.15" +syntect = { version = "5.0.0", default-features = false } +tempfile = "3.3.0" +thiserror = "1.0.40" +time = "0.3.17" +tokio = { version = "1.27.0", features = ["full"] } +toml = "0.8.19" +tracing = "0.1.37" +tracing-subscriber = "0.3.16" +url = { version = "2.2.2", features = ["serde"] } +uuid = "1.3.1" +valence = { path = ".", version = "0.2.0-alpha.1" } +valence_advancement = { path = "crates/valence_advancement", version = "0.2.0-alpha.1" } +valence_anvil = { path = "crates/valence_anvil", version = "0.1.0" } +valence_boss_bar = { path = "crates/valence_boss_bar", version = "0.2.0-alpha.1" } +valence_build_utils = { path = "crates/valence_build_utils", version = "0.2.0-alpha.1" } +valence_bytes = { path = "crates/valence_bytes", version = "0.2.0-alpha.1" } +valence_command = { path = "crates/valence_command", version = "0.2.0-alpha.1" } +valence_command_macros = { path = "crates/valence_command_macros", version = "0.2.0-alpha.1" } +valence_entity = { path = "crates/valence_entity", version = "0.2.0-alpha.1" } +valence_generated = { path = "crates/valence_generated", version = "0.2.0-alpha.1" } +valence_ident = { path = "crates/valence_ident", version = "0.2.0-alpha.1" } +valence_ident_macros = { path = "crates/valence_ident_macros", version = "0.2.0-alpha.1" } +valence_inventory = { path = "crates/valence_inventory", version = "0.2.0-alpha.1" } +valence_lang = { path = "crates/valence_lang", version = "0.2.0-alpha.1" } +valence_math = { path = "crates/valence_math", version = "0.2.0-alpha.1" } +valence_nbt = { path = "crates/valence_nbt", features = [ + "uuid", +], version = "0.8.0" } +valence_network = { path = "crates/valence_network", version = "0.2.0-alpha.1" } +valence_player_list = { path = "crates/valence_player_list", version = "0.2.0-alpha.1" } +valence_protocol = { path = "crates/valence_protocol", version = "0.2.0-alpha.1" } +valence_protocol_macros = { path = "crates/valence_protocol_macros", version = "0.2.0-alpha.1" } +valence_registry = { path = "crates/valence_registry", version = "0.2.0-alpha.1" } +valence_scoreboard = { path = "crates/valence_scoreboard", version = "0.2.0-alpha.1" } +valence_server = { path = "crates/valence_server", version = "0.2.0-alpha.1" } +valence_server_common = { path = "crates/valence_server_common", version = "0.2.0-alpha.1" } +valence_text = { path = "crates/valence_text", version = "0.2.0-alpha.1" } +valence_weather = { path = "crates/valence_weather", version = "0.2.0-alpha.1" } +valence_world_border = { path = "crates/valence_world_border", version = "0.2.0-alpha.1" } +zip = "2.2.0" diff --git a/vendor/valence/Cargo.toml.backup b/vendor/valence/Cargo.toml.backup new file mode 100644 index 00000000..49ddae74 --- /dev/null +++ b/vendor/valence/Cargo.toml.backup @@ -0,0 +1 @@ +This is a backup of the original valence Cargo.toml diff --git a/vendor/valence/LICENSE.txt b/vendor/valence/LICENSE.txt new file mode 100644 index 00000000..f38bf27c --- /dev/null +++ b/vendor/valence/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Ryan Johnson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/valence/README.md b/vendor/valence/README.md new file mode 100644 index 00000000..c1ced1a3 --- /dev/null +++ b/vendor/valence/README.md @@ -0,0 +1,124 @@ +

+ +

+ +

+ + license + + + + chat on Discord + + GitHub sponsors +

+ +**Note: Valence is currently undergoing a major rewrite. See [#596](https://github.com/valence-rs/valence/issues/596) and [#599](https://github.com/valence-rs/valence/pull/599) for details.** + +--- + +A Rust framework for building Minecraft: Java Edition servers. + +Built on top of [Bevy ECS](https://bevyengine.org/learn/book/getting-started/ecs/), Valence is an effort to create a +Minecraft compatible server completely from scratch in Rust. You can think of Valence as a _game engine for +Minecraft servers_. It doesn't do much by default, but by writing game logic yourself and leveraging Bevy's +powerful [plugin system](https://bevyengine.org/learn/book/getting-started/plugins/), you can make almost anything. + +Opinionated features like dynamic scripting, dedicated executables, and vanilla game mechanics are all expected to be +built as optional plugins. This level of modularity is desirable for those looking to build highly custom experiences +in Minecraft such as minigame servers. + +⚠️ **Valence is still early in development with many features unimplemented or incomplete. Expect to encounter bugs, limitations, and breaking changes.** + +# Goals + +Valence aims to be the following: + +* **Complete**. Abstractions for the full breadth of the Minecraft protocol. +* **Flexible**. Can easily extend Valence from within user code. Direct access to the Minecraft protocol is provided. +* **Modular**. Pick and choose the components you need. +* **Intuitive**. An API that is easy to use and difficult to misuse. Extensive documentation and examples are important. +* **Efficient**. Optimal use of system resources with multiple CPU cores in mind. Valence uses very little memory and + can + support [thousands](https://raw.githubusercontent.com/valence-rs/valence/main/assets/many-players.png) + of players at the same time without lag (assuming you have the bandwidth). +* **Up to date**. Targets the most recent stable version of Minecraft. Support for multiple versions at once is not + planned. However, you can use a proxy with [ViaBackwards](https://www.spigotmc.org/resources/viabackwards.27448/) to + achieve backwards compatibility with older clients. + +## Current Status + +Here are some noteworthy achievements: +- `valence_nbt`: A speedy new library for Minecraft's Named Binary Tag (NBT) format. +- Authentication, encryption, and compression +- Block states +- Chunks +- Entities and metadata +- Bounding volume hierarchy for fast spatial entity queries +- Player list and player skins +- Dimensions, biomes, and worlds +- JSON Text API +- A Fabric mod for extracting data from the game into JSON files. These files are processed by a build script to + generate Rust code for the project. The JSON files can be used in other projects as well. +- Inventories +- Items +- Particles +- Anvil file format (read only) +- Proxy support ([Velocity](https://velocitypowered.com/), [Bungeecord](https://www.spigotmc.org/wiki/bungeecord/) + and [Waterfall](https://docs.papermc.io/waterfall)) + +Here is a [short video](https://www.youtube.com/watch?v=jkw9fZx9Etg) showing the examples and some of +Valence's capabilities. + +# Getting Started + +## Running the Examples + +After cloning the repository, run this command to try an example. + +```shell +cargo r -r --example parkour +``` + + I also recommend giving `game_of_life`, `terrain`, and `cow_sphere` a try. + +Next, open your Minecraft client and connect to the address `localhost`. +If all goes well you should be playing on the server. + +## Adding Valence as a Dependency + +Valence is published to [crates.io](https://crates.io/crates/valence). Run `cargo add valence` to add it to your +project. + +However, the crates.io version is likely outdated. To use the most recent development version, add Valence as a +[git dependency](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories). + +```toml +[dependencies] +valence = { git = "https://github.com/valence-rs/valence" } +``` + +Documentation from the main branch is available [here](https://valence.rs/rustdoc/valence/). + +# Contributing + +Contributions are welcome! Please +see [CONTRIBUTING.md](https://github.com/valence-rs/valence/blob/main/CONTRIBUTING.md). You can +join [Discord](https://discord.gg/8Fqqy9XrYb) or [GitHub Discussions](https://github.com/valence-rs/valence/discussions) +to discuss the project and ask questions. + +# License + +Code is licensed under [MIT](https://opensource.org/licenses/MIT) while the Valence logo is +under [CC BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/) + +# Funding + +If you would like to contribute financially, consider sponsoring me (rj00a) +on [GitHub](https://github.com/sponsors/rj00a) +or [Patreon](https://www.patreon.com/rj00a). + +I would love to continue working on Valence and your support would help me do that. Thanks! diff --git a/vendor/valence/assets/logo-256x256.png b/vendor/valence/assets/logo-256x256.png new file mode 100644 index 00000000..f6e9a86a Binary files /dev/null and b/vendor/valence/assets/logo-256x256.png differ diff --git a/vendor/valence/assets/logo-64x64.png b/vendor/valence/assets/logo-64x64.png new file mode 100644 index 00000000..663d5833 Binary files /dev/null and b/vendor/valence/assets/logo-64x64.png differ diff --git a/vendor/valence/assets/many-players.png b/vendor/valence/assets/many-players.png new file mode 100644 index 00000000..730bb057 Binary files /dev/null and b/vendor/valence/assets/many-players.png differ diff --git a/vendor/valence/assets/packet-inspector.png b/vendor/valence/assets/packet-inspector.png new file mode 100644 index 00000000..c8fd7b07 Binary files /dev/null and b/vendor/valence/assets/packet-inspector.png differ diff --git a/vendor/valence/benches/anvil.rs b/vendor/valence/benches/anvil.rs new file mode 100644 index 00000000..77679473 --- /dev/null +++ b/vendor/valence/benches/anvil.rs @@ -0,0 +1,137 @@ +/* +use std::fs::create_dir_all; +use std::hint::black_box; +use std::path::{Path, PathBuf}; + +use anyhow::{ensure, Context}; +use criterion::Criterion; +use fs_extra::dir::CopyOptions; +use reqwest::IntoUrl; +use valence::anvil::AnvilWorld; +use valence::instance::Chunk; +use zip::ZipArchive; + +pub fn load(c: &mut Criterion) { + let world_dir = get_world_asset( + "https://github.com/valence-rs/valence-test-data/archive/refs/heads/asset/sp_world_1.19.2.zip", + "1.19.2 benchmark world", + true + ).expect("failed to get world asset"); + + let mut world = AnvilWorld::new(world_dir); + + c.bench_function("anvil_load_10x10", |b| { + b.iter(|| { + let world = black_box(&mut world); + + for z in -5..5 { + for x in -5..5 { + let nbt = world + .read_chunk(x, z) + .expect("failed to read chunk") + .expect("missing chunk at position") + .data; + + let mut chunk = Chunk::new(24); + + valence_anvil::to_valence(&nbt, &mut chunk, 4, |_| Default::default()).unwrap(); + + black_box(chunk); + } + } + }); + }); +} + +/// Loads the asset. If the asset is already present on the system due to a +/// prior run, the cached asset is used instead. If the asset is not +/// cached yet, this function downloads the asset using the current thread. +/// This will block until the download is complete. +/// +/// returns: `PathBuf` The reference to the asset on the file system +fn get_world_asset( + url: impl IntoUrl, + dest_path: impl AsRef, + remove_top_level_dir: bool, +) -> anyhow::Result { + let url = url.into_url()?; + let dest_path = dest_path.as_ref(); + + let asset_cache_dir = Path::new(".asset_cache"); + + create_dir_all(asset_cache_dir).context("unable to create `.asset_cache` directory")?; + + let final_path = asset_cache_dir.join(dest_path); + + if final_path.exists() { + return Ok(final_path); + } + + let mut response = reqwest::blocking::get(url.clone())?; + + let cache_download_directory = asset_cache_dir.join("downloads"); + + create_dir_all(&cache_download_directory) + .context("unable to create `.asset_cache/downloads` directory")?; + + let mut downloaded_zip_file = + tempfile::tempfile_in(&cache_download_directory).context("Could not create temp file")?; + + println!("Downloading {dest_path:?} from {url}"); + + response + .copy_to(&mut downloaded_zip_file) + .context("could not write web contents to the temporary file")?; + + let mut zip_archive = ZipArchive::new(downloaded_zip_file) + .context("unable to create zip archive from downloaded content")?; + + if !remove_top_level_dir { + zip_archive + .extract(&final_path) + .context("unable to unzip downloaded contents")?; + + return Ok(final_path); + } + + let temp_dir = tempfile::tempdir_in(&cache_download_directory) + .context("unable to create temporary directory in `.asset_cache`")?; + + zip_archive + .extract(&temp_dir) + .context("unable to unzip downloaded contents")?; + + let mut entries = temp_dir.path().read_dir()?; + + let top_level_dir = entries + .next() + .context("the downloaded zip file was empty")??; + + ensure!( + entries.next().is_none(), + "found more than one entry in the top level directory of the Zip file" + ); + + ensure!( + top_level_dir.path().is_dir(), + "the only content in the zip archive is a file" + ); + + create_dir_all(&final_path).context("could not create a directory inside the asset cache")?; + + let dir_entries = top_level_dir + .path() + .read_dir()? + .collect::, _>>()?; + + let items_to_move: Vec<_> = dir_entries.into_iter().map(|d| d.path()).collect(); + + fs_extra::move_items(&items_to_move, &final_path, &CopyOptions::new())?; + + // We keep the temporary directory around until we're done moving files out + // of it. + drop(temp_dir); + + Ok(final_path) +} +*/ diff --git a/vendor/valence/benches/block.rs b/vendor/valence/benches/block.rs new file mode 100644 index 00000000..f32c12bb --- /dev/null +++ b/vendor/valence/benches/block.rs @@ -0,0 +1,91 @@ +use std::hint::black_box; + +use criterion::Criterion; +use valence::block::{BlockKind, BlockState, PropName, PropValue}; +use valence::ItemKind; + +pub fn block(c: &mut Criterion) { + let mut group = c.benchmark_group("block"); + + let states = BlockKind::ALL.map(BlockKind::to_state); + + group.bench_function("BlockState::from_kind", |b| { + b.iter(|| { + for kind in black_box(BlockKind::ALL) { + black_box(BlockState::from_kind(kind)); + } + }); + }); + + group.bench_function("BlockState::to_kind", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.to_kind()); + } + }); + }); + + group.bench_function("BlockState::get", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.get(PropName::Note)); + } + }); + }); + + group.bench_function("BlockState::set", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.set(PropName::Note, PropValue::Didgeridoo)); + } + }); + }); + + group.bench_function("BlockState::is_liquid", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.is_liquid()); + } + }); + }); + + group.bench_function("BlockState::is_opaque", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.is_opaque()); + } + }) + }); + + group.bench_function("BlockState::is_replaceable", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.is_replaceable()); + } + }) + }); + + group.bench_function("BlockState::luminance", |b| { + b.iter(|| { + for state in black_box(states) { + black_box(state.luminance()); + } + }) + }); + + group.bench_function("BlockKind::to_item_kind", |b| { + b.iter(|| { + for kind in black_box(BlockKind::ALL) { + black_box(kind.to_item_kind()); + } + }); + }); + + group.bench_function("BlockKind::from_item_kind", |b| { + b.iter(|| { + for kind in black_box(ItemKind::ALL) { + black_box(BlockKind::from_item_kind(kind)); + } + }); + }); +} diff --git a/vendor/valence/benches/decode_array.rs b/vendor/valence/benches/decode_array.rs new file mode 100644 index 00000000..0a442c3d --- /dev/null +++ b/vendor/valence/benches/decode_array.rs @@ -0,0 +1,29 @@ +use std::hint::black_box; + +use criterion::Criterion; +use valence::protocol::{Decode, Encode}; + +pub fn decode_array(c: &mut Criterion) { + let mut group = c.benchmark_group("decode_array"); + + let floats = [123.0, 456.0, 789.0]; + let mut buf = [0u8; 24]; + + floats.encode(buf.as_mut_slice()).unwrap(); + + group.bench_function("<[f64; 3]>::decode", |b| { + b.iter(|| { + let mut r = black_box(buf.as_slice()); + let _ = black_box(<[f64; 3]>::decode(&mut r)); + }); + }); + + let bytes = [42; 4096]; + + group.bench_function("<[u8; 4096]>::decode", |b| { + b.iter(|| { + let mut r = black_box(bytes.as_slice()); + let _ = black_box(<[u8; 4096]>::decode(&mut r)); + }) + }); +} diff --git a/vendor/valence/benches/idle.rs b/vendor/valence/benches/idle.rs new file mode 100644 index 00000000..d773cc2c --- /dev/null +++ b/vendor/valence/benches/idle.rs @@ -0,0 +1,43 @@ +use criterion::Criterion; +use valence::prelude::*; + +/// Benches the performance of a single server tick while nothing much is +/// happening. +pub fn idle_update(c: &mut Criterion) { + let mut app = App::new(); + + app.add_plugins(DefaultPlugins); + app.add_systems(Startup, setup); + + // Run startup schedule. + app.update(); + + c.bench_function("idle_update", |b| { + b.iter(|| { + app.update(); + }); + }); +} + +fn setup( + mut commands: Commands, + dimensions: Res, + biomes: Res, + server: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -50..50 { + for x in -50..50 { + layer.chunk.set_block([x, 64, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} diff --git a/vendor/valence/benches/main.rs b/vendor/valence/benches/main.rs new file mode 100644 index 00000000..d5068d54 --- /dev/null +++ b/vendor/valence/benches/main.rs @@ -0,0 +1,23 @@ +use criterion::{criterion_group, criterion_main}; + +mod anvil; +mod block; +mod decode_array; +mod idle; +mod many_players; +mod packet; +mod var_int; +mod var_long; + +criterion_group! { + benches, + block::block, + decode_array::decode_array, + idle::idle_update, + packet::packet, + var_int::var_int, + var_long::var_long, + many_players::many_players, +} + +criterion_main!(benches); diff --git a/vendor/valence/benches/many_players.rs b/vendor/valence/benches/many_players.rs new file mode 100644 index 00000000..89d36921 --- /dev/null +++ b/vendor/valence/benches/many_players.rs @@ -0,0 +1,124 @@ +use std::time::Duration; + +use bevy_app::prelude::*; +use criterion::Criterion; +use rand::Rng; +use valence::entity::Position; +use valence::keepalive::KeepaliveSettings; +use valence::layer::chunk::UnloadedChunk; +use valence::layer::LayerBundle; +use valence::math::DVec3; +use valence::network::NetworkPlugin; +use valence::protocol::packets::play::{FullC2s, HandSwingC2s}; +use valence::registry::{BiomeRegistry, DimensionTypeRegistry}; +use valence::testing::create_mock_client; +use valence::{ident, ChunkPos, DefaultPlugins, Hand, Server, ServerSettings}; +use valence_server::CompressionThreshold; + +pub fn many_players(c: &mut Criterion) { + run_many_players(c, "many_players", 3000, 16, 16); + run_many_players(c, "many_players_spread_out", 3000, 8, 200); +} + +fn run_many_players( + c: &mut Criterion, + func_name: &str, + client_count: usize, + view_dist: u8, + world_size: i32, +) { + let mut app = App::new(); + + app.insert_resource(ServerSettings { + compression_threshold: CompressionThreshold(256), + ..Default::default() + }); + + app.insert_resource(KeepaliveSettings { + period: Duration::MAX, + }); + + app.add_plugins(DefaultPlugins.build().disable::()); + + app.update(); // Initialize plugins. + + let mut layer = LayerBundle::new( + ident!("overworld"), + app.world.resource::(), + app.world.resource::(), + app.world.resource::(), + ); + + for z in -world_size..world_size { + for x in -world_size..world_size { + layer + .chunk + .insert_chunk(ChunkPos::new(x, z), UnloadedChunk::new()); + } + } + + let layer = app.world.spawn(layer).id(); + + let mut clients = vec![]; + + // Spawn a bunch of clients in at random initial positions in the instance. + for i in 0..client_count { + let (mut bundle, helper) = create_mock_client(format!("client_{i}")); + + bundle.visible_chunk_layer.0 = layer; + bundle.visible_entity_layers.0.insert(layer); + bundle.player.layer.0 = layer; + bundle.view_distance.set(view_dist); + + let mut rng = rand::thread_rng(); + let x = rng.gen_range(-world_size as f64 * 16.0..=world_size as f64 * 16.0); + let z = rng.gen_range(-world_size as f64 * 16.0..=world_size as f64 * 16.0); + + bundle.player.position.set(DVec3::new(x, 64.0, z)); + + let id = app.world.spawn(bundle).id(); + + clients.push((id, helper)); + } + + let mut query = app.world.query::<&mut Position>(); + + app.update(); + + for (_, helper) in &mut clients { + helper.confirm_initial_pending_teleports(); + } + + app.update(); + + c.bench_function(func_name, |b| { + b.iter(|| { + let mut rng = rand::thread_rng(); + + // Move the clients around randomly. They'll cross chunk borders and cause + // interesting things to happen. + for (id, helper) in &mut clients { + let pos = query.get(&app.world, *id).unwrap().get(); + + let offset = DVec3::new(rng.gen_range(-1.0..=1.0), 0.0, rng.gen_range(-1.0..=1.0)); + + helper.send(&FullC2s { + position: pos + offset, + yaw: rng.gen_range(0.0..=360.0), + pitch: rng.gen_range(0.0..=360.0), + on_ground: rng.gen(), + }); + + helper.send(&HandSwingC2s { hand: Hand::Main }); + } + + drop(rng); + + app.update(); // The important part. + + for (_, helper) in &mut clients { + helper.clear_received(); + } + }); + }); +} diff --git a/vendor/valence/benches/packet.rs b/vendor/valence/benches/packet.rs new file mode 100644 index 00000000..33601c2f --- /dev/null +++ b/vendor/valence/benches/packet.rs @@ -0,0 +1,246 @@ +use std::borrow::Cow; +use std::hint::black_box; + +use criterion::Criterion; +use valence::nbt::{compound, List}; +use valence::prelude::*; +use valence::protocol::decode::PacketDecoder; +use valence::protocol::encode::{PacketEncoder, PacketWriter, WritePacket}; +use valence::protocol::packets::play::{ChunkDataS2c, EntitySpawnS2c, PlayerListHeaderS2c}; +use valence::protocol::{ByteAngle, FixedArray, VarInt}; +use valence::text::IntoText; +use valence_server::protocol::Velocity; +use valence_server::CompressionThreshold; + +pub fn packet(c: &mut Criterion) { + let mut group = c.benchmark_group("packet"); + + let mut encoder = PacketEncoder::new(); + + const BLOCKS_AND_BIOMES: [u8; 2000] = [0x80; 2000]; + const SKY_LIGHT_ARRAYS: [FixedArray; 26] = [FixedArray([0xff; 2048]); 26]; + + let chunk_data_packet = ChunkDataS2c { + pos: ChunkPos::new(123, 456), + heightmaps: Cow::Owned(compound! { + "MOTION_BLOCKING" => List::Long(vec![123; 256]), + }), + blocks_and_biomes: BLOCKS_AND_BIOMES.as_slice(), + block_entities: Cow::Borrowed(&[]), + sky_light_mask: Cow::Borrowed(&[]), + block_light_mask: Cow::Borrowed(&[]), + empty_sky_light_mask: Cow::Borrowed(&[]), + empty_block_light_mask: Cow::Borrowed(&[]), + sky_light_arrays: Cow::Borrowed(SKY_LIGHT_ARRAYS.as_slice()), + block_light_arrays: Cow::Borrowed(&[]), + }; + + let player_list_header_packet = PlayerListHeaderS2c { + header: ("this".italic() + " is the " + "header".bold().color(Color::RED)).into(), + footer: ("this".italic() + + " is the " + + "footer".bold().color(Color::BLUE) + + ". I am appending some extra text so that the packet goes over the compression \ + threshold.") + .into(), + }; + + let spawn_entity_packet = EntitySpawnS2c { + entity_id: VarInt(1234), + object_uuid: Default::default(), + kind: VarInt(5), + position: DVec3::new(123.0, 456.0, 789.0), + pitch: ByteAngle(200), + yaw: ByteAngle(100), + head_yaw: ByteAngle(50), + data: VarInt(i32::MIN), + velocity: Velocity([12, 34, 56]), + }; + + group.bench_function("encode_chunk_data", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&chunk_data_packet).unwrap(); + + black_box(encoder); + }); + }); + + group.bench_function("encode_player_list_header", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&player_list_header_packet).unwrap(); + + black_box(encoder); + }); + }); + + group.bench_function("encode_spawn_entity", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&spawn_entity_packet).unwrap(); + + black_box(encoder); + }); + }); + + encoder.set_compression(CompressionThreshold(-1)); + + group.bench_function("encode_chunk_data_compressed", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&chunk_data_packet).unwrap(); + + black_box(encoder); + }); + }); + + group.bench_function("encode_player_list_header_compressed", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&player_list_header_packet).unwrap(); + + black_box(encoder); + }); + }); + + group.bench_function("encode_spawn_entity_compressed", |b| { + b.iter(|| { + let encoder = black_box(&mut encoder); + + encoder.clear(); + encoder.append_packet(&spawn_entity_packet).unwrap(); + + black_box(encoder); + }); + }); + + let mut decoder = PacketDecoder::new(); + let mut packet_buf = vec![]; + + PacketWriter::new(&mut packet_buf, CompressionThreshold(-1)).write_packet(&chunk_data_packet); + + group.bench_function("decode_chunk_data", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); + + packet_buf.clear(); + PacketWriter::new(&mut packet_buf, CompressionThreshold(-1)) + .write_packet(&player_list_header_packet); + + group.bench_function("decode_player_list_header", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); + + packet_buf.clear(); + PacketWriter::new(&mut packet_buf, CompressionThreshold(-1)).write_packet(&spawn_entity_packet); + + group.bench_function("decode_entity_spawn", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); + + decoder.set_compression(256.into()); + + packet_buf.clear(); + PacketWriter::new(&mut packet_buf, 256.into()).write_packet(&chunk_data_packet); + + group.bench_function("decode_chunk_data_compressed", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); + + packet_buf.clear(); + PacketWriter::new(&mut packet_buf, 256.into()).write_packet(&player_list_header_packet); + + group.bench_function("decode_player_list_header_compressed", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); + + packet_buf.clear(); + PacketWriter::new(&mut packet_buf, 256.into()).write_packet(&spawn_entity_packet); + + group.bench_function("decode_spawn_entity_compressed", |b| { + b.iter(|| { + let decoder = black_box(&mut decoder); + + decoder.queue_slice(&packet_buf); + decoder + .try_next_packet() + .unwrap() + .unwrap() + .decode::() + .unwrap(); + + black_box(decoder); + }); + }); +} diff --git a/vendor/valence/benches/var_int.rs b/vendor/valence/benches/var_int.rs new file mode 100644 index 00000000..e8fb1d0d --- /dev/null +++ b/vendor/valence/benches/var_int.rs @@ -0,0 +1,37 @@ +use std::hint::black_box; + +use criterion::Criterion; +use rand::Rng; +use valence::protocol::{Decode, Encode, VarInt}; + +pub fn var_int(c: &mut Criterion) { + let mut group = c.benchmark_group("varint"); + + let mut rng = rand::thread_rng(); + + group.bench_function("VarInt::encode", |b| { + b.iter_with_setup( + || rng.gen(), + |i| { + let i: i32 = black_box(i); + + let mut buf = [0; VarInt::MAX_SIZE]; + let _ = black_box(VarInt(i).encode(buf.as_mut_slice())); + }, + ); + }); + + group.bench_function("VarInt::decode", |b| { + b.iter_with_setup( + || { + let mut buf = [0; VarInt::MAX_SIZE]; + VarInt(rng.gen()).encode(buf.as_mut_slice()).unwrap(); + buf + }, + |buf| { + let mut r = black_box(buf.as_slice()); + let _ = black_box(VarInt::decode(&mut r)); + }, + ) + }); +} diff --git a/vendor/valence/benches/var_long.rs b/vendor/valence/benches/var_long.rs new file mode 100644 index 00000000..92577a4f --- /dev/null +++ b/vendor/valence/benches/var_long.rs @@ -0,0 +1,37 @@ +use std::hint::black_box; + +use criterion::Criterion; +use rand::Rng; +use valence::protocol::{Decode, Encode, VarLong}; + +pub fn var_long(c: &mut Criterion) { + let mut group = c.benchmark_group("varlong"); + + let mut rng = rand::thread_rng(); + + group.bench_function("VarLong::encode", |b| { + b.iter_with_setup( + || rng.gen(), + |i| { + let i: i64 = black_box(i); + + let mut buf = [0; VarLong::MAX_SIZE]; + let _ = black_box(VarLong(i).encode(buf.as_mut_slice())); + }, + ); + }); + + group.bench_function("VarLong::decode", |b| { + b.iter_with_setup( + || { + let mut buf = [0; VarLong::MAX_SIZE]; + VarLong(rng.gen()).encode(buf.as_mut_slice()).unwrap(); + buf + }, + |buf| { + let mut r = black_box(buf.as_slice()); + let _ = black_box(VarLong::decode(&mut r)); + }, + ) + }); +} diff --git a/vendor/valence/crates/README.md b/vendor/valence/crates/README.md new file mode 100644 index 00000000..1b25ebe5 --- /dev/null +++ b/vendor/valence/crates/README.md @@ -0,0 +1,11 @@ +# Crates + +The standard crates used in Valence projects. + +All crates here are exported by the main `valence` crate. `valence` is the intended interface for both end users and third-party plugin authors. + +Crates are versioned in lockstep with the exception of `valence_nbt`. + +The output of `cargo depgraph --workspace-only | tred | dot -Tsvg -o assets/depgraph.svg` looks like this: + +![dependency graph](../assets/depgraph.svg) diff --git a/vendor/valence/crates/java_string/Cargo.toml b/vendor/valence/crates/java_string/Cargo.toml new file mode 100644 index 00000000..0465f63c --- /dev/null +++ b/vendor/valence/crates/java_string/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "java_string" +description = "An implementation of Java strings, tolerant of invalid UTF-16 encoding" +readme = "README.md" +version = "0.1.2" +keywords = ["java", "string", "utf16"] +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[features] +serde = ["dep:serde"] + +[dependencies] +serde = { workspace = true, optional = true } diff --git a/vendor/valence/crates/java_string/README.md b/vendor/valence/crates/java_string/README.md new file mode 100644 index 00000000..7135d645 --- /dev/null +++ b/vendor/valence/crates/java_string/README.md @@ -0,0 +1,17 @@ +# java_string + +An implementation of Java strings, tolerant of invalid UTF-16 encoding. +This allows for round-trip serialization of all Java strings, including those which contain invalid UTF-16, while still +being able to perform useful operations on those strings. + +These Java strings use the UTF-8 encoding, with the modification that surrogate code points (code points between U+D800 +and U+DFFF inclusive) are allowed. This allows for zero-cost conversion from Rust strings to Java strings. This modified +encoding is known as "semi-UTF-8" throughout the codebase. Similarly, this crate introduces a `JavaCodePoint` type which +is analogous to `char`, except that surrogate code points are allowed. + +This crate is mostly undocumented, because most methods are entirely analogous to those of the same name in Rust's +strings. Please refer to the `std` documentation. + +# Features + +- `serde` Adds support for [`serde`](https://docs.rs/serde/latest/serde/) \ No newline at end of file diff --git a/vendor/valence/crates/java_string/src/cesu8.rs b/vendor/valence/crates/java_string/src/cesu8.rs new file mode 100644 index 00000000..1191c573 --- /dev/null +++ b/vendor/valence/crates/java_string/src/cesu8.rs @@ -0,0 +1,279 @@ +use std::borrow::Cow; + +use crate::validations::{CONT_MASK, TAG_CONT, utf8_char_width}; +use crate::{JavaStr, JavaString, Utf8Error}; + +impl JavaStr { + /// Converts from Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8) format to a `Cow`. + /// + /// ``` + /// # use std::borrow::Cow; + /// # use java_string::{JavaCodePoint, JavaStr, JavaString}; + /// + /// let result = JavaStr::from_modified_utf8("Hello World!".as_bytes()).unwrap(); + /// assert!(matches!(result, Cow::Borrowed(_))); + /// assert_eq!(JavaStr::from_str("Hello World!"), result); + /// + /// let result = JavaStr::from_modified_utf8(&[ + /// 0x61, 0x62, 0x63, 0xc0, 0x80, 0xe2, 0x84, 0x9d, 0xed, 0xa0, 0xbd, 0xed, 0xb2, 0xa3, 0xed, + /// 0xa0, 0x80, + /// ]) + /// .unwrap(); + /// assert!(matches!(result, Cow::Owned(_))); + /// let mut expected = JavaString::from("abc\0ℝ💣"); + /// expected.push_java(JavaCodePoint::from_u32(0xd800).unwrap()); + /// assert_eq!(expected, result); + /// + /// let result = JavaStr::from_modified_utf8(&[0xed]); + /// assert!(result.is_err()); + /// ``` + #[inline] + pub fn from_modified_utf8(bytes: &[u8]) -> Result, Utf8Error> { + match JavaStr::from_full_utf8(bytes) { + Ok(str) => Ok(Cow::Borrowed(str)), + Err(_) => JavaString::from_modified_utf8_internal(bytes).map(Cow::Owned), + } + } + + /// Converts to Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8) format. + /// + /// ``` + /// # use std::borrow::Cow; + /// # use java_string::{JavaCodePoint, JavaStr, JavaString}; + /// + /// let result = JavaStr::from_str("Hello World!").to_modified_utf8(); + /// assert!(matches!(result, Cow::Borrowed(_))); + /// assert_eq!(result, &b"Hello World!"[..]); + /// + /// let mut str = JavaString::from("abc\0ℝ💣"); + /// str.push_java(JavaCodePoint::from_u32(0xd800).unwrap()); + /// let result = str.to_modified_utf8(); + /// let expected = [ + /// 0x61, 0x62, 0x63, 0xc0, 0x80, 0xe2, 0x84, 0x9d, 0xed, 0xa0, 0xbd, 0xed, 0xb2, 0xa3, 0xed, + /// 0xa0, 0x80, + /// ]; + /// assert!(matches!(result, Cow::Owned(_))); + /// assert_eq!(result, &expected[..]); + /// ``` + #[inline] + #[must_use] + pub fn to_modified_utf8(&self) -> Cow<'_, [u8]> { + if is_valid_cesu8(self) { + Cow::Borrowed(self.as_bytes()) + } else { + Cow::Owned(self.to_modified_utf8_internal()) + } + } + + #[inline] + fn to_modified_utf8_internal(&self) -> Vec { + let bytes = self.as_bytes(); + let mut encoded = Vec::with_capacity((bytes.len() + bytes.len()) >> 2); + let mut i = 0; + while i < bytes.len() { + let b = bytes[i]; + if b == 0 { + encoded.extend([0xc0, 0x80]); + i += 1; + } else if b < 128 { + // Pass ASCII through quickly. + encoded.push(b); + i += 1; + } else { + // Figure out how many bytes we need for this character. + let w = utf8_char_width(b); + let char_bytes = unsafe { + // SAFETY: input must be valid semi UTF-8, so there must be at least w more + // bytes from i + bytes.get_unchecked(i..i + w) + }; + if w != 4 { + // Pass through short UTF-8 sequences unmodified. + encoded.extend(char_bytes.iter().copied()) + } else { + // Encode 4-byte sequences as 6 bytes + let s = unsafe { + // SAFETY: input is valid semi UTF-8 + JavaStr::from_semi_utf8_unchecked(char_bytes) + }; + let c = unsafe { + // SAFETY: s contains a single char of width 4 + s.chars().next().unwrap_unchecked().as_u32() - 0x10000 + }; + let s = [((c >> 10) as u16) | 0xd800, ((c & 0x3ff) as u16) | 0xdc00]; + encoded.extend(enc_surrogate(s[0])); + encoded.extend(enc_surrogate(s[1])); + } + i += w; + } + } + encoded + } +} + +impl JavaString { + /// Converts from Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8) format to a `JavaString`. + /// + /// See [JavaStr::from_modified_utf8]. + #[inline] + pub fn from_modified_utf8(bytes: Vec) -> Result { + match JavaString::from_full_utf8(bytes) { + Ok(str) => Ok(str), + Err(err) => JavaString::from_modified_utf8_internal(&err.bytes), + } + } + + fn from_modified_utf8_internal(slice: &[u8]) -> Result { + let mut offset = 0; + let mut decoded = Vec::with_capacity(slice.len() + 1); + + while let Some(&first) = slice.get(offset) { + let old_offset = offset; + offset += 1; + + macro_rules! err { + ($error_len:expr) => { + return Err(Utf8Error { + valid_up_to: old_offset, + error_len: $error_len, + }) + }; + } + + macro_rules! next { + () => {{ + if let Some(&b) = slice.get(offset) { + offset += 1; + b + } else { + err!(None) + } + }}; + } + + macro_rules! next_cont { + ($error_len:expr) => {{ + let byte = next!(); + if (byte) & !CONT_MASK == TAG_CONT { + byte + } else { + err!($error_len) + } + }}; + } + + if first == 0 { + // modified UTF-8 should never contain \0 directly. + err!(Some(1)); + } else if first < 128 { + // Pass ASCII through directly. + decoded.push(first); + } else if first == 0xc0 { + // modified UTF-8 encoding of null character + match next!() { + 0x80 => decoded.push(0), + _ => err!(Some(1)), + } + } else { + let w = utf8_char_width(first); + let second = next_cont!(Some(1)); + match w { + // Two-byte sequences can be used directly. + 2 => { + decoded.extend([first, second]); + } + 3 => { + let third = next_cont!(Some(2)); + match (first, second) { + // These are valid UTF-8, so pass them through. + (0xe0, 0xa0..=0xbf) + | (0xe1..=0xec, 0x80..=0xbf) + | (0xed, 0x80..=0x9f) + | (0xee..=0xef, 0x80..=0xbf) + // Second half of a surrogate pair without a preceding first half, also pass this through. + | (0xed, 0xb0..=0xbf) + => decoded.extend([first, second, third]), + // First half of a surrogate pair + (0xed, 0xa0..=0xaf) => { + // Peek ahead and try to pair the first half of surrogate pair with + // second. + match &slice[offset..] { + [0xed, fifth @ 0xb0..=0xbf, sixth, ..] + if *sixth & !CONT_MASK == TAG_CONT => + { + let s = dec_surrogates(second, third, *fifth, *sixth); + decoded.extend(s); + offset += 3; + } + _ => { + // No second half, append the first half directly. + decoded.extend([first, second, third]); + } + } + } + _ => err!(Some(1)), + } + } + _ => err!(Some(1)), // modified UTF-8 doesn't allow width 4 + } + } + } + + unsafe { + // SAFETY: we built a semi UTF-8 encoded string + Ok(JavaString::from_semi_utf8_unchecked(decoded)) + } + } + + /// Converts to Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8) format. + /// + /// See [JavaStr::to_modified_utf8]. + #[inline] + #[must_use] + pub fn into_modified_utf8(self) -> Vec { + if is_valid_cesu8(&self) { + self.into_bytes() + } else { + self.to_modified_utf8_internal() + } + } +} + +#[inline] +fn dec_surrogate(second: u8, third: u8) -> u32 { + 0xd000 | ((second & CONT_MASK) as u32) << 6 | (third & CONT_MASK) as u32 +} + +#[inline] +fn dec_surrogates(second: u8, third: u8, fifth: u8, sixth: u8) -> [u8; 4] { + // Convert to a 32-bit code point. + let s1 = dec_surrogate(second, third); + let s2 = dec_surrogate(fifth, sixth); + let c = 0x10000 + (((s1 - 0xd800) << 10) | (s2 - 0xdc00)); + assert!((0x010000..=0x10ffff).contains(&c)); + + // Convert to UTF-8. + // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + [ + 0b1111_0000u8 | ((c & 0b1_1100_0000_0000_0000_0000) >> 18) as u8, + TAG_CONT | ((c & 0b0_0011_1111_0000_0000_0000) >> 12) as u8, + TAG_CONT | ((c & 0b0_0000_0000_1111_1100_0000) >> 6) as u8, + TAG_CONT | (c & 0b0_0000_0000_0000_0011_1111) as u8, + ] +} + +#[inline] +fn is_valid_cesu8(text: &JavaStr) -> bool { + text.bytes() + .all(|b| b != 0 && ((b & !CONT_MASK) == TAG_CONT || utf8_char_width(b) <= 3)) +} + +#[inline] +fn enc_surrogate(surrogate: u16) -> [u8; 3] { + // 1110xxxx 10xxxxxx 10xxxxxx + [ + 0b11100000 | ((surrogate & 0b11110000_00000000) >> 12) as u8, + TAG_CONT | ((surrogate & 0b00001111_11000000) >> 6) as u8, + TAG_CONT | (surrogate & 0b00000000_00111111) as u8, + ] +} diff --git a/vendor/valence/crates/java_string/src/char.rs b/vendor/valence/crates/java_string/src/char.rs new file mode 100644 index 00000000..816b8d7f --- /dev/null +++ b/vendor/valence/crates/java_string/src/char.rs @@ -0,0 +1,1012 @@ +use std::char::ParseCharError; +use std::cmp::Ordering; +use std::fmt; +use std::fmt::{Debug, Display, Formatter, Write}; +use std::hash::{Hash, Hasher}; +use std::iter::{FusedIterator, Once, once}; +use std::ops::Range; +use std::str::FromStr; + +use crate::validations::{TAG_CONT, TAG_FOUR_B, TAG_THREE_B, TAG_TWO_B}; + +// JavaCodePoint is guaranteed to have the same repr as a u32, with valid values +// of between 0 and 0x10FFFF, the same as a unicode code point. Surrogate code +// points are valid values of this type. +#[derive(Copy, Clone, PartialEq, Eq)] +#[repr(C)] +pub struct JavaCodePoint { + #[cfg(target_endian = "little")] + lower: u16, + upper: SeventeenValues, + #[cfg(target_endian = "big")] + lower: u16, +} + +#[repr(u16)] +#[derive(Copy, Clone, PartialEq, Eq)] +#[allow(unused)] +enum SeventeenValues { + V0, + V1, + V2, + V3, + V4, + V5, + V6, + V7, + V8, + V9, + V10, + V11, + V12, + V13, + V14, + V15, + V16, +} + +impl JavaCodePoint { + pub const MAX: JavaCodePoint = JavaCodePoint::from_char(char::MAX); + pub const REPLACEMENT_CHARACTER: JavaCodePoint = + JavaCodePoint::from_char(char::REPLACEMENT_CHARACTER); + + /// See [`char::from_u32`] + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// let c = JavaCodePoint::from_u32(0x2764); + /// assert_eq!(Some(JavaCodePoint::from_char('❤')), c); + /// + /// assert_eq!(None, JavaCodePoint::from_u32(0x110000)); + /// ``` + #[inline] + #[must_use] + pub const fn from_u32(i: u32) -> Option { + if i <= 0x10ffff { + unsafe { Some(Self::from_u32_unchecked(i)) } + } else { + None + } + } + + /// # Safety + /// The argument must be within the valid Unicode code point range of 0 to + /// 0x10FFFF inclusive. Surrogate code points are allowed. + #[inline] + #[must_use] + pub const unsafe fn from_u32_unchecked(i: u32) -> JavaCodePoint { + // SAFETY: the caller checks that the argument can be represented by this type + unsafe { std::mem::transmute(i) } + } + + /// Converts a `char` to a code point. + #[inline] + #[must_use] + pub const fn from_char(char: char) -> JavaCodePoint { + unsafe { + // SAFETY: all chars are valid code points + JavaCodePoint::from_u32_unchecked(char as u32) + } + } + + /// Converts this code point to a `u32`. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!(65, JavaCodePoint::from_char('A').as_u32()); + /// assert_eq!(0xd800, JavaCodePoint::from_u32(0xd800).unwrap().as_u32()); + /// ``` + #[inline] + #[must_use] + pub const fn as_u32(self) -> u32 { + unsafe { + // SAFETY: JavaCodePoint has the same repr as a u32 + let result = std::mem::transmute::(self); + + if result > 0x10ffff { + // SAFETY: JavaCodePoint can never have a value > 0x10FFFF. + // This statement may allow the optimizer to remove branches in the calling code + // associated with out of bounds chars. + std::hint::unreachable_unchecked(); + } + + result + } + } + + /// Converts this code point to a `char`. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!(Some('a'), JavaCodePoint::from_char('a').as_char()); + /// assert_eq!(None, JavaCodePoint::from_u32(0xd800).unwrap().as_char()); + /// ``` + #[inline] + #[must_use] + pub const fn as_char(self) -> Option { + char::from_u32(self.as_u32()) + } + + /// # Safety + /// The caller must ensure that this code point is not a surrogate code + /// point. + #[inline] + #[must_use] + pub unsafe fn as_char_unchecked(self) -> char { + unsafe { char::from_u32_unchecked(self.as_u32()) } + } + + /// See [`char::encode_utf16`] + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!( + /// 2, + /// JavaCodePoint::from_char('𝕊') + /// .encode_utf16(&mut [0; 2]) + /// .len() + /// ); + /// assert_eq!( + /// 1, + /// JavaCodePoint::from_u32(0xd800) + /// .unwrap() + /// .encode_utf16(&mut [0; 2]) + /// .len() + /// ); + /// ``` + /// ```should_panic + /// # use java_string::JavaCodePoint; + /// // Should panic + /// JavaCodePoint::from_char('𝕊').encode_utf16(&mut [0; 1]); + /// ``` + #[inline] + pub fn encode_utf16(self, dst: &mut [u16]) -> &mut [u16] { + if let Some(char) = self.as_char() { + char.encode_utf16(dst) + } else { + dst[0] = self.as_u32() as u16; + &mut dst[..1] + } + } + + /// Encodes this `JavaCodePoint` into semi UTF-8, that is, UTF-8 with + /// surrogate code points. See also [char::encode_utf8]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!( + /// 2, + /// JavaCodePoint::from_char('ß') + /// .encode_semi_utf8(&mut [0; 4]) + /// .len() + /// ); + /// assert_eq!( + /// 3, + /// JavaCodePoint::from_u32(0xd800) + /// .unwrap() + /// .encode_semi_utf8(&mut [0; 4]) + /// .len() + /// ); + /// ``` + /// ```should_panic + /// # use java_string::JavaCodePoint; + /// // Should panic + /// JavaCodePoint::from_char('ß').encode_semi_utf8(&mut [0; 1]); + /// ``` + #[inline] + pub fn encode_semi_utf8(self, dst: &mut [u8]) -> &mut [u8] { + let len = self.len_utf8(); + let code = self.as_u32(); + match (len, &mut dst[..]) { + (1, [a, ..]) => { + *a = code as u8; + } + (2, [a, b, ..]) => { + *a = (code >> 6 & 0x1f) as u8 | TAG_TWO_B; + *b = (code & 0x3f) as u8 | TAG_CONT; + } + (3, [a, b, c, ..]) => { + *a = (code >> 12 & 0x0f) as u8 | TAG_THREE_B; + *b = (code >> 6 & 0x3f) as u8 | TAG_CONT; + *c = (code & 0x3f) as u8 | TAG_CONT; + } + (4, [a, b, c, d, ..]) => { + *a = (code >> 18 & 0x07) as u8 | TAG_FOUR_B; + *b = (code >> 12 & 0x3f) as u8 | TAG_CONT; + *c = (code >> 6 & 0x3f) as u8 | TAG_CONT; + *d = (code & 0x3f) as u8 | TAG_CONT; + } + _ => panic!( + "encode_utf8: need {} bytes to encode U+{:X}, but the buffer has {}", + len, + code, + dst.len() + ), + } + &mut dst[..len] + } + + /// See [`char::eq_ignore_ascii_case`]. + #[inline] + pub fn eq_ignore_ascii_case(&self, other: &JavaCodePoint) -> bool { + match (self.as_char(), other.as_char()) { + (Some(char1), Some(char2)) => char1.eq_ignore_ascii_case(&char2), + (None, None) => self == other, + _ => false, + } + } + + /// See [`char::escape_debug`]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!( + /// "a", + /// JavaCodePoint::from_char('a').escape_debug().to_string() + /// ); + /// assert_eq!( + /// "\\n", + /// JavaCodePoint::from_char('\n').escape_debug().to_string() + /// ); + /// assert_eq!( + /// "\\u{d800}", + /// JavaCodePoint::from_u32(0xd800) + /// .unwrap() + /// .escape_debug() + /// .to_string() + /// ); + /// ``` + #[inline] + #[must_use] + pub fn escape_debug(self) -> CharEscapeIter { + self.escape_debug_ext(EscapeDebugExtArgs::ESCAPE_ALL) + } + + #[inline] + #[must_use] + pub(crate) fn escape_debug_ext(self, args: EscapeDebugExtArgs) -> CharEscapeIter { + const NULL: u32 = '\0' as u32; + const TAB: u32 = '\t' as u32; + const CARRIAGE_RETURN: u32 = '\r' as u32; + const LINE_FEED: u32 = '\n' as u32; + const SINGLE_QUOTE: u32 = '\'' as u32; + const DOUBLE_QUOTE: u32 = '"' as u32; + const BACKSLASH: u32 = '\\' as u32; + + unsafe { + // SAFETY: all characters specified are in ascii range + match self.as_u32() { + NULL => CharEscapeIter::new([b'\\', b'0']), + TAB => CharEscapeIter::new([b'\\', b't']), + CARRIAGE_RETURN => CharEscapeIter::new([b'\\', b'r']), + LINE_FEED => CharEscapeIter::new([b'\\', b'n']), + SINGLE_QUOTE if args.escape_single_quote => CharEscapeIter::new([b'\\', b'\'']), + DOUBLE_QUOTE if args.escape_double_quote => CharEscapeIter::new([b'\\', b'"']), + BACKSLASH => CharEscapeIter::new([b'\\', b'\\']), + _ if self.is_printable() => { + // SAFETY: surrogate code points are not printable + CharEscapeIter::printable(self.as_char_unchecked()) + } + _ => self.escape_unicode(), + } + } + } + + #[inline] + fn is_printable(self) -> bool { + let Some(char) = self.as_char() else { + return false; + }; + if matches!(char, '\\' | '\'' | '"') { + return true; + } + char.escape_debug().next() != Some('\\') + } + + /// See [`char::escape_default`]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!( + /// "a", + /// JavaCodePoint::from_char('a').escape_default().to_string() + /// ); + /// assert_eq!( + /// "\\n", + /// JavaCodePoint::from_char('\n').escape_default().to_string() + /// ); + /// assert_eq!( + /// "\\u{d800}", + /// JavaCodePoint::from_u32(0xd800) + /// .unwrap() + /// .escape_default() + /// .to_string() + /// ); + /// ``` + #[inline] + #[must_use] + pub fn escape_default(self) -> CharEscapeIter { + const TAB: u32 = '\t' as u32; + const CARRIAGE_RETURN: u32 = '\r' as u32; + const LINE_FEED: u32 = '\n' as u32; + const SINGLE_QUOTE: u32 = '\'' as u32; + const DOUBLE_QUOTE: u32 = '"' as u32; + const BACKSLASH: u32 = '\\' as u32; + + unsafe { + // SAFETY: all characters specified are in ascii range + match self.as_u32() { + TAB => CharEscapeIter::new([b'\\', b't']), + CARRIAGE_RETURN => CharEscapeIter::new([b'\\', b'r']), + LINE_FEED => CharEscapeIter::new([b'\\', b'n']), + SINGLE_QUOTE => CharEscapeIter::new([b'\\', b'\'']), + DOUBLE_QUOTE => CharEscapeIter::new([b'\\', b'"']), + BACKSLASH => CharEscapeIter::new([b'\\', b'\\']), + 0x20..=0x7e => CharEscapeIter::new([self.as_u32() as u8]), + _ => self.escape_unicode(), + } + } + } + + /// See [`char::escape_unicode`]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// assert_eq!( + /// "\\u{2764}", + /// JavaCodePoint::from_char('❤').escape_unicode().to_string() + /// ); + /// assert_eq!( + /// "\\u{d800}", + /// JavaCodePoint::from_u32(0xd800) + /// .unwrap() + /// .escape_unicode() + /// .to_string() + /// ); + /// ``` + #[inline] + #[must_use] + pub fn escape_unicode(self) -> CharEscapeIter { + let x = self.as_u32(); + + let mut arr = [0; 10]; + arr[0] = b'\\'; + arr[1] = b'u'; + arr[2] = b'{'; + + let number_len = if x == 0 { + 1 + } else { + ((x.ilog2() >> 2) + 1) as usize + }; + arr[3 + number_len] = b'}'; + for hexit in 0..number_len { + arr[2 + number_len - hexit] = b"0123456789abcdef"[((x >> (hexit << 2)) & 15) as usize]; + } + + CharEscapeIter { + inner: EscapeIterInner::Escaped(EscapeIterEscaped { + bytes: arr, + range: 0..number_len + 4, + }), + } + } + + /// See [`char::is_alphabetic`]. + #[inline] + #[must_use] + pub fn is_alphabetic(self) -> bool { + self.as_char().is_some_and(|char| char.is_alphabetic()) + } + + /// See [`char::is_alphanumeric`]. + #[inline] + #[must_use] + pub fn is_alphanumeric(self) -> bool { + self.as_char().is_some_and(|char| char.is_alphanumeric()) + } + + /// See [`char::is_ascii`]. + #[inline] + #[must_use] + pub fn is_ascii(self) -> bool { + self.as_u32() <= 0x7f + } + + /// See [`char::is_ascii_alphabetic`]. + #[inline] + #[must_use] + pub const fn is_ascii_alphabetic(self) -> bool { + self.is_ascii_lowercase() || self.is_ascii_uppercase() + } + + /// See [`char::is_ascii_alphanumeric`]. + #[inline] + #[must_use] + pub const fn is_ascii_alphanumeric(self) -> bool { + self.is_ascii_alphabetic() || self.is_ascii_digit() + } + + /// See [`char::is_ascii_control`]. + #[inline] + #[must_use] + pub const fn is_ascii_control(self) -> bool { + matches!(self.as_u32(), 0..=0x1f | 0x7f) + } + + /// See [`char::is_ascii_digit`]. + #[inline] + #[must_use] + pub const fn is_ascii_digit(self) -> bool { + const ZERO: u32 = '0' as u32; + const NINE: u32 = '9' as u32; + matches!(self.as_u32(), ZERO..=NINE) + } + + /// See [`char::is_ascii_graphic`]. + #[inline] + #[must_use] + pub const fn is_ascii_graphic(self) -> bool { + matches!(self.as_u32(), 0x21..=0x7e) + } + + /// See [`char::is_ascii_hexdigit`]. + #[inline] + #[must_use] + pub const fn is_ascii_hexdigit(self) -> bool { + const LOWER_A: u32 = 'a' as u32; + const LOWER_F: u32 = 'f' as u32; + const UPPER_A: u32 = 'A' as u32; + const UPPER_F: u32 = 'F' as u32; + self.is_ascii_digit() || matches!(self.as_u32(), (LOWER_A..=LOWER_F) | (UPPER_A..=UPPER_F)) + } + + /// See [`char::is_ascii_lowercase`]. + #[inline] + #[must_use] + pub const fn is_ascii_lowercase(self) -> bool { + const A: u32 = 'a' as u32; + const Z: u32 = 'z' as u32; + matches!(self.as_u32(), A..=Z) + } + + /// See [`char::is_ascii_octdigit`]. + #[inline] + #[must_use] + pub const fn is_ascii_octdigit(self) -> bool { + const ZERO: u32 = '0' as u32; + const SEVEN: u32 = '7' as u32; + matches!(self.as_u32(), ZERO..=SEVEN) + } + + /// See [`char::is_ascii_punctuation`]. + #[inline] + #[must_use] + pub const fn is_ascii_punctuation(self) -> bool { + matches!( + self.as_u32(), + (0x21..=0x2f) | (0x3a..=0x40) | (0x5b..=0x60) | (0x7b..=0x7e) + ) + } + + /// See [`char::is_ascii_uppercase`]. + #[inline] + #[must_use] + pub const fn is_ascii_uppercase(self) -> bool { + const A: u32 = 'A' as u32; + const Z: u32 = 'Z' as u32; + matches!(self.as_u32(), A..=Z) + } + + /// See [`char::is_ascii_whitespace`]. + #[inline] + #[must_use] + pub const fn is_ascii_whitespace(self) -> bool { + const SPACE: u32 = ' ' as u32; + const HORIZONTAL_TAB: u32 = '\t' as u32; + const LINE_FEED: u32 = '\n' as u32; + const FORM_FEED: u32 = 0xc; + const CARRIAGE_RETURN: u32 = '\r' as u32; + matches!( + self.as_u32(), + SPACE | HORIZONTAL_TAB | LINE_FEED | FORM_FEED | CARRIAGE_RETURN + ) + } + + /// See [`char::is_control`]. + #[inline] + #[must_use] + pub fn is_control(self) -> bool { + self.as_char().is_some_and(|char| char.is_control()) + } + + /// See [`char::is_digit`]. + #[inline] + #[must_use] + pub fn is_digit(self, radix: u32) -> bool { + self.to_digit(radix).is_some() + } + + /// See [`char::is_lowercase`]. + #[inline] + #[must_use] + pub fn is_lowercase(self) -> bool { + self.as_char().is_some_and(|char| char.is_lowercase()) + } + + /// See [`char::is_numeric`]. + #[inline] + #[must_use] + pub fn is_numeric(self) -> bool { + self.as_char().is_some_and(|char| char.is_numeric()) + } + + /// See [`char::is_uppercase`]. + #[inline] + #[must_use] + pub fn is_uppercase(self) -> bool { + self.as_char().is_some_and(|char| char.is_uppercase()) + } + + /// See [`char::is_whitespace`]. + #[inline] + #[must_use] + pub fn is_whitespace(self) -> bool { + self.as_char().is_some_and(|char| char.is_whitespace()) + } + + /// See [`char::len_utf16`]. Surrogate code points return 1. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// + /// let n = JavaCodePoint::from_char('ß').len_utf16(); + /// assert_eq!(n, 1); + /// + /// let len = JavaCodePoint::from_char('💣').len_utf16(); + /// assert_eq!(len, 2); + /// + /// assert_eq!(1, JavaCodePoint::from_u32(0xd800).unwrap().len_utf16()); + /// ``` + #[inline] + #[must_use] + pub const fn len_utf16(self) -> usize { + if let Some(char) = self.as_char() { + char.len_utf16() + } else { + 1 // invalid code points are encoded as 1 utf16 code point anyway + } + } + + /// See [`char::len_utf8`]. Surrogate code points return 3. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// + /// let len = JavaCodePoint::from_char('A').len_utf8(); + /// assert_eq!(len, 1); + /// + /// let len = JavaCodePoint::from_char('ß').len_utf8(); + /// assert_eq!(len, 2); + /// + /// let len = JavaCodePoint::from_char('ℝ').len_utf8(); + /// assert_eq!(len, 3); + /// + /// let len = JavaCodePoint::from_char('💣').len_utf8(); + /// assert_eq!(len, 4); + /// + /// let len = JavaCodePoint::from_u32(0xd800).unwrap().len_utf8(); + /// assert_eq!(len, 3); + /// ``` + #[inline] + #[must_use] + pub const fn len_utf8(self) -> usize { + if let Some(char) = self.as_char() { + char.len_utf8() + } else { + 3 // invalid code points are all length 3 in semi-valid utf8 + } + } + + /// See [`char::make_ascii_lowercase`]. + #[inline] + pub fn make_ascii_lowercase(&mut self) { + *self = self.to_ascii_lowercase(); + } + + /// See [`char::make_ascii_uppercase`]. + #[inline] + pub fn make_ascii_uppercase(&mut self) { + *self = self.to_ascii_uppercase(); + } + + /// See [`char::to_ascii_lowercase`]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// + /// let ascii = JavaCodePoint::from_char('A'); + /// let non_ascii = JavaCodePoint::from_char('❤'); + /// + /// assert_eq!('a', ascii.to_ascii_lowercase()); + /// assert_eq!('❤', non_ascii.to_ascii_lowercase()); + /// ``` + #[inline] + #[must_use] + pub const fn to_ascii_lowercase(self) -> JavaCodePoint { + if self.is_ascii_uppercase() { + unsafe { + // SAFETY: all lowercase chars are valid chars + Self::from_u32_unchecked(self.as_u32() + 32) + } + } else { + self + } + } + + /// See [`char::to_ascii_uppercase`]. + /// + /// ``` + /// # use java_string::JavaCodePoint; + /// + /// let ascii = JavaCodePoint::from_char('a'); + /// let non_ascii = JavaCodePoint::from_char('❤'); + /// + /// assert_eq!('A', ascii.to_ascii_uppercase()); + /// assert_eq!('❤', non_ascii.to_ascii_uppercase()); + /// ``` + #[inline] + #[must_use] + pub const fn to_ascii_uppercase(self) -> JavaCodePoint { + if self.is_ascii_lowercase() { + unsafe { + // SAFETY: all uppercase chars are valid chars + Self::from_u32_unchecked(self.as_u32() - 32) + } + } else { + self + } + } + + /// See [`char::to_digit`]. + #[inline] + #[must_use] + pub const fn to_digit(self, radix: u32) -> Option { + if let Some(char) = self.as_char() { + char.to_digit(radix) + } else { + None + } + } + + /// See [`char::to_lowercase`]. + #[inline] + #[must_use] + pub fn to_lowercase(self) -> ToLowercase { + match self.as_char() { + Some(char) => ToLowercase::char(char.to_lowercase()), + None => ToLowercase::invalid(self), + } + } + + /// See [`char::to_uppercase`]. + #[inline] + #[must_use] + pub fn to_uppercase(self) -> ToUppercase { + match self.as_char() { + Some(char) => ToUppercase::char(char.to_uppercase()), + None => ToUppercase::invalid(self), + } + } +} + +impl Debug for JavaCodePoint { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_char('\'')?; + for c in self.escape_debug_ext(EscapeDebugExtArgs { + escape_single_quote: true, + escape_double_quote: false, + }) { + f.write_char(c)?; + } + f.write_char('\'') + } +} + +impl Default for JavaCodePoint { + #[inline] + fn default() -> Self { + JavaCodePoint::from_char('\0') + } +} + +impl Display for JavaCodePoint { + #[inline] + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + Display::fmt(&self.as_char().unwrap_or(char::REPLACEMENT_CHARACTER), f) + } +} + +impl From for u32 { + #[inline] + fn from(value: JavaCodePoint) -> Self { + value.as_u32() + } +} + +impl From for JavaCodePoint { + #[inline] + fn from(value: u8) -> Self { + JavaCodePoint::from_char(char::from(value)) + } +} + +impl FromStr for JavaCodePoint { + type Err = ParseCharError; + + #[inline] + fn from_str(s: &str) -> Result { + char::from_str(s).map(JavaCodePoint::from_char) + } +} + +impl Hash for JavaCodePoint { + #[inline] + fn hash(&self, state: &mut H) { + self.as_u32().hash(state) + } +} + +impl Ord for JavaCodePoint { + #[inline] + fn cmp(&self, other: &Self) -> Ordering { + self.as_u32().cmp(&other.as_u32()) + } +} + +impl PartialOrd for JavaCodePoint { + #[inline] + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl PartialOrd for JavaCodePoint { + #[inline] + fn partial_cmp(&self, other: &char) -> Option { + self.partial_cmp(&JavaCodePoint::from_char(*other)) + } +} + +impl PartialOrd for char { + #[inline] + fn partial_cmp(&self, other: &JavaCodePoint) -> Option { + JavaCodePoint::from_char(*self).partial_cmp(other) + } +} + +impl PartialEq for JavaCodePoint { + #[inline] + fn eq(&self, other: &char) -> bool { + self == &JavaCodePoint::from_char(*other) + } +} + +impl PartialEq for char { + #[inline] + fn eq(&self, other: &JavaCodePoint) -> bool { + &JavaCodePoint::from_char(*self) == other + } +} + +pub(crate) struct EscapeDebugExtArgs { + pub(crate) escape_single_quote: bool, + pub(crate) escape_double_quote: bool, +} + +impl EscapeDebugExtArgs { + pub(crate) const ESCAPE_ALL: Self = Self { + escape_single_quote: true, + escape_double_quote: true, + }; +} + +#[derive(Clone, Debug)] +pub struct CharEscapeIter { + inner: EscapeIterInner, +} + +#[derive(Clone, Debug)] +enum EscapeIterInner { + Printable(Once), + Escaped(EscapeIterEscaped), +} + +impl Display for EscapeIterInner { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + match self { + EscapeIterInner::Printable(char) => char.clone().try_for_each(|ch| f.write_char(ch)), + EscapeIterInner::Escaped(escaped) => Display::fmt(escaped, f), + } + } +} + +impl CharEscapeIter { + #[inline] + fn printable(char: char) -> Self { + CharEscapeIter { + inner: EscapeIterInner::Printable(once(char)), + } + } + + /// # Safety + /// Assumes that the input byte array is ASCII + #[inline] + unsafe fn new(bytes: [u8; N]) -> Self { + assert!(N <= 10, "Too many bytes in escape iter"); + let mut ten_bytes = [0; 10]; + ten_bytes[..N].copy_from_slice(&bytes); + CharEscapeIter { + inner: EscapeIterInner::Escaped(EscapeIterEscaped { + bytes: ten_bytes, + range: 0..N, + }), + } + } +} + +impl Iterator for CharEscapeIter { + type Item = char; + + #[inline] + fn next(&mut self) -> Option { + match &mut self.inner { + EscapeIterInner::Printable(printable) => printable.next(), + EscapeIterInner::Escaped(escaped) => escaped.next(), + } + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + match &self.inner { + EscapeIterInner::Printable(printable) => printable.size_hint(), + EscapeIterInner::Escaped(escaped) => escaped.size_hint(), + } + } +} + +impl ExactSizeIterator for CharEscapeIter { + #[inline] + fn len(&self) -> usize { + match &self.inner { + EscapeIterInner::Printable(printable) => printable.len(), + EscapeIterInner::Escaped(escaped) => escaped.len(), + } + } +} + +impl FusedIterator for CharEscapeIter {} + +impl Display for CharEscapeIter { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + Display::fmt(&self.inner, f) + } +} + +#[derive(Clone, Debug)] +struct EscapeIterEscaped { + // SAFETY: all values must be in the ASCII range + bytes: [u8; 10], + // SAFETY: range must not be out of bounds for length 10 + range: Range, +} + +impl Iterator for EscapeIterEscaped { + type Item = char; + + #[inline] + fn next(&mut self) -> Option { + self.range.next().map(|index| unsafe { + // SAFETY: the range is never out of bounds for length 10 + char::from(*self.bytes.get_unchecked(index)) + }) + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + self.range.size_hint() + } + + #[inline] + fn count(self) -> usize { + self.range.len() + } +} + +impl ExactSizeIterator for EscapeIterEscaped { + #[inline] + fn len(&self) -> usize { + self.range.len() + } +} + +impl FusedIterator for EscapeIterEscaped {} + +impl Display for EscapeIterEscaped { + #[inline] + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + let str = unsafe { + // SAFETY: all bytes are in ASCII range, and range is in bounds for length 10 + std::str::from_utf8_unchecked(self.bytes.get_unchecked(self.range.clone())) + }; + f.write_str(str) + } +} + +pub type ToLowercase = CharIterDelegate; +pub type ToUppercase = CharIterDelegate; + +#[derive(Debug, Clone)] +pub struct CharIterDelegate(CharIterDelegateInner); + +impl CharIterDelegate { + #[inline] + fn char(iter: I) -> CharIterDelegate { + CharIterDelegate(CharIterDelegateInner::Char(iter)) + } + + #[inline] + fn invalid(code_point: JavaCodePoint) -> CharIterDelegate { + CharIterDelegate(CharIterDelegateInner::Invalid(Some(code_point).into_iter())) + } +} + +#[derive(Debug, Clone)] +enum CharIterDelegateInner { + Char(I), + Invalid(std::option::IntoIter), +} + +impl Iterator for CharIterDelegate +where + I: Iterator, +{ + type Item = JavaCodePoint; + + #[inline] + fn next(&mut self) -> Option { + match &mut self.0 { + CharIterDelegateInner::Char(char_iter) => { + char_iter.next().map(JavaCodePoint::from_char) + } + CharIterDelegateInner::Invalid(code_point) => code_point.next(), + } + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + match &self.0 { + CharIterDelegateInner::Char(char_iter) => char_iter.size_hint(), + CharIterDelegateInner::Invalid(code_point) => code_point.size_hint(), + } + } +} + +impl DoubleEndedIterator for CharIterDelegate +where + I: Iterator + DoubleEndedIterator, +{ + #[inline] + fn next_back(&mut self) -> Option { + match &mut self.0 { + CharIterDelegateInner::Char(char_iter) => { + char_iter.next_back().map(JavaCodePoint::from_char) + } + CharIterDelegateInner::Invalid(code_point) => code_point.next_back(), + } + } +} + +impl ExactSizeIterator for CharIterDelegate where I: Iterator + ExactSizeIterator {} + +impl FusedIterator for CharIterDelegate where I: Iterator + FusedIterator {} diff --git a/vendor/valence/crates/java_string/src/error.rs b/vendor/valence/crates/java_string/src/error.rs new file mode 100644 index 00000000..09742d01 --- /dev/null +++ b/vendor/valence/crates/java_string/src/error.rs @@ -0,0 +1,126 @@ +use std::error::Error; +use std::fmt; +use std::fmt::{Display, Formatter}; + +#[derive(Copy, Eq, PartialEq, Clone, Debug)] +pub struct Utf8Error { + pub(crate) valid_up_to: usize, + pub(crate) error_len: Option, +} + +impl Utf8Error { + #[must_use] + #[inline] + pub const fn valid_up_to(&self) -> usize { + self.valid_up_to + } + + #[must_use] + #[inline] + pub const fn error_len(&self) -> Option { + // Manual implementation of Option::map since it's not const + match self.error_len { + Some(len) => Some(len as usize), + None => None, + } + } + + #[must_use] + #[inline] + pub(crate) const fn from_std(value: std::str::Utf8Error) -> Self { + Self { + valid_up_to: value.valid_up_to(), + // Manual implementation of Option::map since it's not const + error_len: match value.error_len() { + Some(error_len) => Some(error_len as u8), + None => None, + }, + } + } +} + +impl Display for Utf8Error { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + if let Some(error_len) = self.error_len { + write!( + f, + "invalid utf-8 sequence of {} bytes from index {}", + error_len, self.valid_up_to + ) + } else { + write!( + f, + "incomplete utf-8 byte sequence from index {}", + self.valid_up_to + ) + } + } +} + +impl From for Utf8Error { + #[inline] + fn from(value: std::str::Utf8Error) -> Self { + Self::from_std(value) + } +} + +impl Error for Utf8Error {} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct FromUtf8Error { + pub(crate) bytes: Vec, + pub(crate) error: Utf8Error, +} + +impl FromUtf8Error { + pub fn as_bytes(&self) -> &[u8] { + &self.bytes[..] + } + + #[must_use] + pub fn into_bytes(self) -> Vec { + self.bytes + } + + pub fn utf8_error(&self) -> Utf8Error { + self.error + } +} + +impl Display for FromUtf8Error { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + Display::fmt(&self.error, f) + } +} + +impl Error for FromUtf8Error {} + +#[derive(Copy, Eq, PartialEq, Clone, Debug)] +pub enum ParseError { + InvalidUtf8(Utf8Error), + Err(E), +} + +impl Display for ParseError +where + E: Display, +{ + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + match self { + ParseError::InvalidUtf8(err) => Display::fmt(err, f), + ParseError::Err(err) => Display::fmt(err, f), + } + } +} + +impl Error for ParseError +where + E: Error + 'static, +{ + fn source(&self) -> Option<&(dyn Error + 'static)> { + match self { + ParseError::InvalidUtf8(err) => Some(err), + ParseError::Err(err) => Some(err), + } + } +} diff --git a/vendor/valence/crates/java_string/src/iter.rs b/vendor/valence/crates/java_string/src/iter.rs new file mode 100644 index 00000000..6dd67b85 --- /dev/null +++ b/vendor/valence/crates/java_string/src/iter.rs @@ -0,0 +1,977 @@ +use std::fmt::{Debug, Display, Formatter, Write}; +use std::iter::{Chain, Copied, Filter, FlatMap, Flatten, FusedIterator, Map}; +use std::{option, slice}; + +use crate::validations::{next_code_point, next_code_point_reverse}; +use crate::{CharEscapeIter, JavaCodePoint, JavaStr, JavaStrPattern}; +macro_rules! delegate { + (Iterator for $ty:ident $(<$($lt:lifetime),+>)? => $item:ty $(, DoubleEnded = $double_ended:ty)?) => { + impl$(<$($lt),+>)? Iterator for $ty$(<$($lt),+>)? { + type Item = $item; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next() + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + self.inner.size_hint() + } + + #[inline] + fn count(self) -> usize { + self.inner.count() + } + + #[inline] + fn last(self) -> Option { + self.inner.last() + } + + #[inline] + fn nth(&mut self, n: usize) -> Option { + self.inner.nth(n) + } + + #[inline] + fn all(&mut self, f: F) -> bool + where + F: FnMut(Self::Item) -> bool, + { + self.inner.all(f) + } + + #[inline] + fn any(&mut self, f: F) -> bool + where + F: FnMut(Self::Item) -> bool, + { + self.inner.any(f) + } + + #[inline] + fn find

(&mut self, predicate: P) -> Option + where + P: FnMut(&Self::Item) -> bool, + { + self.inner.find(predicate) + } + + #[inline] + fn position

(&mut self, predicate: P) -> Option + where + P: FnMut(Self::Item) -> bool, + { + self.inner.position(predicate) + } + + $( + #[inline] + fn rposition

(&mut self, predicate: P) -> Option + where + P: FnMut(Self::Item) -> bool, + { + let _test: $double_ended = (); + self.inner.rposition(predicate) + } + )? + } + }; + + (DoubleEndedIterator for $ty:ident $(<$($lt:lifetime),+>)?) => { + impl$(<$($lt),+>)? DoubleEndedIterator for $ty$(<$($lt),+>)? { + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next_back() + } + + #[inline] + fn nth_back(&mut self, n: usize) -> Option { + self.inner.nth_back(n) + } + + #[inline] + fn rfind

(&mut self, predicate: P) -> Option + where + P: FnMut(&Self::Item) -> bool, + { + self.inner.rfind(predicate) + } + } + }; + + (ExactSizeIterator for $ty:ident $(<$($lt:lifetime),+>)?) => { + impl$(<$($lt),+>)? ExactSizeIterator for $ty$(<$($lt),+>)? { + #[inline] + fn len(&self) -> usize { + self.inner.len() + } + } + }; + + (FusedIterator for $ty:ident $(<$($lt:lifetime),+>)?) => { + impl$(<$($lt),+>)? FusedIterator for $ty$(<$($lt),+>)? {} + }; + + (Iterator, DoubleEndedIterator, ExactSizeIterator, FusedIterator for $ty:ident $(<$($lt:lifetime),+>)? => $item:ty) => { + delegate!(Iterator for $ty$(<$($lt),+>)? => $item, DoubleEnded = ()); + delegate!(DoubleEndedIterator for $ty$(<$($lt),+>)?); + delegate!(ExactSizeIterator for $ty$(<$($lt),+>)?); + delegate!(FusedIterator for $ty$(<$($lt),+>)?); + }; +} + +#[must_use] +#[derive(Clone, Debug)] +pub struct Bytes<'a> { + pub(crate) inner: Copied>, +} +delegate!(Iterator, DoubleEndedIterator, ExactSizeIterator, FusedIterator for Bytes<'a> => u8); + +#[derive(Clone, Debug)] +#[must_use] +pub struct EscapeDebug<'a> { + #[allow(clippy::type_complexity)] + pub(crate) inner: Chain< + Flatten>, + FlatMap, CharEscapeIter, fn(JavaCodePoint) -> CharEscapeIter>, + >, +} +delegate!(Iterator for EscapeDebug<'a> => char); +delegate!(FusedIterator for EscapeDebug<'a>); +impl<'a> Display for EscapeDebug<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + self.clone().try_for_each(|c| f.write_char(c)) + } +} + +#[derive(Clone, Debug)] +#[must_use] +pub struct EscapeDefault<'a> { + pub(crate) inner: FlatMap, CharEscapeIter, fn(JavaCodePoint) -> CharEscapeIter>, +} +delegate!(Iterator for EscapeDefault<'a> => char); +delegate!(FusedIterator for EscapeDefault<'a>); +impl<'a> Display for EscapeDefault<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + self.clone().try_for_each(|c| f.write_char(c)) + } +} + +#[derive(Clone, Debug)] +#[must_use] +pub struct EscapeUnicode<'a> { + pub(crate) inner: FlatMap, CharEscapeIter, fn(JavaCodePoint) -> CharEscapeIter>, +} +delegate!(Iterator for EscapeUnicode<'a> => char); +delegate!(FusedIterator for EscapeUnicode<'a>); +impl<'a> Display for EscapeUnicode<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + self.clone().try_for_each(|c| f.write_char(c)) + } +} + +#[derive(Clone, Debug)] +#[must_use] +pub struct Lines<'a> { + pub(crate) inner: Map, fn(&JavaStr) -> &JavaStr>, +} +delegate!(Iterator for Lines<'a> => &'a JavaStr); +delegate!(DoubleEndedIterator for Lines<'a>); +delegate!(FusedIterator for Lines<'a>); + +#[derive(Clone)] +#[must_use] +pub struct Chars<'a> { + pub(crate) inner: slice::Iter<'a, u8>, +} + +impl<'a> Iterator for Chars<'a> { + type Item = JavaCodePoint; + + #[inline] + fn next(&mut self) -> Option { + // SAFETY: `JavaStr` invariant says `self.inner` is a semi-valid UTF-8 string + // and the resulting `ch` is a valid Unicode Scalar Value or surrogate + // code point. + unsafe { next_code_point(&mut self.inner).map(|ch| JavaCodePoint::from_u32_unchecked(ch)) } + } + + // TODO: std has an optimized count impl + + #[inline] + fn size_hint(&self) -> (usize, Option) { + let len = self.inner.len(); + // `(len + 3)` can't overflow, because we know that the `slice::Iter` + // belongs to a slice in memory which has a maximum length of + // `isize::MAX` (that's well below `usize::MAX`). + (len.div_ceil(4), Some(len)) + } + + #[inline] + fn last(mut self) -> Option { + // No need to go through the entire string. + self.next_back() + } +} + +impl Debug for Chars<'_> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "Chars(")?; + f.debug_list().entries(self.clone()).finish()?; + write!(f, ")")?; + Ok(()) + } +} + +impl<'a> DoubleEndedIterator for Chars<'a> { + #[inline] + fn next_back(&mut self) -> Option { + // SAFETY: `JavaStr` invariant says `self.inner` is a semi-valid UTF-8 string + // and the resulting `ch` is a valid Unicode Scalar Value or surrogate + // code point. + unsafe { + next_code_point_reverse(&mut self.inner).map(|ch| JavaCodePoint::from_u32_unchecked(ch)) + } + } +} + +impl FusedIterator for Chars<'_> {} + +impl<'a> Chars<'a> { + #[inline] + #[must_use] + pub fn as_str(&self) -> &'a JavaStr { + // SAFETY: `Chars` is only made from a JavaStr, which guarantees the iter is + // semi-valid UTF-8. + unsafe { JavaStr::from_semi_utf8_unchecked(self.inner.as_slice()) } + } +} + +#[derive(Clone, Debug)] +#[must_use] +pub struct CharIndices<'a> { + pub(crate) front_offset: usize, + pub(crate) inner: Chars<'a>, +} + +impl<'a> Iterator for CharIndices<'a> { + type Item = (usize, JavaCodePoint); + + #[inline] + fn next(&mut self) -> Option<(usize, JavaCodePoint)> { + let pre_len = self.inner.inner.len(); + match self.inner.next() { + None => None, + Some(ch) => { + let index = self.front_offset; + let len = self.inner.inner.len(); + self.front_offset += pre_len - len; + Some((index, ch)) + } + } + } + + #[inline] + fn count(self) -> usize { + self.inner.count() + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + self.inner.size_hint() + } + + #[inline] + fn last(mut self) -> Option<(usize, JavaCodePoint)> { + // No need to go through the entire string. + self.next_back() + } +} + +impl<'a> DoubleEndedIterator for CharIndices<'a> { + #[inline] + fn next_back(&mut self) -> Option<(usize, JavaCodePoint)> { + self.inner.next_back().map(|ch| { + let index = self.front_offset + self.inner.inner.len(); + (index, ch) + }) + } +} + +impl FusedIterator for CharIndices<'_> {} + +impl<'a> CharIndices<'a> { + #[inline] + #[must_use] + pub fn as_str(&self) -> &'a JavaStr { + self.inner.as_str() + } +} + +#[must_use] +#[derive(Debug, Clone)] +pub struct Matches<'a, P> { + pub(crate) str: &'a JavaStr, + pub(crate) pat: P, +} + +impl<'a, P> Iterator for Matches<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + if let Some((index, len)) = self.pat.find_in(self.str) { + // SAFETY: pattern returns valid indices + let ret = unsafe { self.str.get_unchecked(index..index + len) }; + self.str = unsafe { self.str.get_unchecked(index + len..) }; + Some(ret) + } else { + self.str = Default::default(); + None + } + } +} + +impl<'a, P> DoubleEndedIterator for Matches<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + if let Some((index, len)) = self.pat.rfind_in(self.str) { + // SAFETY: pattern returns valid indices + let ret = unsafe { self.str.get_unchecked(index..index + len) }; + self.str = unsafe { self.str.get_unchecked(..index) }; + Some(ret) + } else { + self.str = Default::default(); + None + } + } +} + +#[must_use] +#[derive(Clone, Debug)] +pub struct RMatches<'a, P> { + pub(crate) inner: Matches<'a, P>, +} + +impl<'a, P> Iterator for RMatches<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> DoubleEndedIterator for RMatches<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next() + } +} + +#[must_use] +#[derive(Clone, Debug)] +pub struct MatchIndices<'a, P> { + pub(crate) str: &'a JavaStr, + pub(crate) start: usize, + pub(crate) pat: P, +} + +impl<'a, P> Iterator for MatchIndices<'a, P> +where + P: JavaStrPattern, +{ + type Item = (usize, &'a JavaStr); + + #[inline] + fn next(&mut self) -> Option { + if let Some((index, len)) = self.pat.find_in(self.str) { + let full_index = self.start + index; + self.start = full_index + len; + // SAFETY: pattern returns valid indices + let ret = unsafe { self.str.get_unchecked(index..index + len) }; + self.str = unsafe { self.str.get_unchecked(index + len..) }; + Some((full_index, ret)) + } else { + self.start += self.str.len(); + self.str = Default::default(); + None + } + } +} + +impl<'a, P> DoubleEndedIterator for MatchIndices<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + if let Some((index, len)) = self.pat.rfind_in(self.str) { + // SAFETY: pattern returns valid indices + let ret = unsafe { self.str.get_unchecked(index..index + len) }; + self.str = unsafe { self.str.get_unchecked(..index) }; + Some((self.start + index, ret)) + } else { + self.str = Default::default(); + None + } + } +} + +#[derive(Clone, Debug)] +pub struct RMatchIndices<'a, P> { + pub(crate) inner: MatchIndices<'a, P>, +} + +impl<'a, P> Iterator for RMatchIndices<'a, P> +where + P: JavaStrPattern, +{ + type Item = (usize, &'a JavaStr); + + #[inline] + fn next(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> DoubleEndedIterator for RMatchIndices<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next() + } +} + +#[derive(Clone, Debug)] +struct SplitHelper<'a, P> { + start: usize, + end: usize, + haystack: &'a JavaStr, + pat: P, + allow_trailing_empty: bool, + finished: bool, + had_empty_match: bool, +} + +impl<'a, P> SplitHelper<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn new(haystack: &'a JavaStr, pat: P, allow_trailing_empty: bool) -> Self { + Self { + start: 0, + end: haystack.len(), + haystack, + pat, + allow_trailing_empty, + finished: false, + had_empty_match: false, + } + } + + #[inline] + fn get_end(&mut self) -> Option<&'a JavaStr> { + if !self.finished { + self.finished = true; + + if self.allow_trailing_empty || self.end - self.start > 0 { + // SAFETY: `self.start` and `self.end` always lie on unicode boundaries. + let string = unsafe { self.haystack.get_unchecked(self.start..self.end) }; + return Some(string); + } + } + + None + } + + #[inline] + fn next_match(&mut self) -> Option<(usize, usize)> { + // SAFETY: `self.start` always lies on a unicode boundary. + let substr = unsafe { self.haystack.get_unchecked(self.start..) }; + + let result = if self.had_empty_match { + // if we had an empty match before, we are going to find the empty match again. + // don't do that, search from the next index along. + + if substr.is_empty() { + None + } else { + // SAFETY: we can pop the string because we already checked if the string is + // empty above + let first_char_len = unsafe { substr.chars().next().unwrap_unchecked().len_utf8() }; + let popped_str = unsafe { substr.get_unchecked(first_char_len..) }; + + self.pat + .find_in(popped_str) + .map(|(index, len)| (index + first_char_len + self.start, len)) + } + } else { + self.pat + .find_in(substr) + .map(|(index, len)| (index + self.start, len)) + }; + + self.had_empty_match = result.is_some_and(|(_, len)| len == 0); + + result + } + + #[inline] + fn next(&mut self) -> Option<&'a JavaStr> { + if self.finished { + return None; + } + + match self.next_match() { + Some((index, len)) => unsafe { + // SAFETY: pattern guarantees valid indices + let elt = self.haystack.get_unchecked(self.start..index); + self.start = index + len; + Some(elt) + }, + None => self.get_end(), + } + } + + #[inline] + fn next_inclusive(&mut self) -> Option<&'a JavaStr> { + if self.finished { + return None; + } + + match self.next_match() { + Some((index, len)) => unsafe { + // SAFETY: pattern guarantees valid indices + let elt = self.haystack.get_unchecked(self.start..index + len); + self.start = index + len; + Some(elt) + }, + None => self.get_end(), + } + } + + #[inline] + fn next_match_back(&mut self) -> Option<(usize, usize)> { + // SAFETY: `self.end` always lies on a unicode boundary. + let substr = unsafe { self.haystack.get_unchecked(..self.end) }; + + let result = if self.had_empty_match { + // if we had an empty match before, we are going to find the empty match again. + // don't do that, search from the next index along. + + if substr.is_empty() { + None + } else { + // SAFETY: we can pop the string because we already checked if the string is + // empty above + let last_char_len = + unsafe { substr.chars().next_back().unwrap_unchecked().len_utf8() }; + let popped_str = unsafe { substr.get_unchecked(..substr.len() - last_char_len) }; + + self.pat.rfind_in(popped_str) + } + } else { + self.pat.rfind_in(substr) + }; + + self.had_empty_match = result.is_some_and(|(_, len)| len == 0); + + result + } + + #[inline] + fn next_back(&mut self) -> Option<&'a JavaStr> { + if self.finished { + return None; + } + + if !self.allow_trailing_empty { + self.allow_trailing_empty = true; + match self.next_back() { + Some(elt) if !elt.is_empty() => return Some(elt), + _ => { + if self.finished { + return None; + } + } + } + } + + match self.next_match_back() { + Some((index, len)) => unsafe { + // SAFETY: pattern guarantees valid indices + let elt = self.haystack.get_unchecked(index + len..self.end); + self.end = index; + Some(elt) + }, + None => unsafe { + // SAFETY: `self.start` and `self.end` always lie on unicode boundaries. + self.finished = true; + Some(self.haystack.get_unchecked(self.start..self.end)) + }, + } + } + + #[inline] + fn next_back_inclusive(&mut self) -> Option<&'a JavaStr> { + if self.finished { + return None; + } + + if !self.allow_trailing_empty { + self.allow_trailing_empty = true; + match self.next_back_inclusive() { + Some(elt) if !elt.is_empty() => return Some(elt), + _ => { + if self.finished { + return None; + } + } + } + } + + match self.next_match_back() { + Some((index, len)) => unsafe { + // SAFETY: pattern guarantees valid indices + let elt = self.haystack.get_unchecked(index + len..self.end); + self.end = index + len; + Some(elt) + }, + None => unsafe { + // SAFETY: `self.start` and `self.end` always lie on unicode boundaries. + self.finished = true; + Some(self.haystack.get_unchecked(self.start..self.end)) + }, + } + } +} + +#[derive(Clone, Debug)] +pub struct Split<'a, P> { + inner: SplitHelper<'a, P>, +} + +impl<'a, P> Split<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P) -> Self { + Split { + inner: SplitHelper::new(haystack, pat, true), + } + } +} + +impl<'a, P> Iterator for Split<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next() + } +} + +impl<'a, P> DoubleEndedIterator for Split<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> FusedIterator for Split<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct RSplit<'a, P> { + inner: SplitHelper<'a, P>, +} + +impl<'a, P> RSplit<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P) -> Self { + RSplit { + inner: SplitHelper::new(haystack, pat, true), + } + } +} + +impl<'a, P> Iterator for RSplit<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> DoubleEndedIterator for RSplit<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next() + } +} + +impl<'a, P> FusedIterator for RSplit<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct SplitTerminator<'a, P> { + inner: SplitHelper<'a, P>, +} + +impl<'a, P> SplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P) -> Self { + SplitTerminator { + inner: SplitHelper::new(haystack, pat, false), + } + } +} + +impl<'a, P> Iterator for SplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next() + } +} + +impl<'a, P> DoubleEndedIterator for SplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> FusedIterator for SplitTerminator<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct RSplitTerminator<'a, P> { + inner: SplitHelper<'a, P>, +} + +impl<'a, P> RSplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P) -> Self { + RSplitTerminator { + inner: SplitHelper::new(haystack, pat, false), + } + } +} + +impl<'a, P> Iterator for RSplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next_back() + } +} + +impl<'a, P> DoubleEndedIterator for RSplitTerminator<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next() + } +} + +impl<'a, P> FusedIterator for RSplitTerminator<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct SplitInclusive<'a, P> { + inner: SplitHelper<'a, P>, +} + +impl<'a, P> SplitInclusive<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P) -> Self { + SplitInclusive { + inner: SplitHelper::new(haystack, pat, false), + } + } +} + +impl<'a, P> Iterator for SplitInclusive<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + self.inner.next_inclusive() + } +} + +impl<'a, P> DoubleEndedIterator for SplitInclusive<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + fn next_back(&mut self) -> Option { + self.inner.next_back_inclusive() + } +} + +impl<'a, P> FusedIterator for SplitInclusive<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct SplitN<'a, P> { + inner: SplitHelper<'a, P>, + count: usize, +} + +impl<'a, P> SplitN<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P, count: usize) -> Self { + SplitN { + inner: SplitHelper::new(haystack, pat, true), + count, + } + } +} + +impl<'a, P> Iterator for SplitN<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + match self.count { + 0 => None, + 1 => { + self.count = 0; + self.inner.get_end() + } + _ => { + self.count -= 1; + self.inner.next() + } + } + } +} + +impl<'a, P> FusedIterator for SplitN<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct RSplitN<'a, P> { + inner: SplitHelper<'a, P>, + count: usize, +} + +impl<'a, P> RSplitN<'a, P> +where + P: JavaStrPattern, +{ + #[inline] + pub(crate) fn new(haystack: &'a JavaStr, pat: P, count: usize) -> Self { + RSplitN { + inner: SplitHelper::new(haystack, pat, true), + count, + } + } +} + +impl<'a, P> Iterator for RSplitN<'a, P> +where + P: JavaStrPattern, +{ + type Item = &'a JavaStr; + + #[inline] + fn next(&mut self) -> Option { + match self.count { + 0 => None, + 1 => { + self.count = 0; + self.inner.get_end() + } + _ => { + self.count -= 1; + self.inner.next_back() + } + } + } +} + +impl<'a, P> FusedIterator for RSplitN<'a, P> where P: JavaStrPattern {} + +#[derive(Clone, Debug)] +pub struct SplitAsciiWhitespace<'a> { + #[allow(clippy::type_complexity)] + pub(crate) inner: Map< + Filter bool>, fn(&&[u8]) -> bool>, + fn(&[u8]) -> &JavaStr, + >, +} +delegate!(Iterator for SplitAsciiWhitespace<'a> => &'a JavaStr); +delegate!(DoubleEndedIterator for SplitAsciiWhitespace<'a>); +delegate!(FusedIterator for SplitAsciiWhitespace<'a>); + +#[derive(Clone, Debug)] +pub struct SplitWhitespace<'a> { + #[allow(clippy::type_complexity)] + pub(crate) inner: Filter bool>, fn(&&JavaStr) -> bool>, +} +delegate!(Iterator for SplitWhitespace<'a> => &'a JavaStr); +delegate!(DoubleEndedIterator for SplitWhitespace<'a>); +delegate!(FusedIterator for SplitWhitespace<'a>); diff --git a/vendor/valence/crates/java_string/src/lib.rs b/vendor/valence/crates/java_string/src/lib.rs new file mode 100644 index 00000000..18e658af --- /dev/null +++ b/vendor/valence/crates/java_string/src/lib.rs @@ -0,0 +1,26 @@ +#![doc = include_str!("../README.md")] + +mod cesu8; +mod char; +mod error; +mod iter; +mod owned; +mod pattern; +#[cfg(feature = "serde")] +mod serde; +mod slice; +pub(crate) mod validations; + +pub use char::*; +pub use error::*; +pub use iter::*; +pub use owned::*; +pub use pattern::*; +pub use slice::*; + +#[macro_export] +macro_rules! format_java { + ($($arg:tt)*) => { + $crate::JavaString::from(::std::format!($($arg)*)) + } +} diff --git a/vendor/valence/crates/java_string/src/owned.rs b/vendor/valence/crates/java_string/src/owned.rs new file mode 100644 index 00000000..3cda2b23 --- /dev/null +++ b/vendor/valence/crates/java_string/src/owned.rs @@ -0,0 +1,1401 @@ +use std::borrow::{Borrow, BorrowMut, Cow}; +use std::collections::{Bound, TryReserveError}; +use std::convert::Infallible; +use std::fmt::{Debug, Display, Formatter, Write}; +use std::hash::{Hash, Hasher}; +use std::iter::FusedIterator; +use std::ops::{ + Add, AddAssign, Deref, DerefMut, Index, IndexMut, Range, RangeBounds, RangeFrom, RangeFull, + RangeInclusive, RangeTo, RangeToInclusive, +}; +use std::rc::Rc; +use std::str::FromStr; +use std::sync::Arc; +use std::{ptr, slice}; + +use crate::validations::{ + run_utf8_full_validation_from_semi, run_utf8_semi_validation, to_range_checked, +}; +use crate::{Chars, FromUtf8Error, JavaCodePoint, JavaStr, Utf8Error}; + +#[derive(Default, PartialEq, PartialOrd, Eq, Ord)] +pub struct JavaString { + vec: Vec, +} + +impl JavaString { + #[inline] + #[must_use] + pub const fn new() -> JavaString { + JavaString { vec: Vec::new() } + } + + #[inline] + #[must_use] + pub fn with_capacity(capacity: usize) -> JavaString { + JavaString { + vec: Vec::with_capacity(capacity), + } + } + + /// Converts `vec` to a `JavaString` if it is fully-valid UTF-8, i.e. UTF-8 + /// without surrogate code points. See [`String::from_utf8`]. + #[inline] + pub fn from_full_utf8(vec: Vec) -> Result { + match std::str::from_utf8(&vec) { + Ok(..) => Ok(JavaString { vec }), + Err(e) => Err(FromUtf8Error { + bytes: vec, + error: e.into(), + }), + } + } + + /// Converts `vec` to a `JavaString` if it is semi-valid UTF-8, i.e. UTF-8 + /// with surrogate code points. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaString}; + /// + /// assert_eq!( + /// JavaString::from_semi_utf8(b"Hello World!".to_vec()).unwrap(), + /// "Hello World!" + /// ); + /// assert_eq!( + /// JavaString::from_semi_utf8(vec![0xf0, 0x9f, 0x92, 0x96]).unwrap(), + /// "💖" + /// ); + /// assert_eq!( + /// JavaString::from_semi_utf8(vec![0xed, 0xa0, 0x80]).unwrap(), + /// JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()) + /// ); + /// assert!(JavaString::from_semi_utf8(vec![0xed]).is_err()); + /// ``` + pub fn from_semi_utf8(vec: Vec) -> Result { + match run_utf8_semi_validation(&vec) { + Ok(..) => Ok(JavaString { vec }), + Err(err) => Err(FromUtf8Error { + bytes: vec, + error: err, + }), + } + } + + /// Converts `v` to a `Cow`, replacing invalid semi-UTF-8 with the + /// replacement character �. + /// + /// ``` + /// # use std::borrow::Cow; + /// # use java_string::{JavaStr, JavaString}; + /// + /// let sparkle_heart = [0xf0, 0x9f, 0x92, 0x96]; + /// let result = JavaString::from_semi_utf8_lossy(&sparkle_heart); + /// assert!(matches!(result, Cow::Borrowed(_))); + /// assert_eq!(result, JavaStr::from_str("💖")); + /// + /// let foobar_with_error = [b'f', b'o', b'o', 0xed, b'b', b'a', b'r']; + /// let result = JavaString::from_semi_utf8_lossy(&foobar_with_error); + /// assert!(matches!(result, Cow::Owned(_))); + /// assert_eq!(result, JavaStr::from_str("foo�bar")); + /// ``` + #[must_use] + pub fn from_semi_utf8_lossy(v: &[u8]) -> Cow<'_, JavaStr> { + const REPLACEMENT: &str = "\u{FFFD}"; + + match run_utf8_semi_validation(v) { + Ok(()) => unsafe { + // SAFETY: validation succeeded + Cow::Borrowed(JavaStr::from_semi_utf8_unchecked(v)) + }, + Err(error) => { + let mut result = unsafe { + // SAFETY: validation succeeded up to this index + JavaString::from_semi_utf8_unchecked( + v.get_unchecked(..error.valid_up_to).to_vec(), + ) + }; + result.push_str(REPLACEMENT); + let mut index = error.valid_up_to + error.error_len.unwrap_or(1) as usize; + loop { + match run_utf8_semi_validation(&v[index..]) { + Ok(()) => { + unsafe { + // SAFETY: validation succeeded + result + .push_java_str(JavaStr::from_semi_utf8_unchecked(&v[index..])); + } + return Cow::Owned(result); + } + Err(error) => { + unsafe { + // SAFETY: validation succeeded up to this index + result.push_java_str(JavaStr::from_semi_utf8_unchecked( + v.get_unchecked(index..index + error.valid_up_to), + )); + } + result.push_str(REPLACEMENT); + index += error.valid_up_to + error.error_len.unwrap_or(1) as usize; + } + } + } + } + } + } + + /// # Safety + /// + /// The parameter must be in semi-valid UTF-8 format, that is, UTF-8 plus + /// surrogate code points. + #[inline] + #[must_use] + pub unsafe fn from_semi_utf8_unchecked(bytes: Vec) -> JavaString { + JavaString { vec: bytes } + } + + /// See [`String::into_bytes`]. + #[inline] + #[must_use] + pub fn into_bytes(self) -> Vec { + self.vec + } + + /// See [`String::as_str`]. + #[inline] + #[must_use] + pub fn as_java_str(&self) -> &JavaStr { + unsafe { + // SAFETY: this str has semi-valid UTF-8 + JavaStr::from_semi_utf8_unchecked(&self.vec) + } + } + + /// See [`String::as_mut_str`]. + #[inline] + #[must_use] + pub fn as_mut_java_str(&mut self) -> &mut JavaStr { + unsafe { + // SAFETY: this str has semi-valid UTF-8 + JavaStr::from_semi_utf8_unchecked_mut(&mut self.vec) + } + } + + /// Tries to convert this `JavaString` to a `String`, returning an error if + /// it is not fully valid UTF-8, i.e. has no surrogate code points. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaString}; + /// + /// assert_eq!( + /// JavaString::from("Hello World!").into_string().unwrap(), + /// "Hello World!" + /// ); + /// assert_eq!( + /// JavaString::from("abc\0ℝ💣").into_string().unwrap(), + /// "abc\0ℝ💣" + /// ); + /// + /// let string_with_error = JavaString::from("abc") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str(); + /// assert!(string_with_error.into_string().is_err()); + /// ``` + pub fn into_string(self) -> Result { + run_utf8_full_validation_from_semi(self.as_bytes()).map(|_| unsafe { + // SAFETY: validation succeeded + self.into_string_unchecked() + }) + } + + /// # Safety + /// + /// This string must be fully valid UTF-8, i.e. have no surrogate code + /// points. + #[inline] + #[must_use] + pub unsafe fn into_string_unchecked(self) -> String { + // SAFETY: preconditions checked by caller + unsafe { String::from_utf8_unchecked(self.vec) } + } + + /// See [`String::push_str`]. + #[inline] + pub fn push_java_str(&mut self, string: &JavaStr) { + self.vec.extend_from_slice(string.as_bytes()) + } + + /// See [`String::push_str`]. + #[inline] + pub fn push_str(&mut self, string: &str) { + self.vec.extend_from_slice(string.as_bytes()) + } + + /// See [`String::capacity`]. + #[inline] + #[must_use] + pub fn capacity(&self) -> usize { + self.vec.capacity() + } + + /// See [`String::reserve`]. + #[inline] + pub fn reserve(&mut self, additional: usize) { + self.vec.reserve(additional) + } + + /// See [`String::reserve_exact`]. + #[inline] + pub fn reserve_exact(&mut self, additional: usize) { + self.vec.reserve_exact(additional) + } + + /// See [`String::try_reserve`]. + #[inline] + pub fn try_reserve(&mut self, additional: usize) -> Result<(), TryReserveError> { + self.vec.try_reserve(additional) + } + + /// See [`String::try_reserve_exact`]. + #[inline] + pub fn try_reserve_exact(&mut self, additional: usize) -> Result<(), TryReserveError> { + self.vec.try_reserve_exact(additional) + } + + /// See [`String::shrink_to_fit`]. + #[inline] + pub fn shrink_to_fit(&mut self) { + self.vec.shrink_to_fit() + } + + /// See [`String::shrink_to`]. + #[inline] + pub fn shrink_to(&mut self, min_capacity: usize) { + self.vec.shrink_to(min_capacity) + } + + /// See [`String::push`]. + #[inline] + pub fn push(&mut self, ch: char) { + match ch.len_utf8() { + 1 => self.vec.push(ch as u8), + _ => self + .vec + .extend_from_slice(ch.encode_utf8(&mut [0; 4]).as_bytes()), + } + } + + /// See [`String::push`]. + #[inline] + pub fn push_java(&mut self, ch: JavaCodePoint) { + match ch.len_utf8() { + 1 => self.vec.push(ch.as_u32() as u8), + _ => self.vec.extend_from_slice(ch.encode_semi_utf8(&mut [0; 4])), + } + } + + /// See [`String::as_bytes`]. + #[inline] + #[must_use] + pub fn as_bytes(&self) -> &[u8] { + &self.vec + } + + /// See [`String::truncate`]. + #[inline] + pub fn truncate(&mut self, new_len: usize) { + if new_len <= self.len() { + assert!(self.is_char_boundary(new_len)); + self.vec.truncate(new_len) + } + } + + /// See [`String::pop`]. + /// + /// ``` + /// # use java_string::JavaString; + /// + /// let mut str = JavaString::from("Hello World!"); + /// assert_eq!(str.pop().unwrap(), '!'); + /// assert_eq!(str, "Hello World"); + /// + /// let mut str = JavaString::from("東京"); + /// assert_eq!(str.pop().unwrap(), '京'); + /// assert_eq!(str, "東"); + /// + /// assert!(JavaString::new().pop().is_none()); + /// ``` + #[inline] + pub fn pop(&mut self) -> Option { + let ch = self.chars().next_back()?; + let newlen = self.len() - ch.len_utf8(); + unsafe { + self.vec.set_len(newlen); + } + Some(ch) + } + + /// See [`String::remove`]. + /// + /// ``` + /// # use java_string::JavaString; + /// + /// let mut str = JavaString::from("Hello World!"); + /// assert_eq!(str.remove(5), ' '); + /// assert_eq!(str, "HelloWorld!"); + /// + /// let mut str = JavaString::from("Hello 🦀 World!"); + /// assert_eq!(str.remove(6), '🦀'); + /// assert_eq!(str, "Hello World!"); + /// ``` + /// ```should_panic + /// # use java_string::JavaString; + /// // Should panic + /// JavaString::new().remove(0); + /// ``` + /// ```should_panic + /// # use java_string::JavaString; + /// // Should panic + /// JavaString::from("🦀").remove(1); + /// ``` + #[inline] + pub fn remove(&mut self, idx: usize) -> JavaCodePoint { + let ch = match self[idx..].chars().next() { + Some(ch) => ch, + None => panic!("cannot remove a char from the end of a string"), + }; + + let next = idx + ch.len_utf8(); + let len = self.len(); + unsafe { + ptr::copy( + self.vec.as_ptr().add(next), + self.vec.as_mut_ptr().add(idx), + len - next, + ); + self.vec.set_len(len - (next - idx)); + } + ch + } + + /// See [`String::retain`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaString}; + /// + /// let mut str = JavaString::from("Hello 🦀 World!"); + /// str.retain(|ch| !ch.is_ascii_uppercase()); + /// assert_eq!(str, "ello 🦀 orld!"); + /// str.retain(JavaCodePoint::is_ascii); + /// assert_eq!(str, "ello orld!"); + /// ``` + #[inline] + pub fn retain(&mut self, mut f: F) + where + F: FnMut(JavaCodePoint) -> bool, + { + struct SetLenOnDrop<'a> { + s: &'a mut JavaString, + idx: usize, + del_bytes: usize, + } + + impl<'a> Drop for SetLenOnDrop<'a> { + #[inline] + fn drop(&mut self) { + let new_len = self.idx - self.del_bytes; + debug_assert!(new_len <= self.s.len()); + unsafe { self.s.vec.set_len(new_len) }; + } + } + + let len = self.len(); + let mut guard = SetLenOnDrop { + s: self, + idx: 0, + del_bytes: 0, + }; + + while guard.idx < len { + // SAFETY: `guard.idx` is positive-or-zero and less that len so the + // `get_unchecked` is in bound. `self` is valid UTF-8 like string + // and the returned slice starts at a unicode code point so the + // `Chars` always return one character. + let ch = unsafe { + guard + .s + .get_unchecked(guard.idx..len) + .chars() + .next() + .unwrap_unchecked() + }; + let ch_len = ch.len_utf8(); + + if !f(ch) { + guard.del_bytes += ch_len; + } else if guard.del_bytes > 0 { + // SAFETY: `guard.idx` is in bound and `guard.del_bytes` represent the number of + // bytes that are erased from the string so the resulting `guard.idx - + // guard.del_bytes` always represent a valid unicode code point. + // + // `guard.del_bytes` >= `ch.len_utf8()`, so taking a slice with `ch.len_utf8()` + // len is safe. + ch.encode_semi_utf8(unsafe { + slice::from_raw_parts_mut( + guard.s.as_mut_ptr().add(guard.idx - guard.del_bytes), + ch.len_utf8(), + ) + }); + } + + // Point idx to the next char + guard.idx += ch_len; + } + + drop(guard); + } + + /// See [`String::insert`]. + /// + /// ``` + /// # use java_string::JavaString; + /// let mut s = JavaString::from("foo"); + /// s.insert(3, 'a'); + /// s.insert(4, 'r'); + /// s.insert(3, 'b'); + /// assert_eq!(s, "foobar"); + /// ``` + #[inline] + pub fn insert(&mut self, idx: usize, ch: char) { + assert!(self.is_char_boundary(idx)); + let mut bits = [0; 4]; + let bits = ch.encode_utf8(&mut bits).as_bytes(); + + unsafe { + self.insert_bytes(idx, bits); + } + } + + /// See [`String::insert`]. + #[inline] + pub fn insert_java(&mut self, idx: usize, ch: JavaCodePoint) { + assert!(self.is_char_boundary(idx)); + let mut bits = [0; 4]; + let bits = ch.encode_semi_utf8(&mut bits); + + unsafe { + self.insert_bytes(idx, bits); + } + } + + #[inline] + unsafe fn insert_bytes(&mut self, idx: usize, bytes: &[u8]) { + let len = self.len(); + let amt = bytes.len(); + self.vec.reserve(amt); + + unsafe { + ptr::copy( + self.vec.as_ptr().add(idx), + self.vec.as_mut_ptr().add(idx + amt), + len - idx, + ); + ptr::copy_nonoverlapping(bytes.as_ptr(), self.vec.as_mut_ptr().add(idx), amt); + self.vec.set_len(len + amt); + } + } + + /// See [`String::insert_str`]. + /// + /// ``` + /// # use java_string::JavaString; + /// let mut s = JavaString::from("bar"); + /// s.insert_str(0, "foo"); + /// assert_eq!(s, "foobar"); + /// ``` + #[inline] + pub fn insert_str(&mut self, idx: usize, string: &str) { + assert!(self.is_char_boundary(idx)); + + unsafe { + self.insert_bytes(idx, string.as_bytes()); + } + } + + /// See [`String::insert_str`]. + pub fn insert_java_str(&mut self, idx: usize, string: &JavaStr) { + assert!(self.is_char_boundary(idx)); + + unsafe { + self.insert_bytes(idx, string.as_bytes()); + } + } + + /// See [`String::as_mut_vec`]. + /// + /// # Safety + /// + /// The returned `Vec` must not have invalid UTF-8 written to it, besides + /// surrogate pairs. + #[inline] + pub unsafe fn as_mut_vec(&mut self) -> &mut Vec { + &mut self.vec + } + + /// See [`String::len`]. + #[inline] + #[must_use] + pub fn len(&self) -> usize { + self.vec.len() + } + + /// See [`String::is_empty`]. + #[inline] + #[must_use] + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + /// See [`String::split_off`]. + /// + /// ``` + /// # use java_string::JavaString; + /// let mut hello = JavaString::from("Hello World!"); + /// let world = hello.split_off(6); + /// assert_eq!(hello, "Hello "); + /// assert_eq!(world, "World!"); + /// ``` + /// ```should_panic + /// # use java_string::JavaString; + /// let mut s = JavaString::from("🦀"); + /// // Should panic + /// let _ = s.split_off(1); + /// ``` + #[inline] + #[must_use] + pub fn split_off(&mut self, at: usize) -> JavaString { + assert!(self.is_char_boundary(at)); + let other = self.vec.split_off(at); + unsafe { JavaString::from_semi_utf8_unchecked(other) } + } + + /// See [`String::clear`]. + #[inline] + pub fn clear(&mut self) { + self.vec.clear(); + } + + /// See [`String::drain`]. + /// + /// ``` + /// # use java_string::JavaString; + /// + /// let mut s = JavaString::from("α is alpha, β is beta"); + /// let beta_offset = s.find('β').unwrap_or(s.len()); + /// + /// // Remove the range up until the β from the string + /// let t: JavaString = s.drain(..beta_offset).collect(); + /// assert_eq!(t, "α is alpha, "); + /// assert_eq!(s, "β is beta"); + /// + /// // A full range clears the string, like `clear()` does + /// s.drain(..); + /// assert_eq!(s, ""); + /// ``` + #[inline] + pub fn drain(&mut self, range: R) -> Drain<'_> + where + R: RangeBounds, + { + // Memory safety: see String::drain + let Range { start, end } = to_range_checked(range, ..self.len()); + assert!(self.is_char_boundary(start)); + assert!(self.is_char_boundary(end)); + + // Take out two simultaneous borrows. The &mut String won't be accessed + // until iteration is over, in Drop. + let self_ptr = self as *mut _; + // SAFETY: `to_range_checked` and `is_char_boundary` do the appropriate bounds + // checks. + let chars_iter = unsafe { self.get_unchecked(start..end) }.chars(); + + Drain { + start, + end, + iter: chars_iter, + string: self_ptr, + } + } + + /// See [`String::replace_range`]. + /// + /// ``` + /// # use java_string::JavaString; + /// + /// let mut s = JavaString::from("α is alpha, β is beta"); + /// let beta_offset = s.find('β').unwrap_or(s.len()); + /// + /// // Replace the range up until the β from the string + /// s.replace_range(..beta_offset, "Α is capital alpha; "); + /// assert_eq!(s, "Α is capital alpha; β is beta"); + /// ``` + /// ```should_panic + /// # use java_string::JavaString; + /// let mut s = JavaString::from("α is alpha, β is beta"); + /// // Should panic + /// s.replace_range(..1, "Α is capital alpha; "); + /// ``` + pub fn replace_range(&mut self, range: R, replace_with: &str) + where + R: RangeBounds, + { + self.replace_range_java(range, JavaStr::from_str(replace_with)) + } + + /// See [`String::replace_range`]. + pub fn replace_range_java(&mut self, range: R, replace_with: &JavaStr) + where + R: RangeBounds, + { + let start = range.start_bound(); + match start { + Bound::Included(&n) => assert!(self.is_char_boundary(n)), + Bound::Excluded(&n) => assert!(self.is_char_boundary(n + 1)), + Bound::Unbounded => {} + }; + let end = range.end_bound(); + match end { + Bound::Included(&n) => assert!(self.is_char_boundary(n + 1)), + Bound::Excluded(&n) => assert!(self.is_char_boundary(n)), + Bound::Unbounded => {} + }; + + unsafe { self.as_mut_vec() }.splice((start, end), replace_with.bytes()); + } + + /// See [`String::into_boxed_str`]. + #[inline] + #[must_use] + pub fn into_boxed_str(self) -> Box { + let slice = self.vec.into_boxed_slice(); + unsafe { JavaStr::from_boxed_semi_utf8_unchecked(slice) } + } + + /// See [`String::leak`]. + #[inline] + pub fn leak<'a>(self) -> &'a mut JavaStr { + let slice = self.vec.leak(); + unsafe { JavaStr::from_semi_utf8_unchecked_mut(slice) } + } +} + +impl Add<&str> for JavaString { + type Output = JavaString; + + #[inline] + fn add(mut self, rhs: &str) -> Self::Output { + self.push_str(rhs); + self + } +} + +impl Add<&JavaStr> for JavaString { + type Output = JavaString; + + #[inline] + fn add(mut self, rhs: &JavaStr) -> Self::Output { + self.push_java_str(rhs); + self + } +} + +impl AddAssign<&str> for JavaString { + #[inline] + fn add_assign(&mut self, rhs: &str) { + self.push_str(rhs); + } +} + +impl AddAssign<&JavaStr> for JavaString { + #[inline] + fn add_assign(&mut self, rhs: &JavaStr) { + self.push_java_str(rhs); + } +} + +impl AsMut for JavaString { + #[inline] + fn as_mut(&mut self) -> &mut JavaStr { + self.as_mut_java_str() + } +} + +impl AsRef<[u8]> for JavaString { + #[inline] + fn as_ref(&self) -> &[u8] { + self.as_bytes() + } +} + +impl AsRef for JavaString { + #[inline] + fn as_ref(&self) -> &JavaStr { + self.as_java_str() + } +} + +impl Borrow for JavaString { + #[inline] + fn borrow(&self) -> &JavaStr { + self.as_java_str() + } +} + +impl BorrowMut for JavaString { + #[inline] + fn borrow_mut(&mut self) -> &mut JavaStr { + self.as_mut_java_str() + } +} + +impl Clone for JavaString { + #[inline] + fn clone(&self) -> Self { + JavaString { + vec: self.vec.clone(), + } + } + + #[inline] + fn clone_from(&mut self, source: &Self) { + self.vec.clone_from(&source.vec) + } +} + +impl Debug for JavaString { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + Debug::fmt(&**self, f) + } +} + +impl Deref for JavaString { + type Target = JavaStr; + + #[inline] + fn deref(&self) -> &Self::Target { + self.as_java_str() + } +} + +impl DerefMut for JavaString { + #[inline] + fn deref_mut(&mut self) -> &mut Self::Target { + self.as_mut_java_str() + } +} + +impl Display for JavaString { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + Display::fmt(&**self, f) + } +} + +impl Extend for JavaString { + fn extend>(&mut self, iter: T) { + let iterator = iter.into_iter(); + let (lower_bound, _) = iterator.size_hint(); + self.reserve(lower_bound); + iterator.for_each(move |c| self.push(c)); + } +} + +impl Extend for JavaString { + fn extend>(&mut self, iter: T) { + let iterator = iter.into_iter(); + let (lower_bound, _) = iterator.size_hint(); + self.reserve(lower_bound); + iterator.for_each(move |c| self.push_java(c)); + } +} + +impl Extend for JavaString { + fn extend>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_str(&s)); + } +} + +impl Extend for JavaString { + fn extend>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_java_str(&s)); + } +} + +impl<'a> Extend<&'a char> for JavaString { + fn extend>(&mut self, iter: T) { + self.extend(iter.into_iter().cloned()) + } +} + +impl<'a> Extend<&'a JavaCodePoint> for JavaString { + fn extend>(&mut self, iter: T) { + self.extend(iter.into_iter().cloned()) + } +} + +impl<'a> Extend<&'a str> for JavaString { + fn extend>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_str(s)); + } +} + +impl<'a> Extend<&'a JavaStr> for JavaString { + fn extend>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_java_str(s)); + } +} + +impl Extend> for JavaString { + fn extend>>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_str(&s)); + } +} + +impl Extend> for JavaString { + fn extend>>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_java_str(&s)); + } +} + +impl<'a> Extend> for JavaString { + fn extend>>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_str(&s)); + } +} + +impl<'a> Extend> for JavaString { + fn extend>>(&mut self, iter: T) { + iter.into_iter().for_each(move |s| self.push_java_str(&s)); + } +} + +impl From for JavaString { + #[inline] + fn from(value: String) -> Self { + unsafe { + // SAFETY: value is valid UTF-8 + JavaString::from_semi_utf8_unchecked(value.into_bytes()) + } + } +} + +impl From<&String> for JavaString { + #[inline] + fn from(value: &String) -> Self { + Self::from(value.clone()) + } +} + +impl From<&JavaString> for JavaString { + #[inline] + fn from(value: &JavaString) -> Self { + value.clone() + } +} + +impl From<&mut str> for JavaString { + #[inline] + fn from(value: &mut str) -> Self { + Self::from(&*value) + } +} + +impl From<&str> for JavaString { + #[inline] + fn from(value: &str) -> Self { + Self::from(value.to_owned()) + } +} + +impl From<&mut JavaStr> for JavaString { + #[inline] + fn from(value: &mut JavaStr) -> Self { + Self::from(&*value) + } +} + +impl From<&JavaStr> for JavaString { + #[inline] + fn from(value: &JavaStr) -> Self { + value.to_owned() + } +} + +impl From> for JavaString { + #[inline] + fn from(value: Box) -> Self { + Self::from(value.into_string()) + } +} + +impl From> for JavaString { + #[inline] + fn from(value: Box) -> Self { + value.into_string() + } +} + +impl<'a> From> for JavaString { + #[inline] + fn from(value: Cow<'a, str>) -> Self { + Self::from(value.into_owned()) + } +} + +impl<'a> From> for JavaString { + #[inline] + fn from(value: Cow<'a, JavaStr>) -> Self { + value.into_owned() + } +} + +impl From for Arc { + #[inline] + fn from(value: JavaString) -> Self { + Arc::from(&value[..]) + } +} + +impl<'a> From for Cow<'a, JavaStr> { + #[inline] + fn from(value: JavaString) -> Self { + Cow::Owned(value) + } +} + +impl From for Rc { + #[inline] + fn from(value: JavaString) -> Self { + Rc::from(&value[..]) + } +} + +impl From for Vec { + #[inline] + fn from(value: JavaString) -> Self { + value.into_bytes() + } +} + +impl From for JavaString { + #[inline] + fn from(value: char) -> Self { + Self::from(value.encode_utf8(&mut [0; 4])) + } +} + +impl From for JavaString { + #[inline] + fn from(value: JavaCodePoint) -> Self { + unsafe { + // SAFETY: we're encoding into semi-valid UTF-8 + JavaString::from_semi_utf8_unchecked(value.encode_semi_utf8(&mut [0; 4]).to_vec()) + } + } +} + +impl FromIterator for JavaString { + #[inline] + fn from_iter>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl<'a> FromIterator<&'a char> for JavaString { + #[inline] + fn from_iter>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl FromIterator for JavaString { + #[inline] + fn from_iter>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl<'a> FromIterator<&'a JavaCodePoint> for JavaString { + #[inline] + fn from_iter>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl<'a> FromIterator<&'a str> for JavaString { + #[inline] + fn from_iter>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl FromIterator for JavaString { + fn from_iter>(iter: T) -> Self { + let mut iterator = iter.into_iter(); + + match iterator.next() { + None => JavaString::new(), + Some(buf) => { + let mut buf = JavaString::from(buf); + buf.extend(iterator); + buf + } + } + } +} + +impl FromIterator for JavaString { + fn from_iter>(iter: T) -> Self { + let mut iterator = iter.into_iter(); + + match iterator.next() { + None => JavaString::new(), + Some(mut buf) => { + buf.extend(iterator); + buf + } + } + } +} + +impl FromIterator> for JavaString { + #[inline] + fn from_iter>>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl FromIterator> for JavaString { + #[inline] + fn from_iter>>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl<'a> FromIterator> for JavaString { + #[inline] + fn from_iter>>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl<'a> FromIterator> for JavaString { + #[inline] + fn from_iter>>(iter: T) -> Self { + let mut buf = JavaString::new(); + buf.extend(iter); + buf + } +} + +impl FromStr for JavaString { + type Err = Infallible; + + #[inline] + fn from_str(s: &str) -> Result { + Ok(Self::from(s)) + } +} + +impl Hash for JavaString { + #[inline] + fn hash(&self, state: &mut H) { + (**self).hash(state) + } +} + +impl Index> for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, index: Range) -> &Self::Output { + &self[..][index] + } +} + +impl Index> for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, index: RangeFrom) -> &Self::Output { + &self[..][index] + } +} + +impl Index for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, _index: RangeFull) -> &Self::Output { + self.as_java_str() + } +} + +impl Index> for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, index: RangeInclusive) -> &Self::Output { + &self[..][index] + } +} + +impl Index> for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, index: RangeTo) -> &Self::Output { + &self[..][index] + } +} + +impl Index> for JavaString { + type Output = JavaStr; + + #[inline] + fn index(&self, index: RangeToInclusive) -> &Self::Output { + &self[..][index] + } +} + +impl IndexMut> for JavaString { + #[inline] + fn index_mut(&mut self, index: Range) -> &mut Self::Output { + &mut self[..][index] + } +} + +impl IndexMut> for JavaString { + #[inline] + fn index_mut(&mut self, index: RangeFrom) -> &mut Self::Output { + &mut self[..][index] + } +} + +impl IndexMut for JavaString { + #[inline] + fn index_mut(&mut self, _index: RangeFull) -> &mut Self::Output { + self.as_mut_java_str() + } +} + +impl IndexMut> for JavaString { + #[inline] + fn index_mut(&mut self, index: RangeInclusive) -> &mut Self::Output { + &mut self[..][index] + } +} + +impl IndexMut> for JavaString { + #[inline] + fn index_mut(&mut self, index: RangeTo) -> &mut Self::Output { + &mut self[..][index] + } +} + +impl IndexMut> for JavaString { + #[inline] + fn index_mut(&mut self, index: RangeToInclusive) -> &mut Self::Output { + &mut self[..][index] + } +} + +impl PartialEq for JavaString { + #[inline] + fn eq(&self, other: &str) -> bool { + self[..] == other + } +} + +impl PartialEq for str { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + self == other[..] + } +} + +impl<'a> PartialEq<&'a str> for JavaString { + #[inline] + fn eq(&self, other: &&'a str) -> bool { + self == *other + } +} + +impl PartialEq for &str { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + *self == other + } +} + +impl PartialEq for JavaString { + #[inline] + fn eq(&self, other: &String) -> bool { + &self[..] == other + } +} + +impl PartialEq for String { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + self == &other[..] + } +} + +impl PartialEq for JavaString { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + self[..] == other + } +} + +impl<'a> PartialEq<&'a JavaStr> for JavaString { + #[inline] + fn eq(&self, other: &&'a JavaStr) -> bool { + self == *other + } +} + +impl<'a> PartialEq> for JavaString { + #[inline] + fn eq(&self, other: &Cow<'a, str>) -> bool { + &self[..] == other + } +} + +impl<'a> PartialEq for Cow<'a, str> { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + self == &other[..] + } +} + +impl<'a> PartialEq> for JavaString { + #[inline] + fn eq(&self, other: &Cow<'a, JavaStr>) -> bool { + &self[..] == other + } +} + +impl<'a> PartialEq for Cow<'a, JavaStr> { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + self == &other[..] + } +} + +impl Write for JavaString { + #[inline] + fn write_str(&mut self, s: &str) -> std::fmt::Result { + self.push_str(s); + Ok(()) + } + + #[inline] + fn write_char(&mut self, c: char) -> std::fmt::Result { + self.push(c); + Ok(()) + } +} + +pub struct Drain<'a> { + string: *mut JavaString, + start: usize, + end: usize, + iter: Chars<'a>, +} + +impl Debug for Drain<'_> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("Drain").field(&self.as_str()).finish() + } +} + +unsafe impl Sync for Drain<'_> {} +unsafe impl Send for Drain<'_> {} + +impl Drop for Drain<'_> { + #[inline] + fn drop(&mut self) { + unsafe { + // Use Vec::drain. "Reaffirm" the bounds checks to avoid + // panic code being inserted again. + let self_vec = (*self.string).as_mut_vec(); + if self.start <= self.end && self.end <= self_vec.len() { + self_vec.drain(self.start..self.end); + } + } + } +} + +impl AsRef for Drain<'_> { + #[inline] + fn as_ref(&self) -> &JavaStr { + self.as_str() + } +} + +impl AsRef<[u8]> for Drain<'_> { + #[inline] + fn as_ref(&self) -> &[u8] { + self.as_str().as_bytes() + } +} + +impl Drain<'_> { + #[inline] + #[must_use] + pub fn as_str(&self) -> &JavaStr { + self.iter.as_str() + } +} + +impl Iterator for Drain<'_> { + type Item = JavaCodePoint; + + #[inline] + fn next(&mut self) -> Option { + self.iter.next() + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + self.iter.size_hint() + } + + #[inline] + fn last(mut self) -> Option { + self.next_back() + } +} + +impl DoubleEndedIterator for Drain<'_> { + #[inline] + fn next_back(&mut self) -> Option { + self.iter.next_back() + } +} + +impl FusedIterator for Drain<'_> {} diff --git a/vendor/valence/crates/java_string/src/pattern.rs b/vendor/valence/crates/java_string/src/pattern.rs new file mode 100644 index 00000000..b77daefa --- /dev/null +++ b/vendor/valence/crates/java_string/src/pattern.rs @@ -0,0 +1,394 @@ +use crate::{JavaCodePoint, JavaStr}; + +mod private_pattern { + use crate::{JavaCodePoint, JavaStr}; + + pub trait Sealed {} + + impl Sealed for char {} + impl Sealed for JavaCodePoint {} + impl Sealed for &str {} + impl Sealed for &JavaStr {} + impl Sealed for F where F: FnMut(JavaCodePoint) -> bool {} + impl Sealed for &[char] {} + impl Sealed for &[JavaCodePoint] {} + impl Sealed for &char {} + impl Sealed for &JavaCodePoint {} + impl Sealed for &&str {} + impl Sealed for &&JavaStr {} +} + +/// # Safety +/// +/// Methods in this trait must only return indexes that are on char boundaries +pub unsafe trait JavaStrPattern: private_pattern::Sealed { + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option; + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option; + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)>; + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)>; +} + +unsafe impl JavaStrPattern for char { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next()?; + if ch == *self { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next_back()?; + if ch == *self { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut encoded = [0; 4]; + let encoded = self.encode_utf8(&mut encoded).as_bytes(); + find(haystack.as_bytes(), encoded).map(|index| (index, encoded.len())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut encoded = [0; 4]; + let encoded = self.encode_utf8(&mut encoded).as_bytes(); + rfind(haystack.as_bytes(), encoded).map(|index| (index, encoded.len())) + } +} + +unsafe impl JavaStrPattern for JavaCodePoint { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next()?; + if ch == *self { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next_back()?; + if ch == *self { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut encoded = [0; 4]; + let encoded = self.encode_semi_utf8(&mut encoded); + find(haystack.as_bytes(), encoded).map(|index| (index, encoded.len())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut encoded = [0; 4]; + let encoded = self.encode_semi_utf8(&mut encoded); + rfind(haystack.as_bytes(), encoded).map(|index| (index, encoded.len())) + } +} + +unsafe impl JavaStrPattern for &str { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + if haystack.as_bytes().starts_with(self.as_bytes()) { + Some(self.len()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + if haystack.as_bytes().ends_with(self.as_bytes()) { + Some(self.len()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + find(haystack.as_bytes(), self.as_bytes()).map(|index| (index, self.len())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + rfind(haystack.as_bytes(), self.as_bytes()).map(|index| (index, self.len())) + } +} + +unsafe impl JavaStrPattern for &JavaStr { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + if haystack.as_bytes().starts_with(self.as_bytes()) { + Some(self.len()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + if haystack.as_bytes().ends_with(self.as_bytes()) { + Some(self.len()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + find(haystack.as_bytes(), self.as_bytes()).map(|index| (index, self.len())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + rfind(haystack.as_bytes(), self.as_bytes()).map(|index| (index, self.len())) + } +} + +unsafe impl JavaStrPattern for F +where + F: FnMut(JavaCodePoint) -> bool, +{ + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next()?; + if self(ch) { Some(ch.len_utf8()) } else { None } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next_back()?; + if self(ch) { Some(ch.len_utf8()) } else { None } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .find(|(_, ch)| self(*ch)) + .map(|(index, ch)| (index, ch.len_utf8())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .rfind(|(_, ch)| self(*ch)) + .map(|(index, ch)| (index, ch.len_utf8())) + } +} + +unsafe impl JavaStrPattern for &[char] { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next()?; + if self.iter().any(|c| ch == *c) { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next_back()?; + if self.iter().any(|c| ch == *c) { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .find(|(_, ch)| self.iter().any(|c| *ch == *c)) + .map(|(index, ch)| (index, ch.len_utf8())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .rfind(|(_, ch)| self.iter().any(|c| *ch == *c)) + .map(|(index, ch)| (index, ch.len_utf8())) + } +} + +unsafe impl JavaStrPattern for &[JavaCodePoint] { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next()?; + if self.contains(&ch) { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let ch = haystack.chars().next_back()?; + if self.contains(&ch) { + Some(ch.len_utf8()) + } else { + None + } + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .find(|(_, ch)| self.contains(ch)) + .map(|(index, ch)| (index, ch.len_utf8())) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + haystack + .char_indices() + .rfind(|(_, ch)| self.contains(ch)) + .map(|(index, ch)| (index, ch.len_utf8())) + } +} + +unsafe impl JavaStrPattern for &char { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut ch = **self; + ch.prefix_len_in(haystack) + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut ch = **self; + ch.suffix_len_in(haystack) + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut ch = **self; + ch.find_in(haystack) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut ch = **self; + ch.rfind_in(haystack) + } +} + +unsafe impl JavaStrPattern for &JavaCodePoint { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut ch = **self; + ch.prefix_len_in(haystack) + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut ch = **self; + ch.suffix_len_in(haystack) + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut ch = **self; + ch.find_in(haystack) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut ch = **self; + ch.rfind_in(haystack) + } +} + +unsafe impl JavaStrPattern for &&str { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut str = **self; + str.prefix_len_in(haystack) + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut str = **self; + str.suffix_len_in(haystack) + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut str = **self; + str.find_in(haystack) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut str = **self; + str.rfind_in(haystack) + } +} + +unsafe impl JavaStrPattern for &&JavaStr { + #[inline] + fn prefix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut str = **self; + str.prefix_len_in(haystack) + } + + #[inline] + fn suffix_len_in(&mut self, haystack: &JavaStr) -> Option { + let mut str = **self; + str.suffix_len_in(haystack) + } + + #[inline] + fn find_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut str = **self; + str.find_in(haystack) + } + + #[inline] + fn rfind_in(&mut self, haystack: &JavaStr) -> Option<(usize, usize)> { + let mut str = **self; + str.rfind_in(haystack) + } +} + +#[inline] +fn find(haystack: &[u8], needle: &[u8]) -> Option { + if needle.is_empty() { + return Some(0); + } + haystack + .windows(needle.len()) + .position(|window| window == needle) +} + +#[inline] +fn rfind(haystack: &[u8], needle: &[u8]) -> Option { + if needle.is_empty() { + return Some(haystack.len()); + } + haystack + .windows(needle.len()) + .rposition(|window| window == needle) +} diff --git a/vendor/valence/crates/java_string/src/serde.rs b/vendor/valence/crates/java_string/src/serde.rs new file mode 100644 index 00000000..e1c152d1 --- /dev/null +++ b/vendor/valence/crates/java_string/src/serde.rs @@ -0,0 +1,263 @@ +use std::fmt::Formatter; + +use serde::de::value::SeqAccessDeserializer; +use serde::de::{Error, SeqAccess, Unexpected, Visitor}; +use serde::ser::SerializeSeq; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +use crate::{JavaCodePoint, JavaStr, JavaString}; + +impl Serialize for JavaString { + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self.as_str() { + Ok(str) => str.serialize(serializer), + Err(_) => { + let mut seq = serializer.serialize_seq(None)?; + for ch in self.chars() { + seq.serialize_element(&ch.as_u32())?; + } + seq.end() + } + } + } +} + +impl<'de> Deserialize<'de> for JavaString { + #[inline] + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + deserializer.deserialize_any(JavaStringVisitor) + } +} + +struct JavaStringVisitor; + +impl<'de> Visitor<'de> for JavaStringVisitor { + type Value = JavaString; + + fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { + formatter.write_str("a JavaString") + } + + fn visit_str(self, v: &str) -> Result + where + E: Error, + { + Ok(JavaString::from(v)) + } + + fn visit_string(self, v: String) -> Result + where + E: Error, + { + Ok(JavaString::from(v)) + } + + fn visit_bytes(self, v: &[u8]) -> Result + where + E: Error, + { + match JavaStr::from_semi_utf8(v) { + Ok(str) => Ok(str.to_owned()), + Err(_) => Err(Error::invalid_value(Unexpected::Bytes(v), &self)), + } + } + + fn visit_byte_buf(self, v: Vec) -> Result + where + E: Error, + { + JavaString::from_semi_utf8(v) + .map_err(|err| Error::invalid_value(Unexpected::Bytes(&err.into_bytes()), &self)) + } + + fn visit_seq(self, seq: A) -> Result + where + A: SeqAccess<'de>, + { + let vec = Vec::::deserialize(SeqAccessDeserializer::new(seq))?; + JavaString::from_semi_utf8(vec).map_err(|_| Error::invalid_value(Unexpected::Seq, &self)) + } +} + +impl Serialize for JavaStr { + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self.as_str() { + Ok(str) => str.serialize(serializer), + Err(_) => { + let mut seq = serializer.serialize_seq(None)?; + for ch in self.chars() { + seq.serialize_element(&ch.as_u32())?; + } + seq.end() + } + } + } +} + +impl<'de: 'a, 'a> Deserialize<'de> for &'a JavaStr { + #[inline] + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + deserializer.deserialize_any(JavaStrVisitor) + } +} + +struct JavaStrVisitor; + +impl<'de> Visitor<'de> for JavaStrVisitor { + type Value = &'de JavaStr; + + fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { + formatter.write_str("a borrowed JavaStr") + } + + fn visit_borrowed_str(self, v: &'de str) -> Result + where + E: Error, + { + Ok(JavaStr::from_str(v)) + } + + fn visit_borrowed_bytes(self, v: &'de [u8]) -> Result + where + E: Error, + { + JavaStr::from_semi_utf8(v).map_err(|_| Error::invalid_value(Unexpected::Bytes(v), &self)) + } +} + +impl Serialize for JavaCodePoint { + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self.as_char() { + Some(ch) => ch.serialize(serializer), + None => self.as_u32().serialize(serializer), + } + } +} + +impl<'de> Deserialize<'de> for JavaCodePoint { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + deserializer.deserialize_any(JavaCodePointVisitor) + } +} + +struct JavaCodePointVisitor; + +impl<'de> Visitor<'de> for JavaCodePointVisitor { + type Value = JavaCodePoint; + + fn expecting(&self, formatter: &mut Formatter) -> std::fmt::Result { + formatter.write_str("a character") + } + + #[inline] + fn visit_i8(self, v: i8) -> Result + where + E: Error, + { + self.visit_i32(v as i32) + } + + #[inline] + fn visit_i16(self, v: i16) -> Result + where + E: Error, + { + self.visit_i32(v as i32) + } + + fn visit_i32(self, v: i32) -> Result + where + E: Error, + { + if v < 0 { + Err(Error::invalid_value(Unexpected::Signed(v as i64), &self)) + } else { + self.visit_u32(v as u32) + } + } + + fn visit_i64(self, v: i64) -> Result + where + E: Error, + { + if v < 0 { + Err(Error::invalid_value(Unexpected::Signed(v), &self)) + } else { + self.visit_u64(v as u64) + } + } + + #[inline] + fn visit_u8(self, v: u8) -> Result + where + E: Error, + { + self.visit_u32(v as u32) + } + + #[inline] + fn visit_u16(self, v: u16) -> Result + where + E: Error, + { + self.visit_u32(v as u32) + } + + fn visit_u32(self, v: u32) -> Result + where + E: Error, + { + JavaCodePoint::from_u32(v) + .ok_or_else(|| Error::invalid_value(Unexpected::Unsigned(v as u64), &self)) + } + + fn visit_u64(self, v: u64) -> Result + where + E: Error, + { + if v > u32::MAX as u64 { + Err(Error::invalid_value(Unexpected::Unsigned(v), &self)) + } else { + self.visit_u32(v as u32) + } + } + + fn visit_char(self, v: char) -> Result + where + E: Error, + { + Ok(JavaCodePoint::from_char(v)) + } + + fn visit_str(self, v: &str) -> Result + where + E: Error, + { + let mut iter = v.chars(); + match (iter.next(), iter.next()) { + (Some(c), None) => Ok(JavaCodePoint::from_char(c)), + _ => Err(Error::invalid_value(Unexpected::Str(v), &self)), + } + } +} diff --git a/vendor/valence/crates/java_string/src/slice.rs b/vendor/valence/crates/java_string/src/slice.rs new file mode 100644 index 00000000..aa65946c --- /dev/null +++ b/vendor/valence/crates/java_string/src/slice.rs @@ -0,0 +1,2267 @@ +use std::borrow::Cow; +use std::collections::Bound; +use std::fmt::{Debug, Display, Formatter, Write}; +use std::hash::{Hash, Hasher}; +use std::ops::{ + Add, AddAssign, Index, IndexMut, Range, RangeBounds, RangeFrom, RangeFull, RangeInclusive, + RangeTo, RangeToInclusive, +}; +use std::rc::Rc; +use std::str::FromStr; +use std::sync::Arc; +use std::{ptr, slice}; + +use crate::char::EscapeDebugExtArgs; +use crate::validations::{ + run_utf8_full_validation_from_semi, run_utf8_semi_validation, slice_error_fail, + str_end_index_overflow_fail, +}; +use crate::{ + Bytes, CharEscapeIter, CharIndices, Chars, EscapeDebug, EscapeDefault, EscapeUnicode, + JavaCodePoint, JavaStrPattern, JavaString, Lines, MatchIndices, Matches, ParseError, + RMatchIndices, RMatches, RSplit, RSplitN, RSplitTerminator, Split, SplitAsciiWhitespace, + SplitInclusive, SplitN, SplitTerminator, SplitWhitespace, Utf8Error, +}; + +#[repr(transparent)] +#[derive(PartialEq, Eq, PartialOrd, Ord)] +pub struct JavaStr { + inner: [u8], +} + +impl JavaStr { + /// Converts `v` to a `&JavaStr` if it is fully-valid UTF-8, i.e. UTF-8 + /// without surrogate code points. See [`std::str::from_utf8`]. + #[inline] + pub const fn from_full_utf8(v: &[u8]) -> Result<&JavaStr, Utf8Error> { + match std::str::from_utf8(v) { + Ok(str) => Ok(JavaStr::from_str(str)), + Err(err) => Err(Utf8Error::from_std(err)), + } + } + + /// Converts `v` to a `&mut JavaStr` if it is fully-valid UTF-8, i.e. UTF-8 + /// without surrogate code points. See [`std::str::from_utf8_mut`]. + #[inline] + pub fn from_full_utf8_mut(v: &mut [u8]) -> Result<&mut JavaStr, Utf8Error> { + match std::str::from_utf8_mut(v) { + Ok(str) => Ok(JavaStr::from_mut_str(str)), + Err(err) => Err(Utf8Error::from_std(err)), + } + } + + /// Converts `v` to a `&JavaStr` if it is semi-valid UTF-8, i.e. UTF-8 + /// with surrogate code points. + pub fn from_semi_utf8(v: &[u8]) -> Result<&JavaStr, Utf8Error> { + match run_utf8_semi_validation(v) { + Ok(()) => Ok(unsafe { JavaStr::from_semi_utf8_unchecked(v) }), + Err(err) => Err(err), + } + } + + /// Converts `v` to a `&mut JavaStr` if it is semi-valid UTF-8, i.e. UTF-8 + /// with surrogate code points. + pub fn from_semi_utf8_mut(v: &mut [u8]) -> Result<&mut JavaStr, Utf8Error> { + match run_utf8_semi_validation(v) { + Ok(()) => Ok(unsafe { JavaStr::from_semi_utf8_unchecked_mut(v) }), + Err(err) => Err(err), + } + } + + /// # Safety + /// + /// The parameter must be in semi-valid UTF-8 format, that is, UTF-8 plus + /// surrogate code points. + #[inline] + #[must_use] + pub const unsafe fn from_semi_utf8_unchecked(v: &[u8]) -> &JavaStr { + // SAFETY: the caller must guarantee that the bytes `v` are valid UTF-8, minus + // the absence of surrogate chars. Also relies on `&JavaStr` and `&[u8]` + // having the same layout. + unsafe { std::mem::transmute(v) } + } + + /// # Safety + /// + /// The parameter must be in semi-valid UTF-8 format, that is, UTF-8 plus + /// surrogate code points. + #[inline] + #[must_use] + pub unsafe fn from_semi_utf8_unchecked_mut(v: &mut [u8]) -> &mut JavaStr { + // SAFETY: see from_semi_utf8_unchecked + unsafe { std::mem::transmute(v) } + } + + #[inline] + #[must_use] + pub const fn from_str(str: &str) -> &JavaStr { + unsafe { + // SAFETY: the input str is guaranteed to have valid UTF-8. + JavaStr::from_semi_utf8_unchecked(str.as_bytes()) + } + } + + #[inline] + #[must_use] + pub fn from_mut_str(str: &mut str) -> &mut JavaStr { + unsafe { + // SAFETY: the input str is guaranteed to have valid UTF-8. + JavaStr::from_semi_utf8_unchecked_mut(str.as_bytes_mut()) + } + } + + #[inline] + #[must_use] + pub fn from_boxed_str(v: Box) -> Box { + unsafe { JavaStr::from_boxed_semi_utf8_unchecked(v.into_boxed_bytes()) } + } + + /// # Safety + /// + /// The parameter must be in semi-valid UTF-8 format, that is, UTF-8 plus + /// surrogate code points. + #[inline] + #[must_use] + pub unsafe fn from_boxed_semi_utf8_unchecked(v: Box<[u8]>) -> Box { + unsafe { Box::from_raw(Box::into_raw(v) as *mut JavaStr) } + } + + /// See [`str::as_bytes`]. + #[inline] + #[must_use] + pub const fn as_bytes(&self) -> &[u8] { + &self.inner + } + + /// See [`str::as_bytes_mut`]. + /// + /// # Safety + /// + /// The returned slice must not have invalid UTF-8 written to it, besides + /// surrogate pairs. + #[inline] + #[must_use] + pub unsafe fn as_bytes_mut(&mut self) -> &mut [u8] { + &mut self.inner + } + + /// See [`str::as_mut_ptr`]. + #[inline] + #[must_use] + pub fn as_mut_ptr(&mut self) -> *mut u8 { + self.inner.as_mut_ptr() + } + + /// See [`str::as_ptr`]. + #[inline] + #[must_use] + pub const fn as_ptr(&self) -> *const u8 { + self.inner.as_ptr() + } + + /// Tries to convert this `&JavaStr` to a `&str`, returning an error if + /// it is not fully valid UTF-8, i.e. has no surrogate code points. + pub const fn as_str(&self) -> Result<&str, Utf8Error> { + // Manual implementation of Option::map since it's not const + match run_utf8_full_validation_from_semi(self.as_bytes()) { + Ok(..) => unsafe { + // SAFETY: we were already semi-valid, and full validation just succeeded. + Ok(self.as_str_unchecked()) + }, + Err(err) => Err(err), + } + } + + /// # Safety + /// + /// This string must be fully valid UTF-8, i.e. have no surrogate code + /// points. + #[inline] + #[must_use] + pub const unsafe fn as_str_unchecked(&self) -> &str { + unsafe { std::str::from_utf8_unchecked(self.as_bytes()) } + } + + /// Converts this `&JavaStr` to a `Cow`, replacing surrogate code + /// points with the replacement character �. + /// + /// ``` + /// # use std::borrow::Cow; + /// # use java_string::{JavaCodePoint, JavaStr, JavaString}; + /// let s = JavaStr::from_str("Hello 🦀 World!"); + /// let result = s.as_str_lossy(); + /// assert!(matches!(result, Cow::Borrowed(_))); + /// assert_eq!(result, "Hello 🦀 World!"); + /// + /// let s = JavaString::from("Hello ") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str() + /// + JavaStr::from_str(" World!"); + /// let result = s.as_str_lossy(); + /// assert!(matches!(result, Cow::Owned(_))); + /// assert_eq!(result, "Hello � World!"); + /// ``` + #[must_use] + pub fn as_str_lossy(&self) -> Cow<'_, str> { + match run_utf8_full_validation_from_semi(self.as_bytes()) { + Ok(()) => unsafe { + // SAFETY: validation succeeded + Cow::Borrowed(self.as_str_unchecked()) + }, + Err(error) => unsafe { + // SAFETY: invalid parts of string are converted to replacement char + Cow::Owned( + self.transform_invalid_string(error, str::to_owned, |_| { + JavaStr::from_str("\u{FFFD}") + }) + .into_string_unchecked(), + ) + }, + } + } + + /// See [`str::bytes`]. + #[inline] + pub fn bytes(&self) -> Bytes<'_> { + Bytes { + inner: self.inner.iter().copied(), + } + } + + /// See [`str::char_indices`]. + #[inline] + pub fn char_indices(&self) -> CharIndices<'_> { + CharIndices { + front_offset: 0, + inner: self.chars(), + } + } + + /// See [`str::chars`]. + #[inline] + pub fn chars(&self) -> Chars<'_> { + Chars { + inner: self.inner.iter(), + } + } + + /// See [`str::contains`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let bananas = JavaStr::from_str("bananas"); + /// + /// assert!(bananas.contains("nana")); + /// assert!(!bananas.contains("apples")); + /// ``` + #[inline] + #[must_use] + pub fn contains

(&self, mut pat: P) -> bool + where + P: JavaStrPattern, + { + pat.find_in(self).is_some() + } + + /// See [`str::ends_with`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let bananas = JavaStr::from_str("bananas"); + /// + /// assert!(bananas.ends_with("anas")); + /// assert!(!bananas.ends_with("nana")); + /// ``` + #[inline] + #[must_use] + pub fn ends_with

(&self, mut pat: P) -> bool + where + P: JavaStrPattern, + { + pat.suffix_len_in(self).is_some() + } + + /// See [`str::eq_ignore_ascii_case`]. + #[inline] + #[must_use] + pub fn eq_ignore_ascii_case(&self, other: &str) -> bool { + self.as_bytes().eq_ignore_ascii_case(other.as_bytes()) + } + + /// See [`str::eq_ignore_ascii_case`]. + #[inline] + #[must_use] + pub fn eq_java_ignore_ascii_case(&self, other: &JavaStr) -> bool { + self.as_bytes().eq_ignore_ascii_case(other.as_bytes()) + } + + /// See [`str::escape_debug`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!( + /// JavaStr::from_str("❤\n!").escape_debug().to_string(), + /// "❤\\n!" + /// ); + /// ``` + #[inline] + pub fn escape_debug(&self) -> EscapeDebug<'_> { + #[inline] + fn escape_first(first: JavaCodePoint) -> CharEscapeIter { + first.escape_debug_ext(EscapeDebugExtArgs::ESCAPE_ALL) + } + #[inline] + fn escape_rest(char: JavaCodePoint) -> CharEscapeIter { + char.escape_debug_ext(EscapeDebugExtArgs { + escape_single_quote: true, + escape_double_quote: true, + }) + } + + let mut chars = self.chars(); + EscapeDebug { + inner: chars + .next() + .map(escape_first as fn(JavaCodePoint) -> CharEscapeIter) + .into_iter() + .flatten() + .chain(chars.flat_map(escape_rest as fn(JavaCodePoint) -> CharEscapeIter)), + } + } + + /// See [`str::escape_default`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!( + /// JavaStr::from_str("❤\n!").escape_default().to_string(), + /// "\\u{2764}\\n!" + /// ); + /// ``` + #[inline] + pub fn escape_default(&self) -> EscapeDefault<'_> { + EscapeDefault { + inner: self.chars().flat_map(JavaCodePoint::escape_default), + } + } + + /// See [`str::escape_unicode`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!( + /// JavaStr::from_str("❤\n!").escape_unicode().to_string(), + /// "\\u{2764}\\u{a}\\u{21}" + /// ); + /// ``` + #[inline] + pub fn escape_unicode(&self) -> EscapeUnicode<'_> { + EscapeUnicode { + inner: self.chars().flat_map(JavaCodePoint::escape_unicode), + } + } + + /// See [`str::find`]. + /// + /// ``` + /// let s = "Löwe 老虎 Léopard Gepardi"; + /// + /// assert_eq!(s.find('L'), Some(0)); + /// assert_eq!(s.find('é'), Some(14)); + /// assert_eq!(s.find("pard"), Some(17)); + /// + /// let x: &[_] = &['1', '2']; + /// assert_eq!(s.find(x), None); + /// ``` + #[inline] + #[must_use] + pub fn find

(&self, mut pat: P) -> Option + where + P: JavaStrPattern, + { + pat.find_in(self).map(|(index, _)| index) + } + + /// See [`str::get`]. + /// + /// ``` + /// # use java_string::{JavaStr, JavaString}; + /// let v = JavaString::from("🗻∈🌏"); + /// + /// assert_eq!(Some(JavaStr::from_str("🗻")), v.get(0..4)); + /// + /// // indices not on UTF-8 sequence boundaries + /// assert!(v.get(1..).is_none()); + /// assert!(v.get(..8).is_none()); + /// + /// // out of bounds + /// assert!(v.get(..42).is_none()); + /// ``` + #[inline] + #[must_use] + pub fn get(&self, i: I) -> Option<&JavaStr> + where + I: JavaStrSliceIndex, + { + i.get(self) + } + + /// See [`str::get_mut`]. + #[inline] + #[must_use] + pub fn get_mut(&mut self, i: I) -> Option<&mut JavaStr> + where + I: JavaStrSliceIndex, + { + i.get_mut(self) + } + + /// See [`str::get_unchecked`]. + /// + /// # Safety + /// + /// - The starting index must not exceed the ending index + /// - Indexes must be within bounds of the original slice + /// - Indexes must lie on UTF-8 sequence boundaries + #[inline] + #[must_use] + pub unsafe fn get_unchecked(&self, i: I) -> &JavaStr + where + I: JavaStrSliceIndex, + { + unsafe { &*i.get_unchecked(self) } + } + + /// See [`str::get_unchecked_mut`]. + /// + /// # Safety + /// + /// - The starting index must not exceed the ending index + /// - Indexes must be within bounds of the original slice + /// - Indexes must lie on UTF-8 sequence boundaries + #[inline] + #[must_use] + pub unsafe fn get_unchecked_mut(&mut self, i: I) -> &mut JavaStr + where + I: JavaStrSliceIndex, + { + unsafe { &mut *i.get_unchecked_mut(self) } + } + + /// See [`str::into_boxed_bytes`]. + #[inline] + #[must_use] + pub fn into_boxed_bytes(self: Box) -> Box<[u8]> { + unsafe { Box::from_raw(Box::into_raw(self) as *mut [u8]) } + } + + /// See [`str::into_string`]. + #[inline] + #[must_use] + pub fn into_string(self: Box) -> JavaString { + let slice = self.into_boxed_bytes(); + unsafe { JavaString::from_semi_utf8_unchecked(slice.into_vec()) } + } + + /// See [`str::is_ascii`]. + #[inline] + #[must_use] + pub fn is_ascii(&self) -> bool { + self.as_bytes().is_ascii() + } + + /// See [`str::is_char_boundary`]. + #[inline] + #[must_use] + pub fn is_char_boundary(&self, index: usize) -> bool { + // 0 is always ok. + // Test for 0 explicitly so that it can optimize out the check + // easily and skip reading string data for that case. + // Note that optimizing `self.get(..index)` relies on this. + if index == 0 { + return true; + } + + match self.as_bytes().get(index) { + // For `None` we have two options: + // + // - index == self.len() Empty strings are valid, so return true + // - index > self.len() In this case return false + // + // The check is placed exactly here, because it improves generated + // code on higher opt-levels. See https://github.com/rust-lang/rust/pull/84751 for more details. + None => index == self.len(), + + Some(&b) => { + // This is bit magic equivalent to: b < 128 || b >= 192 + (b as i8) >= -0x40 + } + } + } + + pub(crate) fn floor_char_boundary(&self, index: usize) -> usize { + if index >= self.len() { + self.len() + } else { + let lower_bound = index.saturating_sub(3); + let new_index = self.as_bytes()[lower_bound..=index].iter().rposition(|b| { + // This is bit magic equivalent to: b < 128 || b >= 192 + (*b as i8) >= -0x40 + }); + + // SAFETY: we know that the character boundary will be within four bytes + unsafe { lower_bound + new_index.unwrap_unchecked() } + } + } + + /// See [`str::is_empty`]. + #[inline] + #[must_use] + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + /// See [`str::len`]. + #[inline] + #[must_use] + pub fn len(&self) -> usize { + self.inner.len() + } + + /// See [`str::lines`]. + #[inline] + pub fn lines(&self) -> Lines<'_> { + Lines { + inner: self.split_inclusive('\n').map(|line| { + let Some(line) = line.strip_suffix('\n') else { + return line; + }; + let Some(line) = line.strip_suffix('\r') else { + return line; + }; + line + }), + } + } + + /// See [`str::make_ascii_lowercase`]. + #[inline] + pub fn make_ascii_lowercase(&mut self) { + // SAFETY: changing ASCII letters only does not invalidate UTF-8. + let me = unsafe { self.as_bytes_mut() }; + me.make_ascii_lowercase() + } + + /// See [`str::make_ascii_uppercase`]. + #[inline] + pub fn make_ascii_uppercase(&mut self) { + // SAFETY: changing ASCII letters only does not invalidate UTF-8. + let me = unsafe { self.as_bytes_mut() }; + me.make_ascii_uppercase() + } + + /// See [`str::match_indices`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<_> = JavaStr::from_str("abcXXXabcYYYabc") + /// .match_indices("abc") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// (0, JavaStr::from_str("abc")), + /// (6, JavaStr::from_str("abc")), + /// (12, JavaStr::from_str("abc")) + /// ] + /// ); + /// + /// let v: Vec<_> = JavaStr::from_str("1abcabc2").match_indices("abc").collect(); + /// assert_eq!( + /// v, + /// [(1, JavaStr::from_str("abc")), (4, JavaStr::from_str("abc"))] + /// ); + /// + /// let v: Vec<_> = JavaStr::from_str("ababa").match_indices("aba").collect(); + /// assert_eq!(v, [(0, JavaStr::from_str("aba"))]); // only the first `aba` + /// ``` + #[inline] + pub fn match_indices

(&self, pat: P) -> MatchIndices<'_, P> + where + P: JavaStrPattern, + { + MatchIndices { + str: self, + start: 0, + pat, + } + } + + /// See [`str::matches`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// let v: Vec<&JavaStr> = JavaStr::from_str("abcXXXabcYYYabc") + /// .matches("abc") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("abc"), + /// JavaStr::from_str("abc"), + /// JavaStr::from_str("abc") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("1abc2abc3") + /// .matches(JavaCodePoint::is_numeric) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("1"), + /// JavaStr::from_str("2"), + /// JavaStr::from_str("3") + /// ] + /// ); + /// ``` + #[inline] + pub fn matches

(&self, pat: P) -> Matches<'_, P> + where + P: JavaStrPattern, + { + Matches { str: self, pat } + } + + /// See [`str::parse`]. + #[inline] + pub fn parse(&self) -> Result::Err>> + where + F: FromStr, + { + match self.as_str() { + Ok(str) => str.parse().map_err(ParseError::Err), + Err(err) => Err(ParseError::InvalidUtf8(err)), + } + } + + /// See [`str::repeat`]. + #[inline] + #[must_use] + pub fn repeat(&self, n: usize) -> JavaString { + unsafe { JavaString::from_semi_utf8_unchecked(self.as_bytes().repeat(n)) } + } + + /// See [`str::replace`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let s = JavaStr::from_str("this is old"); + /// + /// assert_eq!("this is new", s.replace("old", "new")); + /// assert_eq!("than an old", s.replace("is", "an")); + /// ``` + #[inline] + #[must_use] + pub fn replace

(&self, from: P, to: &str) -> JavaString + where + P: JavaStrPattern, + { + self.replace_java(from, JavaStr::from_str(to)) + } + + /// See [`str::replace`]. + #[inline] + #[must_use] + pub fn replace_java

(&self, from: P, to: &JavaStr) -> JavaString + where + P: JavaStrPattern, + { + let mut result = JavaString::new(); + let mut last_end = 0; + for (start, part) in self.match_indices(from) { + result.push_java_str(unsafe { self.get_unchecked(last_end..start) }); + result.push_java_str(to); + last_end = start + part.len(); + } + result.push_java_str(unsafe { self.get_unchecked(last_end..self.len()) }); + result + } + + /// See [`str::replacen`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// let s = JavaStr::from_str("foo foo 123 foo"); + /// assert_eq!("new new 123 foo", s.replacen("foo", "new", 2)); + /// assert_eq!("faa fao 123 foo", s.replacen('o', "a", 3)); + /// assert_eq!( + /// "foo foo new23 foo", + /// s.replacen(JavaCodePoint::is_numeric, "new", 1) + /// ); + /// ``` + #[inline] + #[must_use] + pub fn replacen

(&self, from: P, to: &str, count: usize) -> JavaString + where + P: JavaStrPattern, + { + self.replacen_java(from, JavaStr::from_str(to), count) + } + + /// See [`str::replacen`]. + #[inline] + #[must_use] + pub fn replacen_java

(&self, from: P, to: &JavaStr, count: usize) -> JavaString + where + P: JavaStrPattern, + { + // Hope to reduce the times of re-allocation + let mut result = JavaString::with_capacity(32); + let mut last_end = 0; + for (start, part) in self.match_indices(from).take(count) { + result.push_java_str(unsafe { self.get_unchecked(last_end..start) }); + result.push_java_str(to); + last_end = start + part.len(); + } + result.push_java_str(unsafe { self.get_unchecked(last_end..self.len()) }); + result + } + + /// See [`str::rfind`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let s = JavaStr::from_str("Löwe 老虎 Léopard Gepardi"); + /// + /// assert_eq!(s.rfind('L'), Some(13)); + /// assert_eq!(s.rfind('é'), Some(14)); + /// assert_eq!(s.rfind("pard"), Some(24)); + /// + /// let x: &[_] = &['1', '2']; + /// assert_eq!(s.rfind(x), None); + /// ``` + #[inline] + #[must_use] + pub fn rfind

(&self, mut pat: P) -> Option + where + P: JavaStrPattern, + { + pat.rfind_in(self).map(|(index, _)| index) + } + + /// See [`str::rmatch_indices`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<_> = JavaStr::from_str("abcXXXabcYYYabc") + /// .rmatch_indices("abc") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// (12, JavaStr::from_str("abc")), + /// (6, JavaStr::from_str("abc")), + /// (0, JavaStr::from_str("abc")) + /// ] + /// ); + /// + /// let v: Vec<_> = JavaStr::from_str("1abcabc2") + /// .rmatch_indices("abc") + /// .collect(); + /// assert_eq!( + /// v, + /// [(4, JavaStr::from_str("abc")), (1, JavaStr::from_str("abc"))] + /// ); + /// + /// let v: Vec<_> = JavaStr::from_str("ababa").rmatch_indices("aba").collect(); + /// assert_eq!(v, [(2, JavaStr::from_str("aba"))]); // only the last `aba` + /// ``` + #[inline] + pub fn rmatch_indices

(&self, pat: P) -> RMatchIndices<'_, P> + where + P: JavaStrPattern, + { + RMatchIndices { + inner: self.match_indices(pat), + } + } + + /// See [`str::rmatches`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// let v: Vec<&JavaStr> = JavaStr::from_str("abcXXXabcYYYabc") + /// .rmatches("abc") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("abc"), + /// JavaStr::from_str("abc"), + /// JavaStr::from_str("abc") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("1abc2abc3") + /// .rmatches(JavaCodePoint::is_numeric) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("3"), + /// JavaStr::from_str("2"), + /// JavaStr::from_str("1") + /// ] + /// ); + /// ``` + #[inline] + pub fn rmatches

(&self, pat: P) -> RMatches<'_, P> + where + P: JavaStrPattern, + { + RMatches { + inner: self.matches(pat), + } + } + + /// See [`str::rsplit`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("Mary had a little lamb") + /// .rsplit(' ') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lamb"), + /// JavaStr::from_str("little"), + /// JavaStr::from_str("a"), + /// JavaStr::from_str("had"), + /// JavaStr::from_str("Mary") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("").rsplit('X').collect(); + /// assert_eq!(v, [JavaStr::from_str("")]); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lionXXtigerXleopard") + /// .rsplit('X') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("leopard"), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str(""), + /// JavaStr::from_str("lion") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lion::tiger::leopard") + /// .rsplit("::") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("leopard"), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str("lion") + /// ] + /// ); + /// ``` + #[inline] + pub fn rsplit

(&self, pat: P) -> RSplit<'_, P> + where + P: JavaStrPattern, + { + RSplit::new(self, pat) + } + + /// See [`str::rsplit_once`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!(JavaStr::from_str("cfg").rsplit_once('='), None); + /// assert_eq!( + /// JavaStr::from_str("cfg=foo").rsplit_once('='), + /// Some((JavaStr::from_str("cfg"), JavaStr::from_str("foo"))) + /// ); + /// assert_eq!( + /// JavaStr::from_str("cfg=foo=bar").rsplit_once('='), + /// Some((JavaStr::from_str("cfg=foo"), JavaStr::from_str("bar"))) + /// ); + /// ``` + #[inline] + #[must_use] + pub fn rsplit_once

(&self, mut delimiter: P) -> Option<(&JavaStr, &JavaStr)> + where + P: JavaStrPattern, + { + let (index, len) = delimiter.rfind_in(self)?; + // SAFETY: pattern is known to return valid indices. + unsafe { + Some(( + self.get_unchecked(..index), + self.get_unchecked(index + len..), + )) + } + } + + /// See [`str::rsplit_terminator`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("A.B.").rsplit_terminator('.').collect(); + /// assert_eq!(v, [JavaStr::from_str("B"), JavaStr::from_str("A")]); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("A..B..").rsplit_terminator(".").collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str(""), + /// JavaStr::from_str("B"), + /// JavaStr::from_str(""), + /// JavaStr::from_str("A") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("A.B:C.D") + /// .rsplit_terminator(&['.', ':'][..]) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("D"), + /// JavaStr::from_str("C"), + /// JavaStr::from_str("B"), + /// JavaStr::from_str("A") + /// ] + /// ); + /// ``` + #[inline] + pub fn rsplit_terminator

(&self, pat: P) -> RSplitTerminator<'_, P> + where + P: JavaStrPattern, + { + RSplitTerminator::new(self, pat) + } + + /// See [`str::rsplitn`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("Mary had a little lamb") + /// .rsplitn(3, ' ') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lamb"), + /// JavaStr::from_str("little"), + /// JavaStr::from_str("Mary had a") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lionXXtigerXleopard") + /// .rsplitn(3, 'X') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("leopard"), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str("lionX") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lion::tiger::leopard") + /// .rsplitn(2, "::") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("leopard"), + /// JavaStr::from_str("lion::tiger") + /// ] + /// ); + /// ``` + #[inline] + pub fn rsplitn

(&self, n: usize, pat: P) -> RSplitN<'_, P> + where + P: JavaStrPattern, + { + RSplitN::new(self, pat, n) + } + + /// See [`str::split`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// let v: Vec<&JavaStr> = JavaStr::from_str("Mary had a little lamb") + /// .split(' ') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("Mary"), + /// JavaStr::from_str("had"), + /// JavaStr::from_str("a"), + /// JavaStr::from_str("little"), + /// JavaStr::from_str("lamb") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("").split('X').collect(); + /// assert_eq!(v, [JavaStr::from_str("")]); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lionXXtigerXleopard") + /// .split('X') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lion"), + /// JavaStr::from_str(""), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str("leopard") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lion::tiger::leopard") + /// .split("::") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lion"), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str("leopard") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("abc1def2ghi") + /// .split(JavaCodePoint::is_numeric) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("abc"), + /// JavaStr::from_str("def"), + /// JavaStr::from_str("ghi") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lionXtigerXleopard") + /// .split(JavaCodePoint::is_uppercase) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lion"), + /// JavaStr::from_str("tiger"), + /// JavaStr::from_str("leopard") + /// ] + /// ); + /// ``` + #[inline] + pub fn split

(&self, pat: P) -> Split<'_, P> + where + P: JavaStrPattern, + { + Split::new(self, pat) + } + + /// See [`str::split_ascii_whitespace`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let mut iter = JavaStr::from_str(" Mary had\ta little \n\t lamb").split_ascii_whitespace(); + /// assert_eq!(Some(JavaStr::from_str("Mary")), iter.next()); + /// assert_eq!(Some(JavaStr::from_str("had")), iter.next()); + /// assert_eq!(Some(JavaStr::from_str("a")), iter.next()); + /// assert_eq!(Some(JavaStr::from_str("little")), iter.next()); + /// assert_eq!(Some(JavaStr::from_str("lamb")), iter.next()); + /// + /// assert_eq!(None, iter.next()); + /// ``` + #[inline] + pub fn split_ascii_whitespace(&self) -> SplitAsciiWhitespace<'_> { + #[inline] + fn is_non_empty(bytes: &&[u8]) -> bool { + !bytes.is_empty() + } + + SplitAsciiWhitespace { + inner: self + .as_bytes() + .split(u8::is_ascii_whitespace as fn(&u8) -> bool) + .filter(is_non_empty as fn(&&[u8]) -> bool) + .map(|bytes| unsafe { JavaStr::from_semi_utf8_unchecked(bytes) }), + } + } + + /// See [`str::split_at`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let s = JavaStr::from_str("Per Martin-Löf"); + /// + /// let (first, last) = s.split_at(3); + /// + /// assert_eq!("Per", first); + /// assert_eq!(" Martin-Löf", last); + /// ``` + /// ```should_panic + /// # use java_string::JavaStr; + /// let s = JavaStr::from_str("Per Martin-Löf"); + /// // Should panic + /// let _ = s.split_at(13); + /// ``` + #[inline] + #[must_use] + pub fn split_at(&self, mid: usize) -> (&JavaStr, &JavaStr) { + // is_char_boundary checks that the index is in [0, .len()] + if self.is_char_boundary(mid) { + // SAFETY: just checked that `mid` is on a char boundary. + unsafe { + ( + self.get_unchecked(0..mid), + self.get_unchecked(mid..self.len()), + ) + } + } else { + slice_error_fail(self, 0, mid) + } + } + + /// See [`str::split_at_mut`]. + /// + /// ``` + /// # use java_string::{JavaStr, JavaString}; + /// let mut s = JavaString::from("Per Martin-Löf"); + /// let s = s.as_mut_java_str(); + /// + /// let (first, last) = s.split_at_mut(3); + /// + /// assert_eq!("Per", first); + /// assert_eq!(" Martin-Löf", last); + /// ``` + /// ```should_panic + /// # use java_string::{JavaStr, JavaString}; + /// let mut s = JavaString::from("Per Martin-Löf"); + /// let s = s.as_mut_java_str(); + /// // Should panic + /// let _ = s.split_at(13); + /// ``` + #[inline] + #[must_use] + pub fn split_at_mut(&mut self, mid: usize) -> (&mut JavaStr, &mut JavaStr) { + // is_char_boundary checks that the index is in [0, .len()] + if self.is_char_boundary(mid) { + let len = self.len(); + let ptr = self.as_mut_ptr(); + // SAFETY: just checked that `mid` is on a char boundary. + unsafe { + ( + JavaStr::from_semi_utf8_unchecked_mut(slice::from_raw_parts_mut(ptr, mid)), + JavaStr::from_semi_utf8_unchecked_mut(slice::from_raw_parts_mut( + ptr.add(mid), + len - mid, + )), + ) + } + } else { + slice_error_fail(self, 0, mid) + } + } + + /// See [`str::split_inclusive`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("Mary had a little lamb\nlittle lamb\nlittle lamb.\n") + /// .split_inclusive('\n') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("Mary had a little lamb\n"), + /// JavaStr::from_str("little lamb\n"), + /// JavaStr::from_str("little lamb.\n") + /// ] + /// ); + /// ``` + #[inline] + pub fn split_inclusive

(&self, pat: P) -> SplitInclusive<'_, P> + where + P: JavaStrPattern, + { + SplitInclusive::new(self, pat) + } + + /// See [`str::split_once`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!(JavaStr::from_str("cfg").split_once('='), None); + /// assert_eq!( + /// JavaStr::from_str("cfg=").split_once('='), + /// Some((JavaStr::from_str("cfg"), JavaStr::from_str(""))) + /// ); + /// assert_eq!( + /// JavaStr::from_str("cfg=foo").split_once('='), + /// Some((JavaStr::from_str("cfg"), JavaStr::from_str("foo"))) + /// ); + /// assert_eq!( + /// JavaStr::from_str("cfg=foo=bar").split_once('='), + /// Some((JavaStr::from_str("cfg"), JavaStr::from_str("foo=bar"))) + /// ); + /// ``` + #[inline] + #[must_use] + pub fn split_once

(&self, mut delimiter: P) -> Option<(&JavaStr, &JavaStr)> + where + P: JavaStrPattern, + { + let (index, len) = delimiter.find_in(self)?; + // SAFETY: pattern is known to return valid indices. + unsafe { + Some(( + self.get_unchecked(..index), + self.get_unchecked(index + len..), + )) + } + } + + /// See [`str::split_terminator`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("A.B.").split_terminator('.').collect(); + /// assert_eq!(v, [JavaStr::from_str("A"), JavaStr::from_str("B")]); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("A..B..").split_terminator(".").collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("A"), + /// JavaStr::from_str(""), + /// JavaStr::from_str("B"), + /// JavaStr::from_str("") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("A.B:C.D") + /// .split_terminator(&['.', ':'][..]) + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("A"), + /// JavaStr::from_str("B"), + /// JavaStr::from_str("C"), + /// JavaStr::from_str("D") + /// ] + /// ); + /// ``` + #[inline] + pub fn split_terminator

(&self, pat: P) -> SplitTerminator<'_, P> + where + P: JavaStrPattern, + { + SplitTerminator::new(self, pat) + } + + /// See [`str::split_whitespace`]. + #[inline] + pub fn split_whitespace(&self) -> SplitWhitespace<'_> { + SplitWhitespace { + inner: self + .split(JavaCodePoint::is_whitespace as fn(JavaCodePoint) -> bool) + .filter(|str| !str.is_empty()), + } + } + + /// See [`str::splitn`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let v: Vec<&JavaStr> = JavaStr::from_str("Mary had a little lambda") + /// .splitn(3, ' ') + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("Mary"), + /// JavaStr::from_str("had"), + /// JavaStr::from_str("a little lambda") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("lionXXtigerXleopard") + /// .splitn(3, "X") + /// .collect(); + /// assert_eq!( + /// v, + /// [ + /// JavaStr::from_str("lion"), + /// JavaStr::from_str(""), + /// JavaStr::from_str("tigerXleopard") + /// ] + /// ); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("abcXdef").splitn(1, 'X').collect(); + /// assert_eq!(v, [JavaStr::from_str("abcXdef")]); + /// + /// let v: Vec<&JavaStr> = JavaStr::from_str("").splitn(1, 'X').collect(); + /// assert_eq!(v, [JavaStr::from_str("")]); + /// ``` + #[inline] + pub fn splitn

(&self, n: usize, pat: P) -> SplitN<'_, P> + where + P: JavaStrPattern, + { + SplitN::new(self, pat, n) + } + + /// See [`str::starts_with`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// let bananas = JavaStr::from_str("bananas"); + /// + /// assert!(bananas.starts_with("bana")); + /// assert!(!bananas.starts_with("nana")); + /// ``` + #[inline] + #[must_use] + pub fn starts_with

(&self, mut pat: P) -> bool + where + P: JavaStrPattern, + { + pat.prefix_len_in(self).is_some() + } + + /// See [`str::strip_prefix`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!( + /// JavaStr::from_str("foo:bar").strip_prefix("foo:"), + /// Some(JavaStr::from_str("bar")) + /// ); + /// assert_eq!(JavaStr::from_str("foo:bar").strip_prefix("bar"), None); + /// assert_eq!( + /// JavaStr::from_str("foofoo").strip_prefix("foo"), + /// Some(JavaStr::from_str("foo")) + /// ); + /// ``` + #[inline] + #[must_use] + pub fn strip_prefix

(&self, mut prefix: P) -> Option<&JavaStr> + where + P: JavaStrPattern, + { + let len = prefix.prefix_len_in(self)?; + // SAFETY: pattern is known to return valid indices. + unsafe { Some(self.get_unchecked(len..)) } + } + + /// See [`str::strip_suffix`]. + /// + /// ``` + /// # use java_string::JavaStr; + /// assert_eq!( + /// JavaStr::from_str("bar:foo").strip_suffix(":foo"), + /// Some(JavaStr::from_str("bar")) + /// ); + /// assert_eq!(JavaStr::from_str("bar:foo").strip_suffix("bar"), None); + /// assert_eq!( + /// JavaStr::from_str("foofoo").strip_suffix("foo"), + /// Some(JavaStr::from_str("foo")) + /// ); + /// ``` + #[inline] + #[must_use] + pub fn strip_suffix

(&self, mut suffix: P) -> Option<&JavaStr> + where + P: JavaStrPattern, + { + let len = suffix.suffix_len_in(self)?; + // SAFETY: pattern is known to return valid indices. + unsafe { Some(self.get_unchecked(..self.len() - len)) } + } + + /// See [`str::to_ascii_lowercase`]. + #[inline] + #[must_use] + pub fn to_ascii_lowercase(&self) -> JavaString { + let mut s = self.to_owned(); + s.make_ascii_lowercase(); + s + } + + /// See [`str::to_ascii_uppercase`]. + #[inline] + #[must_use] + pub fn to_ascii_uppercase(&self) -> JavaString { + let mut s = self.to_owned(); + s.make_ascii_uppercase(); + s + } + + /// See [`str::to_lowercase`]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr, JavaString}; + /// let s = JavaStr::from_str("HELLO"); + /// assert_eq!("hello", s.to_lowercase()); + /// + /// let odysseus = JavaStr::from_str("ὈΔΥΣΣΕΎΣ"); + /// assert_eq!("ὀδυσσεύς", odysseus.to_lowercase()); + /// + /// let s = JavaString::from("Hello ") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str() + /// + JavaStr::from_str(" World!"); + /// let expected = JavaString::from("hello ") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str() + /// + JavaStr::from_str(" world!"); + /// assert_eq!(expected, s.to_lowercase()); + /// ``` + #[inline] + #[must_use] + pub fn to_lowercase(&self) -> JavaString { + self.transform_string(str::to_lowercase, |ch| ch) + } + + /// See [str::to_uppercase]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr, JavaString}; + /// let s = JavaStr::from_str("hello"); + /// assert_eq!("HELLO", s.to_uppercase()); + /// + /// let s = JavaStr::from_str("tschüß"); + /// assert_eq!("TSCHÜSS", s.to_uppercase()); + /// + /// let s = JavaString::from("Hello ") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str() + /// + JavaStr::from_str(" World!"); + /// let expected = JavaString::from("HELLO ") + /// + JavaString::from(JavaCodePoint::from_u32(0xd800).unwrap()).as_java_str() + /// + JavaStr::from_str(" WORLD!"); + /// assert_eq!(expected, s.to_uppercase()); + /// ``` + #[inline] + #[must_use] + pub fn to_uppercase(&self) -> JavaString { + self.transform_string(str::to_uppercase, |ch| ch) + } + + /// See [str::trim]. + #[inline] + #[must_use] + pub fn trim(&self) -> &JavaStr { + self.trim_matches(|c: JavaCodePoint| c.is_whitespace()) + } + + /// See [str::trim_end]. + #[inline] + #[must_use] + pub fn trim_end(&self) -> &JavaStr { + self.trim_end_matches(|c: JavaCodePoint| c.is_whitespace()) + } + + /// See [str::trim_end_matches]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// assert_eq!( + /// JavaStr::from_str("11foo1bar11").trim_end_matches('1'), + /// "11foo1bar" + /// ); + /// assert_eq!( + /// JavaStr::from_str("123foo1bar123").trim_end_matches(JavaCodePoint::is_numeric), + /// "123foo1bar" + /// ); + /// + /// let x: &[_] = &['1', '2']; + /// assert_eq!( + /// JavaStr::from_str("12foo1bar12").trim_end_matches(x), + /// "12foo1bar" + /// ); + /// ``` + #[inline] + #[must_use] + pub fn trim_end_matches

(&self, mut pat: P) -> &JavaStr + where + P: JavaStrPattern, + { + let mut str = self; + while let Some(suffix_len) = pat.suffix_len_in(str) { + if suffix_len == 0 { + break; + } + // SAFETY: pattern is known to return valid indices. + str = unsafe { str.get_unchecked(..str.len() - suffix_len) }; + } + str + } + + /// See [str::trim_matches]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// assert_eq!( + /// JavaStr::from_str("11foo1bar11").trim_matches('1'), + /// "foo1bar" + /// ); + /// assert_eq!( + /// JavaStr::from_str("123foo1bar123").trim_matches(JavaCodePoint::is_numeric), + /// "foo1bar" + /// ); + /// + /// let x: &[_] = &['1', '2']; + /// assert_eq!(JavaStr::from_str("12foo1bar12").trim_matches(x), "foo1bar"); + /// ``` + #[inline] + #[must_use] + pub fn trim_matches

(&self, mut pat: P) -> &JavaStr + where + P: JavaStrPattern, + { + let mut str = self; + while let Some(prefix_len) = pat.prefix_len_in(str) { + if prefix_len == 0 { + break; + } + // SAFETY: pattern is known to return valid indices. + str = unsafe { str.get_unchecked(prefix_len..) }; + } + while let Some(suffix_len) = pat.suffix_len_in(str) { + if suffix_len == 0 { + break; + } + // SAFETY: pattern is known to return valid indices. + str = unsafe { str.get_unchecked(..str.len() - suffix_len) }; + } + str + } + + /// See [str::trim_start]. + #[inline] + #[must_use] + pub fn trim_start(&self) -> &JavaStr { + self.trim_start_matches(|c: JavaCodePoint| c.is_whitespace()) + } + + /// See [str::trim_start_matches]. + /// + /// ``` + /// # use java_string::{JavaCodePoint, JavaStr}; + /// assert_eq!( + /// JavaStr::from_str("11foo1bar11").trim_start_matches('1'), + /// "foo1bar11" + /// ); + /// assert_eq!( + /// JavaStr::from_str("123foo1bar123").trim_start_matches(JavaCodePoint::is_numeric), + /// "foo1bar123" + /// ); + /// + /// let x: &[_] = &['1', '2']; + /// assert_eq!( + /// JavaStr::from_str("12foo1bar12").trim_start_matches(x), + /// "foo1bar12" + /// ); + /// ``` + #[inline] + #[must_use] + pub fn trim_start_matches

(&self, mut pat: P) -> &JavaStr + where + P: JavaStrPattern, + { + let mut str = self; + while let Some(prefix_len) = pat.prefix_len_in(str) { + if prefix_len == 0 { + break; + } + // SAFETY: pattern is known to return valid indices. + str = unsafe { str.get_unchecked(prefix_len..) }; + } + str + } + + #[inline] + fn transform_string( + &self, + mut string_transformer: SF, + invalid_char_transformer: ICF, + ) -> JavaString + where + SF: FnMut(&str) -> String, + ICF: FnMut(&JavaStr) -> &JavaStr, + { + let bytes = self.as_bytes(); + match run_utf8_full_validation_from_semi(bytes) { + Ok(()) => JavaString::from(string_transformer(unsafe { + // SAFETY: validation succeeded + std::str::from_utf8_unchecked(bytes) + })), + Err(error) => { + self.transform_invalid_string(error, string_transformer, invalid_char_transformer) + } + } + } + + #[inline] + fn transform_invalid_string( + &self, + error: Utf8Error, + mut string_transformer: SF, + mut invalid_char_transformer: ICF, + ) -> JavaString + where + SF: FnMut(&str) -> String, + ICF: FnMut(&JavaStr) -> &JavaStr, + { + let bytes = self.as_bytes(); + let mut result = JavaString::from(string_transformer(unsafe { + // SAFETY: validation succeeded up to this index + std::str::from_utf8_unchecked(bytes.get_unchecked(..error.valid_up_to)) + })); + result.push_java_str(invalid_char_transformer(unsafe { + // SAFETY: any UTF-8 error in semi-valid UTF-8 is a 3 byte long sequence + // representing a surrogate code point. We're pushing that sequence now + JavaStr::from_semi_utf8_unchecked( + bytes.get_unchecked(error.valid_up_to..error.valid_up_to + 3), + ) + })); + let mut index = error.valid_up_to + 3; + loop { + let remainder = unsafe { bytes.get_unchecked(index..) }; + match run_utf8_full_validation_from_semi(remainder) { + Ok(()) => { + result.push_str(&string_transformer(unsafe { + // SAFETY: validation succeeded + std::str::from_utf8_unchecked(remainder) + })); + return result; + } + Err(error) => { + result.push_str(&string_transformer(unsafe { + // SAFETY: validation succeeded up to this index + std::str::from_utf8_unchecked( + bytes.get_unchecked(index..index + error.valid_up_to), + ) + })); + result.push_java_str(invalid_char_transformer(unsafe { + // SAFETY: see comment above + JavaStr::from_semi_utf8_unchecked(bytes.get_unchecked( + index + error.valid_up_to..index + error.valid_up_to + 3, + )) + })); + index += error.valid_up_to + 3; + } + } + } + } +} + +impl<'a> Add<&JavaStr> for Cow<'a, JavaStr> { + type Output = Cow<'a, JavaStr>; + + #[inline] + fn add(mut self, rhs: &JavaStr) -> Self::Output { + self += rhs; + self + } +} + +impl<'a> AddAssign<&JavaStr> for Cow<'a, JavaStr> { + #[inline] + fn add_assign(&mut self, rhs: &JavaStr) { + if !rhs.is_empty() { + match self { + Cow::Borrowed(lhs) => { + let mut result = lhs.to_owned(); + result.push_java_str(rhs); + *self = Cow::Owned(result); + } + Cow::Owned(lhs) => { + lhs.push_java_str(rhs); + } + } + } + } +} + +impl AsRef<[u8]> for JavaStr { + #[inline] + fn as_ref(&self) -> &[u8] { + self.as_bytes() + } +} + +impl AsRef for str { + #[inline] + fn as_ref(&self) -> &JavaStr { + JavaStr::from_str(self) + } +} + +impl AsRef for String { + #[inline] + fn as_ref(&self) -> &JavaStr { + JavaStr::from_str(self) + } +} + +impl AsRef for JavaStr { + #[inline] + fn as_ref(&self) -> &JavaStr { + self + } +} + +impl Clone for Box { + #[inline] + fn clone(&self) -> Self { + let buf: Box<[u8]> = self.as_bytes().into(); + unsafe { JavaStr::from_boxed_semi_utf8_unchecked(buf) } + } +} + +impl Debug for JavaStr { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.write_char('"')?; + let mut from = 0; + for (i, c) in self.char_indices() { + let esc = c.escape_debug_ext(EscapeDebugExtArgs { + escape_single_quote: false, + escape_double_quote: true, + }); + // If char needs escaping, flush backlog so far and write, else skip. + // Also handle invalid UTF-8 here + if esc.len() != 1 || c.as_char().is_none() { + unsafe { + // SAFETY: any invalid UTF-8 should have been caught by a previous iteration + f.write_str(self[from..i].as_str_unchecked())?; + } + for c in esc { + f.write_char(c)?; + } + from = i + c.len_utf8(); + } + } + unsafe { + // SAFETY: any invalid UTF-8 should have been caught by the loop above + f.write_str(self[from..].as_str_unchecked())?; + } + f.write_char('"') + } +} + +impl Default for &JavaStr { + #[inline] + fn default() -> Self { + JavaStr::from_str("") + } +} + +impl Default for Box { + #[inline] + fn default() -> Self { + JavaStr::from_boxed_str(Box::::default()) + } +} + +impl Display for JavaStr { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + Display::fmt(&self.as_str_lossy(), f) + } +} + +impl<'a> From<&'a JavaStr> for Cow<'a, JavaStr> { + #[inline] + fn from(value: &'a JavaStr) -> Self { + Cow::Borrowed(value) + } +} + +impl From<&JavaStr> for Arc { + #[inline] + fn from(value: &JavaStr) -> Self { + let arc = Arc::<[u8]>::from(value.as_bytes()); + unsafe { Arc::from_raw(Arc::into_raw(arc) as *const JavaStr) } + } +} + +impl From<&JavaStr> for Box { + #[inline] + fn from(value: &JavaStr) -> Self { + unsafe { JavaStr::from_boxed_semi_utf8_unchecked(Box::from(value.as_bytes())) } + } +} + +impl From<&JavaStr> for Rc { + #[inline] + fn from(value: &JavaStr) -> Self { + let rc = Rc::<[u8]>::from(value.as_bytes()); + unsafe { Rc::from_raw(Rc::into_raw(rc) as *const JavaStr) } + } +} + +impl From<&JavaStr> for Vec { + #[inline] + fn from(value: &JavaStr) -> Self { + From::from(value.as_bytes()) + } +} + +impl From> for Box { + #[inline] + fn from(value: Cow<'_, JavaStr>) -> Self { + match value { + Cow::Borrowed(s) => Box::from(s), + Cow::Owned(s) => Box::from(s), + } + } +} + +impl From for Box { + #[inline] + fn from(value: JavaString) -> Self { + value.into_boxed_str() + } +} + +impl<'a> From<&'a str> for &'a JavaStr { + #[inline] + fn from(value: &'a str) -> Self { + JavaStr::from_str(value) + } +} + +impl<'a> From<&'a String> for &'a JavaStr { + #[inline] + fn from(value: &'a String) -> Self { + JavaStr::from_str(value) + } +} + +impl Hash for JavaStr { + #[inline] + fn hash(&self, state: &mut H) { + state.write(self.as_bytes()); + state.write_u8(0xff); + } +} + +impl Index for JavaStr +where + I: JavaStrSliceIndex, +{ + type Output = JavaStr; + + #[inline] + fn index(&self, index: I) -> &Self::Output { + index.index(self) + } +} + +impl IndexMut for JavaStr +where + I: JavaStrSliceIndex, +{ + #[inline] + fn index_mut(&mut self, index: I) -> &mut Self::Output { + index.index_mut(self) + } +} + +impl<'a, 'b> PartialEq<&'b JavaStr> for Cow<'a, str> { + #[inline] + fn eq(&self, other: &&'b JavaStr) -> bool { + self == *other + } +} + +impl<'a, 'b> PartialEq<&'b JavaStr> for Cow<'a, JavaStr> { + #[inline] + fn eq(&self, other: &&'b JavaStr) -> bool { + self == *other + } +} + +impl<'a> PartialEq> for &JavaStr { + #[inline] + fn eq(&self, other: &Cow<'a, str>) -> bool { + *self == other + } +} + +impl<'a> PartialEq> for JavaStr { + #[inline] + fn eq(&self, other: &Cow<'a, str>) -> bool { + other == self + } +} + +impl<'a> PartialEq> for &JavaStr { + #[inline] + fn eq(&self, other: &Cow<'a, JavaStr>) -> bool { + *self == other + } +} + +impl<'a> PartialEq> for JavaStr { + #[inline] + fn eq(&self, other: &Cow<'a, JavaStr>) -> bool { + other == self + } +} + +impl PartialEq for &JavaStr { + #[inline] + fn eq(&self, other: &String) -> bool { + *self == other + } +} + +impl PartialEq for JavaStr { + #[inline] + fn eq(&self, other: &String) -> bool { + self == &other[..] + } +} + +impl PartialEq for String { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + &self[..] == other + } +} + +impl PartialEq for &JavaStr { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + *self == other + } +} + +impl PartialEq for JavaStr { + #[inline] + fn eq(&self, other: &JavaString) -> bool { + self == other[..] + } +} + +impl<'a> PartialEq for Cow<'a, str> { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + match self { + Cow::Borrowed(this) => this == other, + Cow::Owned(this) => this == other, + } + } +} + +impl<'a> PartialEq for Cow<'a, JavaStr> { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + match self { + Cow::Borrowed(this) => this == other, + Cow::Owned(this) => this == other, + } + } +} + +impl PartialEq for str { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + JavaStr::from_str(self) == other + } +} + +impl PartialEq for &str { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + *self == other + } +} + +impl PartialEq for JavaStr { + #[inline] + fn eq(&self, other: &str) -> bool { + self == JavaStr::from_str(other) + } +} + +impl<'a> PartialEq<&'a str> for JavaStr { + #[inline] + fn eq(&self, other: &&'a str) -> bool { + self == *other + } +} + +impl PartialEq for &JavaStr { + #[inline] + fn eq(&self, other: &JavaStr) -> bool { + *self == other + } +} + +impl<'a> PartialEq<&'a JavaStr> for JavaStr { + #[inline] + fn eq(&self, other: &&'a JavaStr) -> bool { + self == *other + } +} + +impl ToOwned for JavaStr { + type Owned = JavaString; + + #[inline] + fn to_owned(&self) -> Self::Owned { + unsafe { JavaString::from_semi_utf8_unchecked(self.as_bytes().to_vec()) } + } +} + +mod private_slice_index { + use std::ops; + + pub trait Sealed {} + + impl Sealed for ops::Range {} + impl Sealed for ops::RangeTo {} + impl Sealed for ops::RangeFrom {} + impl Sealed for ops::RangeFull {} + impl Sealed for ops::RangeInclusive {} + impl Sealed for ops::RangeToInclusive {} +} + +/// # Safety +/// +/// Implementations' `check_bounds` method must properly check the bounds of the +/// slice, such that calling `get_unchecked` is not UB. +pub unsafe trait JavaStrSliceIndex: private_slice_index::Sealed + Sized { + fn check_bounds(&self, slice: &JavaStr) -> bool; + fn check_bounds_fail(self, slice: &JavaStr) -> !; + + /// # Safety + /// + /// - The input slice must be a valid pointer + /// - This index must not be out of bounds of the input slice + /// - The indices of this slice must point to char boundaries in the input + /// slice + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr; + + /// # Safety + /// + /// - The input slice must be a valid pointer + /// - This index must not be out of bounds of the input slice + /// - The indices of this slice must point to char boundaries in the input + /// slice + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr; + + #[inline] + fn get(self, slice: &JavaStr) -> Option<&JavaStr> { + if self.check_bounds(slice) { + Some(unsafe { &*self.get_unchecked(slice) }) + } else { + None + } + } + + #[inline] + fn get_mut(self, slice: &mut JavaStr) -> Option<&mut JavaStr> { + if self.check_bounds(slice) { + Some(unsafe { &mut *self.get_unchecked_mut(slice) }) + } else { + None + } + } + + #[inline] + fn index(self, slice: &JavaStr) -> &JavaStr { + if self.check_bounds(slice) { + unsafe { &*self.get_unchecked(slice) } + } else { + self.check_bounds_fail(slice) + } + } + + #[inline] + fn index_mut(self, slice: &mut JavaStr) -> &mut JavaStr { + if self.check_bounds(slice) { + unsafe { &mut *self.get_unchecked_mut(slice) } + } else { + self.check_bounds_fail(slice) + } + } +} + +unsafe impl JavaStrSliceIndex for RangeFull { + #[inline] + fn check_bounds(&self, _slice: &JavaStr) -> bool { + true + } + + #[inline] + fn check_bounds_fail(self, _slice: &JavaStr) -> ! { + unreachable!() + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + slice + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + slice + } +} + +unsafe impl JavaStrSliceIndex for Range { + #[inline] + fn check_bounds(&self, slice: &JavaStr) -> bool { + self.start <= self.end + && slice.is_char_boundary(self.start) + && slice.is_char_boundary(self.end) + } + + #[inline] + #[track_caller] + fn check_bounds_fail(self, slice: &JavaStr) -> ! { + slice_error_fail(slice, self.start, self.end) + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + let slice = slice as *const [u8]; + // SAFETY: the caller guarantees that `self` is in bounds of `slice` + // which satisfies all the conditions for `add`. + let ptr = unsafe { (slice as *const u8).add(self.start) }; + let len = self.end - self.start; + ptr::slice_from_raw_parts(ptr, len) as *const JavaStr + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + let slice = slice as *mut [u8]; + // SAFETY: see comments for `get_unchecked`. + let ptr = unsafe { (slice as *mut u8).add(self.start) }; + let len = self.end - self.start; + ptr::slice_from_raw_parts_mut(ptr, len) as *mut JavaStr + } +} + +unsafe impl JavaStrSliceIndex for RangeTo { + #[inline] + fn check_bounds(&self, slice: &JavaStr) -> bool { + slice.is_char_boundary(self.end) + } + + #[inline] + #[track_caller] + fn check_bounds_fail(self, slice: &JavaStr) -> ! { + slice_error_fail(slice, 0, self.end) + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + unsafe { (0..self.end).get_unchecked(slice) } + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + unsafe { (0..self.end).get_unchecked_mut(slice) } + } +} + +unsafe impl JavaStrSliceIndex for RangeFrom { + #[inline] + fn check_bounds(&self, slice: &JavaStr) -> bool { + slice.is_char_boundary(self.start) + } + + #[inline] + #[track_caller] + fn check_bounds_fail(self, slice: &JavaStr) -> ! { + slice_error_fail(slice, self.start, slice.len()) + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + let len = unsafe { (&*(slice as *const [u8])).len() }; + unsafe { (self.start..len).get_unchecked(slice) } + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + let len = unsafe { (&*(slice as *mut [u8])).len() }; + unsafe { (self.start..len).get_unchecked_mut(slice) } + } +} + +#[inline] +fn into_slice_range(range: RangeInclusive) -> Range { + let exclusive_end = *range.end() + 1; + let start = match range.end_bound() { + Bound::Excluded(..) => exclusive_end, // excluded + Bound::Included(..) => *range.start(), + Bound::Unbounded => unreachable!(), + }; + start..exclusive_end +} + +unsafe impl JavaStrSliceIndex for RangeInclusive { + #[inline] + fn check_bounds(&self, slice: &JavaStr) -> bool { + *self.end() != usize::MAX && into_slice_range(self.clone()).check_bounds(slice) + } + + #[inline] + #[track_caller] + fn check_bounds_fail(self, slice: &JavaStr) -> ! { + if *self.end() == usize::MAX { + str_end_index_overflow_fail() + } else { + into_slice_range(self).check_bounds_fail(slice) + } + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + unsafe { into_slice_range(self).get_unchecked(slice) } + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + unsafe { into_slice_range(self).get_unchecked_mut(slice) } + } +} + +unsafe impl JavaStrSliceIndex for RangeToInclusive { + #[inline] + fn check_bounds(&self, slice: &JavaStr) -> bool { + (0..=self.end).check_bounds(slice) + } + + #[inline] + fn check_bounds_fail(self, slice: &JavaStr) -> ! { + (0..=self.end).check_bounds_fail(slice) + } + + #[inline] + unsafe fn get_unchecked(self, slice: *const JavaStr) -> *const JavaStr { + unsafe { (0..=self.end).get_unchecked(slice) } + } + + #[inline] + unsafe fn get_unchecked_mut(self, slice: *mut JavaStr) -> *mut JavaStr { + unsafe { (0..=self.end).get_unchecked_mut(slice) } + } +} diff --git a/vendor/valence/crates/java_string/src/validations.rs b/vendor/valence/crates/java_string/src/validations.rs new file mode 100644 index 00000000..102783f5 --- /dev/null +++ b/vendor/valence/crates/java_string/src/validations.rs @@ -0,0 +1,369 @@ +use std::ops::{Bound, Range, RangeBounds, RangeTo}; + +use crate::{JavaStr, Utf8Error}; + +pub(crate) const TAG_CONT: u8 = 0b1000_0000; +pub(crate) const TAG_TWO_B: u8 = 0b1100_0000; +pub(crate) const TAG_THREE_B: u8 = 0b1110_0000; +pub(crate) const TAG_FOUR_B: u8 = 0b1111_0000; +pub(crate) const CONT_MASK: u8 = 0b0011_1111; + +#[inline] +const fn utf8_first_byte(byte: u8, width: u32) -> u32 { + (byte & (0x7f >> width)) as u32 +} + +#[inline] +const fn utf8_acc_cont_byte(ch: u32, byte: u8) -> u32 { + (ch << 6) | (byte & CONT_MASK) as u32 +} + +#[inline] +const fn utf8_is_cont_byte(byte: u8) -> bool { + (byte as i8) < -64 +} + +/// # Safety +/// +/// `bytes` must produce a semi-valid UTF-8 string +#[inline] +pub(crate) unsafe fn next_code_point<'a, I: Iterator>(bytes: &mut I) -> Option { + // Decode UTF-8 + let x = *bytes.next()?; + if x < 128 { + return Some(x as u32); + } + + // Multibyte case follows + // Decode from a byte combination out of: [[[x y] z] w] + // NOTE: Performance is sensitive to the exact formulation here + let init = utf8_first_byte(x, 2); + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let y = unsafe { *bytes.next().unwrap_unchecked() }; + let mut ch = utf8_acc_cont_byte(init, y); + if x >= 0xe0 { + // [[x y z] w] case + // 5th bit in 0xE0 .. 0xEF is always clear, so `init` is still valid + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let z = unsafe { *bytes.next().unwrap_unchecked() }; + let y_z = utf8_acc_cont_byte((y & CONT_MASK) as u32, z); + ch = init << 12 | y_z; + if x >= 0xf0 { + // [x y z w] case + // use only the lower 3 bits of `init` + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let w = unsafe { *bytes.next().unwrap_unchecked() }; + ch = (init & 7) << 18 | utf8_acc_cont_byte(y_z, w); + } + } + + Some(ch) +} + +/// # Safety +/// +/// `bytes` must produce a semi-valid UTF-8 string +#[inline] +pub(crate) unsafe fn next_code_point_reverse<'a, I: DoubleEndedIterator>( + bytes: &mut I, +) -> Option { + // Decode UTF-8 + let w = match *bytes.next_back()? { + next_byte if next_byte < 128 => return Some(next_byte as u32), + back_byte => back_byte, + }; + + // Multibyte case follows + // Decode from a byte combination out of: [x [y [z w]]] + let mut ch; + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let z = unsafe { *bytes.next_back().unwrap_unchecked() }; + ch = utf8_first_byte(z, 2); + if utf8_is_cont_byte(z) { + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let y = unsafe { *bytes.next_back().unwrap_unchecked() }; + ch = utf8_first_byte(y, 3); + if utf8_is_cont_byte(y) { + // SAFETY: `bytes` produces an UTF-8-like string, + // so the iterator must produce a value here. + let x = unsafe { *bytes.next_back().unwrap_unchecked() }; + ch = utf8_first_byte(x, 4); + ch = utf8_acc_cont_byte(ch, y); + } + ch = utf8_acc_cont_byte(ch, z); + } + ch = utf8_acc_cont_byte(ch, w); + + Some(ch) +} + +#[inline(always)] +pub(crate) fn run_utf8_semi_validation(v: &[u8]) -> Result<(), Utf8Error> { + let mut index = 0; + let len = v.len(); + + let usize_bytes = std::mem::size_of::(); + let ascii_block_size = 2 * usize_bytes; + let blocks_end = if len >= ascii_block_size { + len - ascii_block_size + 1 + } else { + 0 + }; + let align = v.as_ptr().align_offset(usize_bytes); + + while index < len { + let old_offset = index; + macro_rules! err { + ($error_len:expr) => { + return Err(Utf8Error { + valid_up_to: old_offset, + error_len: $error_len, + }) + }; + } + + macro_rules! next { + () => {{ + index += 1; + // we needed data, but there was none: error! + if index >= len { + err!(None) + } + v[index] + }}; + } + + let first = v[index]; + if first >= 128 { + let w = utf8_char_width(first); + // 2-byte encoding is for codepoints \u{0080} to \u{07ff} + // first C2 80 last DF BF + // 3-byte encoding is for codepoints \u{0800} to \u{ffff} + // first E0 A0 80 last EF BF BF + // INCLUDING surrogates codepoints \u{d800} to \u{dfff} + // ED A0 80 to ED BF BF + // 4-byte encoding is for codepoints \u{1000}0 to \u{10ff}ff + // first F0 90 80 80 last F4 8F BF BF + // + // Use the UTF-8 syntax from the RFC + // + // https://tools.ietf.org/html/rfc3629 + // UTF8-1 = %x00-7F + // UTF8-2 = %xC2-DF UTF8-tail + // UTF8-3 = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) / + // %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail ) + // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) / + // %xF4 %x80-8F 2( UTF8-tail ) + match w { + 2 => { + if next!() as i8 >= -64 { + err!(Some(1)) + } + } + 3 => { + match (first, next!()) { + (0xe0, 0xa0..=0xbf) | (0xe1..=0xef, 0x80..=0xbf) => {} /* INCLUDING surrogate codepoints here */ + _ => err!(Some(1)), + } + if next!() as i8 >= -64 { + err!(Some(2)) + } + } + 4 => { + match (first, next!()) { + (0xf0, 0x90..=0xbf) | (0xf1..=0xf3, 0x80..=0xbf) | (0xf4, 0x80..=0x8f) => {} + _ => err!(Some(1)), + } + if next!() as i8 >= -64 { + err!(Some(2)) + } + if next!() as i8 >= -64 { + err!(Some(3)) + } + } + _ => err!(Some(1)), + } + index += 1; + } else { + // Ascii case, try to skip forward quickly. + // When the pointer is aligned, read 2 words of data per iteration + // until we find a word containing a non-ascii byte. + if align != usize::MAX && align.wrapping_sub(index) % usize_bytes == 0 { + let ptr = v.as_ptr(); + while index < blocks_end { + // SAFETY: since `align - index` and `ascii_block_size` are + // multiples of `usize_bytes`, `block = ptr.add(index)` is + // always aligned with a `usize` so it's safe to dereference + // both `block` and `block.add(1)`. + unsafe { + let block = ptr.add(index) as *const usize; + // break if there is a nonascii byte + let zu = contains_nonascii(*block); + let zv = contains_nonascii(*block.add(1)); + if zu || zv { + break; + } + } + index += ascii_block_size; + } + // step from the point where the wordwise loop stopped + while index < len && v[index] < 128 { + index += 1; + } + } else { + index += 1; + } + } + } + + Ok(()) +} + +#[inline(always)] +pub(crate) const fn run_utf8_full_validation_from_semi(v: &[u8]) -> Result<(), Utf8Error> { + // this function checks for surrogate codepoints, between \u{d800} to \u{dfff}, + // or ED A0 80 to ED BF BF of width 3 unicode chars. The valid range of width 3 + // characters is ED 80 80 to ED BF BF, so we need to check for an ED byte + // followed by a >=A0 byte. + let mut index = 0; + while index + 3 <= v.len() { + if v[index] == 0xed && v[index + 1] >= 0xa0 { + return Err(Utf8Error { + valid_up_to: index, + error_len: Some(1), + }); + } + index += 1; + } + + Ok(()) +} + +#[inline] +pub(crate) const fn utf8_char_width(first_byte: u8) -> usize { + const UTF8_CHAR_WIDTH: [u8; 256] = [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + + UTF8_CHAR_WIDTH[first_byte as usize] as _ +} + +#[inline] +const fn contains_nonascii(x: usize) -> bool { + const NONASCII_MASK: usize = usize::from_ne_bytes([0x80; std::mem::size_of::()]); + (x & NONASCII_MASK) != 0 +} + +#[cold] +#[track_caller] +pub(crate) fn slice_error_fail(s: &JavaStr, begin: usize, end: usize) -> ! { + const MAX_DISPLAY_LENGTH: usize = 256; + let trunc_len = s.floor_char_boundary(MAX_DISPLAY_LENGTH); + let s_trunc = &s[..trunc_len]; + let ellipsis = if trunc_len < s.len() { "[...]" } else { "" }; + + // 1. out of bounds + if begin > s.len() || end > s.len() { + let oob_index = if begin > s.len() { begin } else { end }; + panic!("byte index {oob_index} is out of bounds of `{s_trunc}`{ellipsis}"); + } + + // 2. begin <= end + assert!( + begin <= end, + "begin <= end ({} <= {}) when slicing `{}`{}", + begin, + end, + s_trunc, + ellipsis + ); + + // 3. character boundary + let index = if !s.is_char_boundary(begin) { + begin + } else { + end + }; + // find the character + let char_start = s.floor_char_boundary(index); + // `char_start` must be less than len and a char boundary + let ch = s[char_start..].chars().next().unwrap(); + let char_range = char_start..char_start + ch.len_utf8(); + panic!( + "byte index {} is not a char boundary; it is inside {:?} (bytes {:?}) of `{}`{}", + index, ch, char_range, s_trunc, ellipsis + ); +} + +#[cold] +#[track_caller] +pub(crate) fn str_end_index_len_fail(index: usize, len: usize) -> ! { + panic!("range end index {index} out of range for JavaStr of length {len}"); +} + +#[cold] +#[track_caller] +pub(crate) fn str_index_order_fail(index: usize, end: usize) -> ! { + panic!("JavaStr index starts at {index} but ends at {end}"); +} + +#[cold] +#[track_caller] +pub(crate) fn str_start_index_overflow_fail() -> ! { + panic!("attempted to index JavaStr from after maximum usize"); +} + +#[cold] +#[track_caller] +pub(crate) fn str_end_index_overflow_fail() -> ! { + panic!("attempted to index JavaStr up to maximum usize") +} + +#[inline] +#[track_caller] +pub(crate) fn to_range_checked(range: R, bounds: RangeTo) -> Range +where + R: RangeBounds, +{ + let len = bounds.end; + + let start = range.start_bound(); + let start = match start { + Bound::Included(&start) => start, + Bound::Excluded(start) => start + .checked_add(1) + .unwrap_or_else(|| str_start_index_overflow_fail()), + Bound::Unbounded => 0, + }; + + let end: Bound<&usize> = range.end_bound(); + let end = match end { + Bound::Included(end) => end + .checked_add(1) + .unwrap_or_else(|| str_end_index_overflow_fail()), + Bound::Excluded(&end) => end, + Bound::Unbounded => len, + }; + + if start > end { + str_index_order_fail(start, end); + } + if end > len { + str_end_index_len_fail(end, len); + } + + Range { start, end } +} diff --git a/vendor/valence/crates/valence_advancement/Cargo.toml b/vendor/valence/crates/valence_advancement/Cargo.toml new file mode 100644 index 00000000..a74d009b --- /dev/null +++ b/vendor/valence/crates/valence_advancement/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "valence_advancement" +description = "Advancement support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +valence_server.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +bevy_hierarchy.workspace = true +derive_more.workspace = true +rustc-hash.workspace = true diff --git a/vendor/valence/crates/valence_advancement/README.md b/vendor/valence/crates/valence_advancement/README.md new file mode 100644 index 00000000..4aa5d3ab --- /dev/null +++ b/vendor/valence/crates/valence_advancement/README.md @@ -0,0 +1,7 @@ +# valence_advancement + +Everything related to Minecraft advancements. + +### Warning +- Each advancement should be scheduled to be sent to each unique client. +- Advancement identifier is not mutable and changing it can cause bugs. \ No newline at end of file diff --git a/vendor/valence/crates/valence_advancement/src/event.rs b/vendor/valence/crates/valence_advancement/src/event.rs new file mode 100644 index 00000000..7dfaf67f --- /dev/null +++ b/vendor/valence/crates/valence_advancement/src/event.rs @@ -0,0 +1,29 @@ +use bevy_ecs::prelude::*; +use valence_server::event_loop::PacketEvent; +use valence_server::protocol::packets::play::AdvancementTabC2s; +use valence_server::Ident; + +/// This event sends when the client changes or closes advancement's tab. +#[derive(Event, Clone, PartialEq, Eq, Debug)] +pub struct AdvancementTabChangeEvent { + pub client: Entity, + /// If None then the client has closed advancement's tabs. + pub opened_tab: Option, +} + +pub(crate) fn handle_advancement_tab_change( + mut packets: EventReader, + mut advancement_tab_change_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + advancement_tab_change_events.send(AdvancementTabChangeEvent { + client: packet.client, + opened_tab: match pkt { + AdvancementTabC2s::ClosedScreen => None, + AdvancementTabC2s::OpenedTab { tab_id } => Some(tab_id.into()), + }, + }) + } + } +} diff --git a/vendor/valence/crates/valence_advancement/src/lib.rs b/vendor/valence/crates/valence_advancement/src/lib.rs new file mode 100644 index 00000000..78521c6f --- /dev/null +++ b/vendor/valence/crates/valence_advancement/src/lib.rs @@ -0,0 +1,489 @@ +#![doc = include_str!("../README.md")] +#![allow(clippy::type_complexity)] + +pub mod event; + +use std::borrow::Cow; +use std::io::Write; +use std::time::{SystemTime, UNIX_EPOCH}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::system::SystemParam; +pub use bevy_hierarchy; +use bevy_hierarchy::{Children, HierarchyPlugin, Parent}; +use derive_more::{Deref, DerefMut}; +use event::{handle_advancement_tab_change, AdvancementTabChangeEvent}; +use rustc_hash::FxHashMap; +use valence_server::client::{Client, FlushPacketsSet, SpawnClientsSet}; +use valence_server::protocol::packets::play::{ + advancement_update_s2c as packet, SelectAdvancementTabS2c, +}; +use valence_server::protocol::{ + anyhow, packet_id, Encode, Packet, PacketSide, PacketState, RawBytes, VarInt, WritePacket, +}; +use valence_server::{Ident, ItemStack, Text}; + +pub struct AdvancementPlugin; + +#[derive(SystemSet, Clone, Copy, Eq, PartialEq, Hash, Debug)] +pub struct WriteAdvancementPacketToClientsSet; + +#[derive(SystemSet, Clone, Copy, Eq, PartialEq, Hash, Debug)] +pub struct WriteAdvancementToCacheSet; + +impl Plugin for AdvancementPlugin { + fn build(&self, app: &mut bevy_app::App) { + app.add_plugins(HierarchyPlugin) + .configure_sets( + PostUpdate, + ( + WriteAdvancementPacketToClientsSet.before(FlushPacketsSet), + WriteAdvancementToCacheSet.before(WriteAdvancementPacketToClientsSet), + ), + ) + .add_event::() + .add_systems( + PreUpdate, + ( + add_advancement_update_component_to_new_clients.after(SpawnClientsSet), + handle_advancement_tab_change, + ), + ) + .add_systems( + PostUpdate, + ( + update_advancement_cached_bytes.in_set(WriteAdvancementToCacheSet), + send_advancement_update_packet.in_set(WriteAdvancementPacketToClientsSet), + ), + ); + } +} + +/// Components for advancement that are required +/// Optional components: +/// [AdvancementDisplay] +/// [Parent] - parent advancement +#[derive(Bundle)] +pub struct AdvancementBundle { + pub advancement: Advancement, + pub requirements: AdvancementRequirements, + pub cached_bytes: AdvancementCachedBytes, +} + +fn add_advancement_update_component_to_new_clients( + mut commands: Commands, + query: Query>, +) { + for client in query.iter() { + commands + .entity(client) + .insert(AdvancementClientUpdate::default()); + } +} + +#[derive(SystemParam, Debug)] +struct UpdateAdvancementCachedBytesQuery<'w, 's> { + advancement_id_query: Query<'w, 's, &'static Advancement>, + criteria_query: Query<'w, 's, &'static AdvancementCriteria>, +} + +impl<'w, 's> UpdateAdvancementCachedBytesQuery<'w, 's> { + fn write( + &self, + a_identifier: &Advancement, + a_requirements: &AdvancementRequirements, + a_display: Option<&AdvancementDisplay>, + a_children: Option<&Children>, + a_parent: Option<&Parent>, + w: impl Write, + ) -> anyhow::Result<()> { + let Self { + advancement_id_query, + criteria_query, + } = self; + + let mut pkt = packet::Advancement { + parent_id: None, + display_data: None, + criteria: vec![], + requirements: vec![], + sends_telemetry_data: false, + }; + + if let Some(a_parent) = a_parent { + let a_identifier = advancement_id_query.get(a_parent.get())?; + pkt.parent_id = Some(a_identifier.0.borrowed()); + } + + if let Some(a_display) = a_display { + pkt.display_data = Some(packet::AdvancementDisplay { + title: Cow::Borrowed(&a_display.title), + description: Cow::Borrowed(&a_display.description), + icon: &a_display.icon, + frame_type: VarInt(a_display.frame_type as _), + flags: a_display.flags(), + background_texture: a_display.background_texture.as_ref().map(|v| v.borrowed()), + x_coord: a_display.x_coord, + y_coord: a_display.y_coord, + }); + } + + if let Some(a_children) = a_children { + for a_child in a_children.iter() { + let Ok(c_identifier) = criteria_query.get(*a_child) else { + continue; + }; + pkt.criteria.push((c_identifier.0.borrowed(), ())); + } + } + + for requirements in a_requirements.0.iter() { + let mut requirements_p = vec![]; + for requirement in requirements { + let c_identifier = criteria_query.get(*requirement)?; + requirements_p.push(c_identifier.0.as_str()); + } + pkt.requirements.push(packet::AdvancementRequirements { + requirement: requirements_p, + }); + } + + (&a_identifier.0, pkt).encode(w) + } +} + +fn update_advancement_cached_bytes( + mut query: Query< + ( + &Advancement, + &AdvancementRequirements, + &mut AdvancementCachedBytes, + Option<&AdvancementDisplay>, + Option<&Children>, + Option<&Parent>, + ), + Or<( + Changed, + Changed, + Changed, + Changed, + )>, + >, + update_advancement_cached_bytes_query: UpdateAdvancementCachedBytesQuery, +) { + for (a_identifier, a_requirements, mut a_bytes, a_display, a_children, a_parent) in + query.iter_mut() + { + a_bytes.0.clear(); + update_advancement_cached_bytes_query + .write( + a_identifier, + a_requirements, + a_display, + a_children, + a_parent, + &mut a_bytes.0, + ) + .expect("Failed to write an advancement"); + } +} + +#[derive(SystemParam, Debug)] +#[allow(clippy::type_complexity)] +pub(crate) struct SingleAdvancementUpdateQuery<'w, 's> { + advancement_bytes_query: Query<'w, 's, &'static AdvancementCachedBytes>, + advancement_id_query: Query<'w, 's, &'static Advancement>, + criteria_query: Query<'w, 's, &'static AdvancementCriteria>, + parent_query: Query<'w, 's, &'static Parent>, +} + +#[derive(Debug)] +pub(crate) struct AdvancementUpdateEncodeS2c<'w, 's, 'a> { + client_update: AdvancementClientUpdate, + queries: &'a SingleAdvancementUpdateQuery<'w, 's>, +} + +impl<'w, 's, 'a> Encode for AdvancementUpdateEncodeS2c<'w, 's, 'a> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + let SingleAdvancementUpdateQuery { + advancement_bytes_query, + advancement_id_query, + criteria_query, + parent_query, + } = self.queries; + + let AdvancementClientUpdate { + new_advancements, + remove_advancements, + progress, + force_tab_update: _, + reset, + } = &self.client_update; + + let mut pkt = packet::GenericAdvancementUpdateS2c { + reset: *reset, + advancement_mapping: vec![], + identifiers: vec![], + progress_mapping: vec![], + }; + + for new_advancement in new_advancements { + let a_cached_bytes = advancement_bytes_query.get(*new_advancement)?; + pkt.advancement_mapping + .push(RawBytes(a_cached_bytes.0.as_slice())); + } + + for remove_advancement in remove_advancements { + let a_identifier = advancement_id_query.get(*remove_advancement)?; + pkt.identifiers.push(a_identifier.0.borrowed()); + } + + let mut progress_mapping: FxHashMap)>> = + FxHashMap::default(); + for progress in progress { + let a = parent_query.get(progress.0)?; + progress_mapping + .entry(a.get()) + .and_modify(|v| v.push(*progress)) + .or_insert(vec![*progress]); + } + + for (a, c_progresses) in progress_mapping { + let a_identifier = advancement_id_query.get(a)?; + let mut c_progresses_p = vec![]; + for (c, c_progress) in c_progresses { + let c_identifier = criteria_query.get(c)?; + c_progresses_p.push(packet::AdvancementCriteria { + criterion_identifier: c_identifier.0.borrowed(), + criterion_progress: c_progress, + }); + } + pkt.progress_mapping + .push((a_identifier.0.borrowed(), c_progresses_p)); + } + + pkt.encode(w) + } +} + +impl<'w, 's, 'a> Packet for AdvancementUpdateEncodeS2c<'w, 's, 'a> { + const ID: i32 = packet_id::ADVANCEMENT_UPDATE_S2C; + const NAME: &'static str = "AdvancementUpdateEncodeS2c"; + const SIDE: PacketSide = PacketSide::Clientbound; + const STATE: PacketState = PacketState::Play; +} + +#[allow(clippy::type_complexity)] +fn send_advancement_update_packet( + mut client: Query<(&mut AdvancementClientUpdate, &mut Client)>, + update_single_query: SingleAdvancementUpdateQuery, +) { + for (mut advancement_client_update, mut client) in client.iter_mut() { + match advancement_client_update.force_tab_update { + ForceTabUpdate::None => {} + ForceTabUpdate::First => { + client.write_packet(&SelectAdvancementTabS2c { identifier: None }) + } + ForceTabUpdate::Spec(spec) => { + if let Ok(a_identifier) = update_single_query.advancement_id_query.get(spec) { + client.write_packet(&SelectAdvancementTabS2c { + identifier: Some(a_identifier.0.borrowed()), + }); + } + } + } + + if ForceTabUpdate::None != advancement_client_update.force_tab_update { + advancement_client_update.force_tab_update = ForceTabUpdate::None; + } + + if advancement_client_update.new_advancements.is_empty() + && advancement_client_update.progress.is_empty() + && advancement_client_update.remove_advancements.is_empty() + && !advancement_client_update.reset + { + continue; + } + + let advancement_client_update = std::mem::replace( + advancement_client_update.as_mut(), + AdvancementClientUpdate { + reset: false, + ..Default::default() + }, + ); + + client.write_packet(&AdvancementUpdateEncodeS2c { + queries: &update_single_query, + client_update: advancement_client_update, + }); + } +} + +/// Advancement's id. May not be updated. +#[derive(Component, Deref)] +pub struct Advancement(Ident); + +impl Advancement { + pub fn new(ident: Ident) -> Advancement { + Self(ident) + } + + pub fn get(&self) -> &Ident { + &self.0 + } +} + +#[derive(Clone, Copy)] +pub enum AdvancementFrameType { + Task, + Challenge, + Goal, +} + +/// Advancement display. Optional component +#[derive(Component)] +pub struct AdvancementDisplay { + pub title: Text, + pub description: Text, + pub icon: ItemStack, + pub frame_type: AdvancementFrameType, + pub show_toast: bool, + pub hidden: bool, + pub background_texture: Option, + pub x_coord: f32, + pub y_coord: f32, +} + +impl AdvancementDisplay { + pub(crate) fn flags(&self) -> i32 { + let mut flags = 0; + flags |= self.background_texture.is_some() as i32; + flags |= (self.show_toast as i32) << 1; + flags |= (self.hidden as i32) << 2; + flags + } +} + +/// Criteria's identifier. May not be updated +#[derive(Component, Deref)] +pub struct AdvancementCriteria(Ident); + +impl AdvancementCriteria { + pub fn new(ident: Ident) -> Self { + Self(ident) + } + + pub fn get(&self) -> &Ident { + &self.0 + } +} + +/// Requirements for advancement to be completed. +/// All columns should be completed, column is completed when any of criteria in +/// this column is completed. +#[derive(Component, Default, Deref, DerefMut)] +pub struct AdvancementRequirements(pub Vec>); + +#[derive(Component, Default)] +pub struct AdvancementCachedBytes(pub(crate) Vec); + +#[derive(Default, Debug, PartialEq)] +pub enum ForceTabUpdate { + #[default] + None, + First, + /// Should contain only root advancement otherwise the first will be chosen + Spec(Entity), +} + +#[derive(Component, Debug)] +pub struct AdvancementClientUpdate { + /// Which advancement's descriptions send to client + pub new_advancements: Vec, + /// Which advancements remove from client + pub remove_advancements: Vec, + /// Criteria progress update. + /// If None then criteria is not done otherwise it is done + pub progress: Vec<(Entity, Option)>, + /// Forces client to open a tab + pub force_tab_update: ForceTabUpdate, + /// Defines if other advancements should be removed. + /// Also with this flag, client will not show a toast for advancements, + /// which are completed. When the packet is sent, turns to false + pub reset: bool, +} + +impl Default for AdvancementClientUpdate { + fn default() -> Self { + Self { + new_advancements: vec![], + remove_advancements: vec![], + progress: vec![], + force_tab_update: ForceTabUpdate::default(), + reset: true, + } + } +} + +impl AdvancementClientUpdate { + pub(crate) fn walk_advancements( + root: Entity, + children_query: &Query<&Children>, + advancement_check_query: &Query<(), With>, + func: &mut impl FnMut(Entity), + ) { + func(root); + if let Ok(children) = children_query.get(root) { + for child in children.iter() { + let child = *child; + if advancement_check_query.get(child).is_ok() { + Self::walk_advancements(child, children_query, advancement_check_query, func); + } + } + } + } + + /// Sends all advancements from the root + pub fn send_advancements( + &mut self, + root: Entity, + children_query: &Query<&Children>, + advancement_check_query: &Query<(), With>, + ) { + Self::walk_advancements(root, children_query, advancement_check_query, &mut |e| { + self.new_advancements.push(e) + }); + } + + /// Removes all advancements from the root + pub fn remove_advancements( + &mut self, + root: Entity, + children_query: &Query<&Children>, + advancement_check_query: &Query<(), With>, + ) { + Self::walk_advancements(root, children_query, advancement_check_query, &mut |e| { + self.remove_advancements.push(e) + }); + } + + /// Marks criteria as done + pub fn criteria_done(&mut self, criteria: Entity) { + self.progress.push(( + criteria, + Some( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis() as i64, + ), + )) + } + + /// Marks criteria as undone + pub fn criteria_undone(&mut self, criteria: Entity) { + self.progress.push((criteria, None)) + } +} diff --git a/vendor/valence/crates/valence_anvil/Cargo.toml b/vendor/valence/crates/valence_anvil/Cargo.toml new file mode 100644 index 00000000..8d8abd24 --- /dev/null +++ b/vendor/valence/crates/valence_anvil/Cargo.toml @@ -0,0 +1,28 @@ +[package] +name = "valence_anvil" +description = "Anvil file format support for Valence" +readme = "README.md" +keywords = ["anvil", "minecraft", "deserialization"] +version = "0.1.0" +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[features] +bevy_plugin = ["dep:bevy_app", "dep:bevy_ecs", "dep:flume", "parsing"] +parsing = ["dep:valence_server"] + +[dependencies] +bevy_app = { workspace = true, optional = true } +bevy_ecs = { workspace = true, optional = true } +bitfield-struct.workspace = true +bitvec.workspace = true +byteorder.workspace = true +flate2.workspace = true +flume = { workspace = true, optional = true } +lru.workspace = true +thiserror.workspace = true +valence_bytes.workspace = true +valence_nbt = { workspace = true, features = ["binary"] } +valence_server = { workspace = true, optional = true } diff --git a/vendor/valence/crates/valence_anvil/README.md b/vendor/valence/crates/valence_anvil/README.md new file mode 100644 index 00000000..21c9a515 --- /dev/null +++ b/vendor/valence/crates/valence_anvil/README.md @@ -0,0 +1,3 @@ +# valence_anvil + +Support for Minecraft's [anvil file format](https://minecraft.wiki/w/Anvil_file_format). diff --git a/vendor/valence/crates/valence_anvil/src/bevy.rs b/vendor/valence/crates/valence_anvil/src/bevy.rs new file mode 100644 index 00000000..f810877a --- /dev/null +++ b/vendor/valence/crates/valence_anvil/src/bevy.rs @@ -0,0 +1,270 @@ +use std::collections::hash_map::Entry; +use std::collections::{HashMap, HashSet}; +use std::path::PathBuf; +use std::thread; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use flume::{Receiver, Sender}; +use valence_entity::{EntityLayerId, OldEntityLayerId}; +use valence_server::client::{Client, OldView, View}; +use valence_server::layer::UpdateLayersPreClientSet; +use valence_server::protocol::anyhow; +use valence_server::registry::BiomeRegistry; +use valence_server::{ChunkLayer, ChunkPos}; + +use crate::parsing::{DimensionFolder, ParsedChunk}; + +type WorkerResult = anyhow::Result>; + +/// The order in which chunks should be processed by the anvil worker. Smaller +/// values are sent first. +type Priority = u64; + +#[derive(Component, Debug)] +pub struct AnvilLevel { + /// Chunk worker state to be moved to another thread. + worker_state: Option, + /// The set of chunk positions that should not be loaded or unloaded by + /// the anvil system. + /// + /// This set is empty by default, but you can modify it at any time. + pub ignored_chunks: HashSet, + /// Chunks that need to be loaded. Chunks with `None` priority have already + /// been sent to the anvil thread. + pending: HashMap>, + /// Sender for the chunk worker thread. + sender: Sender, + /// Receiver for the chunk worker thread. + receiver: Receiver<(ChunkPos, WorkerResult)>, +} + +impl AnvilLevel { + pub fn new(world_root: impl Into, biomes: &BiomeRegistry) -> Self { + let (pending_sender, pending_receiver) = flume::unbounded(); + let (finished_sender, finished_receiver) = flume::bounded(4096); + + Self { + worker_state: Some(ChunkWorkerState { + dimension_folder: DimensionFolder::new(world_root, biomes), + sender: finished_sender, + receiver: pending_receiver, + }), + ignored_chunks: HashSet::new(), + pending: HashMap::new(), + sender: pending_sender, + receiver: finished_receiver, + } + } + + /// Forces a chunk to be loaded at a specific position in this world. This + /// will bypass [`AnvilLevel::ignored_chunks`]. + /// Note that the chunk will be unloaded next tick unless it has been added + /// to [`AnvilLevel::ignored_chunks`] or it is in view of a client. + /// + /// This has no effect if a chunk at the position is already present. + pub fn force_chunk_load(&mut self, pos: ChunkPos) { + match self.pending.entry(pos) { + Entry::Occupied(oe) => { + // If the chunk is already scheduled to load but hasn't been sent to the chunk + // worker yet, then give it the highest priority. + if let Some(priority) = oe.into_mut() { + *priority = 0; + } + } + Entry::Vacant(ve) => { + ve.insert(Some(0)); + } + } + } +} + +#[derive(Debug)] +struct ChunkWorkerState { + /// The world folder containing the region folder where chunks are loaded + /// from. + dimension_folder: DimensionFolder, + /// Sender of finished chunks. + sender: Sender<(ChunkPos, WorkerResult)>, + /// Receiver of pending chunks. + receiver: Receiver, +} + +pub struct AnvilPlugin; + +impl Plugin for AnvilPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_event::() + .add_systems(PreUpdate, remove_unviewed_chunks) + .add_systems( + PostUpdate, + (init_anvil, update_client_views, send_recv_chunks) + .chain() + .before(UpdateLayersPreClientSet), + ); + } +} + +fn init_anvil(mut query: Query<&mut AnvilLevel, (Added, With)>) { + for mut level in &mut query { + if let Some(state) = level.worker_state.take() { + thread::spawn(move || anvil_worker(state)); + } + } +} + +/// Removes all chunks no longer viewed by clients. +/// +/// This needs to run in `PreUpdate` where the chunk viewer counts have been +/// updated from the previous tick. +fn remove_unviewed_chunks( + mut chunk_layers: Query<(Entity, &mut ChunkLayer, &AnvilLevel)>, + mut unload_events: EventWriter, +) { + for (entity, mut layer, anvil) in &mut chunk_layers { + layer.retain_chunks(|pos, chunk| { + if chunk.viewer_count_mut() > 0 || anvil.ignored_chunks.contains(&pos) { + true + } else { + unload_events.send(ChunkUnloadEvent { + chunk_layer: entity, + pos, + }); + false + } + }); + } +} + +fn update_client_views( + clients: Query<(&EntityLayerId, Ref, View, OldView), With>, + mut chunk_layers: Query<(&ChunkLayer, &mut AnvilLevel)>, +) { + for (loc, old_loc, view, old_view) in &clients { + let view = view.get(); + let old_view = old_view.get(); + + if loc != &*old_loc || view != old_view || old_loc.is_added() { + let Ok((layer, mut anvil)) = chunk_layers.get_mut(loc.0) else { + continue; + }; + + let queue_pos = |pos| { + if !anvil.ignored_chunks.contains(&pos) && layer.chunk(pos).is_none() { + // Chunks closer to clients are prioritized. + match anvil.pending.entry(pos) { + Entry::Occupied(mut oe) => { + if let Some(priority) = oe.get_mut() { + let dist = view.pos.distance_squared(pos); + *priority = (*priority).min(dist); + } + } + Entry::Vacant(ve) => { + let dist = view.pos.distance_squared(pos); + ve.insert(Some(dist)); + } + } + } + }; + + // Queue all the new chunks in the view to be sent to the anvil worker. + if old_loc.is_added() { + view.iter().for_each(queue_pos); + } else { + view.diff(old_view).for_each(queue_pos); + } + } + } +} + +fn send_recv_chunks( + mut layers: Query<(Entity, &mut ChunkLayer, &mut AnvilLevel)>, + mut to_send: Local>, + mut load_events: EventWriter, +) { + for (entity, mut layer, anvil) in &mut layers { + let anvil = anvil.into_inner(); + + // Insert the chunks that are finished loading into the chunk layer and send + // load events. + for (pos, res) in anvil.receiver.drain() { + anvil.pending.remove(&pos); + + let status = match res { + Ok(Some(ParsedChunk { chunk, timestamp })) => { + layer.insert_chunk(pos, chunk); + ChunkLoadStatus::Success { timestamp } + } + Ok(None) => ChunkLoadStatus::Empty, + Err(e) => ChunkLoadStatus::Failed(e), + }; + + load_events.send(ChunkLoadEvent { + chunk_layer: entity, + pos, + status, + }); + } + + // Collect all the new chunks that need to be loaded this tick. + for (pos, priority) in &mut anvil.pending { + if let Some(pri) = priority.take() { + to_send.push((pri, *pos)); + } + } + + // Sort chunks by ascending priority. + to_send.sort_unstable_by_key(|(pri, _)| *pri); + + // Send the sorted chunks to be loaded. + for (_, pos) in to_send.drain(..) { + let _ = anvil.sender.try_send(pos); + } + } +} + +fn anvil_worker(mut state: ChunkWorkerState) { + while let Ok(pos) = state.receiver.recv() { + let res = state + .dimension_folder + .get_chunk(pos) + .map_err(anyhow::Error::from); + + let _ = state.sender.send((pos, res)); + } +} + +/// An event sent by `valence_anvil` after an attempt to load a chunk is made. +#[derive(Event, Debug)] +pub struct ChunkLoadEvent { + /// The [`ChunkLayer`] where the chunk is located. + pub chunk_layer: Entity, + /// The position of the chunk in the layer. + pub pos: ChunkPos, + pub status: ChunkLoadStatus, +} + +#[derive(Debug)] +pub enum ChunkLoadStatus { + /// A new chunk was successfully loaded and inserted into the layer. + Success { + /// The time this chunk was last modified, measured in seconds since the + /// epoch. + timestamp: u32, + }, + /// The Anvil level does not have a chunk at the position. No chunk was + /// loaded. + Empty, + /// An attempt was made to load the chunk, but something went wrong. + Failed(anyhow::Error), +} + +/// An event sent by `valence_anvil` when a chunk is unloaded from an layer. +#[derive(Event, Debug)] +pub struct ChunkUnloadEvent { + /// The [`ChunkLayer`] where the chunk was unloaded. + pub chunk_layer: Entity, + /// The position of the chunk that was unloaded. + pub pos: ChunkPos, +} diff --git a/vendor/valence/crates/valence_anvil/src/lib.rs b/vendor/valence/crates/valence_anvil/src/lib.rs new file mode 100644 index 00000000..5d535c14 --- /dev/null +++ b/vendor/valence/crates/valence_anvil/src/lib.rs @@ -0,0 +1,759 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use std::fs::{DirEntry, File}; +use std::hash::Hash; +use std::io::{Cursor, ErrorKind, Read, Seek, SeekFrom, Write}; +use std::num::NonZeroUsize; +use std::path::{Path, PathBuf}; +use std::time::{SystemTime, UNIX_EPOCH}; + +#[cfg(feature = "bevy_plugin")] +pub use bevy::*; +use bitfield_struct::bitfield; +use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; +use flate2::bufread::{GzDecoder, ZlibDecoder}; +use flate2::write::{GzEncoder, ZlibEncoder}; +use lru::LruCache; +use thiserror::Error; +use valence_nbt::Compound; +use valence_nbt::binary::{FromModifiedUtf8, ToModifiedUtf8}; + +#[cfg(feature = "bevy_plugin")] +mod bevy; +#[cfg(feature = "parsing")] +pub mod parsing; + +const LRU_CACHE_SIZE: NonZeroUsize = match NonZeroUsize::new(256) { + Some(n) => n, + None => unreachable!(), +}; + +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum RegionError { + #[error("an I/O error occurred: {0}")] + Io(#[from] std::io::Error), + #[error("failed to convert OsString")] + OsStringConv, + #[error("chunk is allocated, but stream is missing")] + MissingChunkStream, + #[error("invalid chunk sector offset")] + InvalidChunkSectorOffset, + #[error("invalid chunk size")] + InvalidChunkSize, + #[error("invalid compression scheme number of {0}")] + InvalidCompressionScheme(u8), + #[error("failed to parse NBT: {0}")] + Nbt(#[from] valence_nbt::binary::Error), + #[error("not all chunk NBT data was read")] + TrailingNbtData, + #[error("oversized chunk")] + OversizedChunk, +} + +#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)] +#[repr(u8)] +#[non_exhaustive] +pub enum Compression { + Gzip = 1, + #[default] + Zlib = 2, + None = 3, +} + +impl Compression { + fn from_u8(compression: u8) -> Option { + match compression { + 1 => Some(Compression::Gzip), + 2 => Some(Compression::Zlib), + 3 => Some(Compression::None), + _ => None, + } + } +} + +#[derive(Copy, Clone, Debug, Default)] +#[non_exhaustive] +pub struct WriteOptions { + /// Set the compression method used to write chunks. This can be useful to + /// change in order to write anvil files compatible with older Minecraft + /// versions. + pub compression: Compression, + + /// Set whether to skip writing oversized chunks (>1MiB after compression). + /// Versions older than 1.15 (19w36a) cannot read oversized chunks, so this + /// may be useful for writing region files compatible with those + /// versions. + pub skip_oversized_chunks: bool, +} + +#[derive(Debug)] +pub struct RegionFolder { + /// Region files. An LRU cache is used to limit the number of open file + /// handles. + regions: LruCache, + /// Path to the directory containing the region files and chunk files. + region_root: PathBuf, + /// Scratch buffer for (de)compression. + compression_buf: Vec, + /// Options to use for writing the chunk. + pub write_options: WriteOptions, +} + +impl RegionFolder { + pub fn new(region_root: impl Into) -> Self { + Self { + regions: LruCache::new(LRU_CACHE_SIZE), + region_root: region_root.into(), + compression_buf: Vec::new(), + write_options: WriteOptions::default(), + } + } + + fn region<'a>( + regions: &'a mut LruCache, + region_root: &Path, + region_x: i32, + region_z: i32, + ) -> Result, RegionError> { + // Need to double get the entry from the cache to make the borrow checker happy. + // Polonius will fix this eventually. + if regions.get_mut(&(region_x, region_z)).is_some() { + match regions.get_mut(&(region_x, region_z)) { + Some(RegionEntry::Occupied(region)) => return Ok(Some(region)), + Some(RegionEntry::Vacant) => return Ok(None), + None => unreachable!(), + } + } + + let path = region_root.join(format!("r.{region_x}.{region_z}.mca")); + + let file = match File::options().read(true).write(true).open(path) { + Ok(file) => file, + Err(e) if e.kind() == ErrorKind::NotFound => { + regions.put((region_x, region_z), RegionEntry::Vacant); + return Ok(None); + } + Err(e) => return Err(e.into()), + }; + + // TODO: this is ugly. + // TODO: try_get_or_insert_mut + regions.try_get_or_insert((region_x, region_z), || { + Region::open(file).map(|region| RegionEntry::Occupied(Box::new(region))) + })?; + let Some(RegionEntry::Occupied(res)) = regions.get_mut(&(region_x, region_z)) else { + unreachable!() + }; + Ok(Some(res)) + } + + /// Gets the raw chunk at the given chunk position. + /// + /// Returns `Ok(Some(chunk))` if the chunk exists and no errors occurred + /// loading it. Returns `Ok(None)` if the chunk does not exist and no + /// errors occurred attempting to load it. Returns `Err(_)` if an error + /// occurred attempting to load the chunk. + pub fn get_chunk( + &mut self, + pos_x: i32, + pos_z: i32, + ) -> Result>, RegionError> + where + S: for<'a> FromModifiedUtf8<'a> + Hash + Ord, + { + let region_x = pos_x.div_euclid(32); + let region_z = pos_z.div_euclid(32); + + let Some(region) = Self::region(&mut self.regions, &self.region_root, region_x, region_z)? + else { + return Ok(None); + }; + + region.get_chunk(pos_x, pos_z, &mut self.compression_buf, &self.region_root) + } + + /// Deletes the chunk at the given chunk position, returning whether the + /// chunk existed before it was deleted. + /// + /// Note that this only marks the chunk as deleted so that it cannot be + /// retrieved, and can be overwritten by other chunks later. It does not + /// decrease the size of the region file. + pub fn delete_chunk(&mut self, pos_x: i32, pos_z: i32) -> Result { + let region_x = pos_x.div_euclid(32); + let region_z = pos_z.div_euclid(32); + + let Some(region) = Self::region(&mut self.regions, &self.region_root, region_x, region_z)? + else { + return Ok(false); + }; + + region.delete_chunk(pos_x, pos_z, true, &self.region_root) + } + + /// Sets the raw chunk at the given position, overwriting the old chunk if + /// it exists. + pub fn set_chunk( + &mut self, + pos_x: i32, + pos_z: i32, + chunk: &Compound, + ) -> Result<(), RegionError> + where + S: ToModifiedUtf8 + Hash + Ord, + { + let region_x = pos_x.div_euclid(32); + let region_z = pos_z.div_euclid(32); + + let region = match Self::region(&mut self.regions, &self.region_root, region_x, region_z)? { + Some(region) => region, + None => { + let path = self + .region_root + .join(format!("r.{region_x}.{region_z}.mca")); + + let file = File::options() + .read(true) + .write(true) + .create(true) + .open(path)?; + + // TODO: try_get_or_insert_mut + self.regions.put( + (region_x, region_z), + RegionEntry::Occupied(Box::new(Region::create(file)?)), + ); + let Some(RegionEntry::Occupied(region)) = + self.regions.get_mut(&(region_x, region_z)) + else { + unreachable!() + }; + region + } + }; + + region.set_chunk( + pos_x, + pos_z, + chunk, + self.write_options, + &mut self.compression_buf, + &self.region_root, + ) + } + + /// Returns an iterator over all existing chunks in all regions. + pub fn all_chunk_positions( + &mut self, + ) -> Result> + '_, RegionError> { + fn extract_region_coordinates( + file: std::io::Result, + ) -> Result, RegionError> { + let file = file?; + + if !file.file_type()?.is_file() { + return Ok(None); + } + + let file_name = file + .file_name() + .into_string() + .map_err(|_| RegionError::OsStringConv)?; + + // read the file name as r.x.z.mca + let mut split = file_name.splitn(4, '.'); + if split.next() != Some("r") { + return Ok(None); + } + let Some(Ok(x)) = split.next().map(str::parse) else { + return Ok(None); + }; + let Some(Ok(z)) = split.next().map(str::parse) else { + return Ok(None); + }; + if split.next() != Some("mca") { + return Ok(None); + } + + Ok(Some((x, z))) + } + + fn region_chunks( + this: &mut RegionFolder, + pos: Result<(i32, i32), RegionError>, + ) -> Vec> { + match pos { + Ok((region_x, region_z)) => { + match RegionFolder::region( + &mut this.regions, + &this.region_root, + region_x, + region_z, + ) { + Ok(Some(region)) => region.chunk_positions(region_x, region_z), + Ok(None) => Vec::new(), + Err(err) => vec![Err(err)], + } + } + Err(err) => vec![Err(err)], + } + } + + Ok(std::fs::read_dir(&self.region_root)? + .filter_map(|file| extract_region_coordinates(file).transpose()) + .flat_map(|pos| region_chunks(self, pos))) + } +} + +/// A chunk represented by the raw compound data. +pub struct RawChunk { + pub data: Compound, + pub timestamp: u32, +} + +/// X and Z positions of a region. +type RegionPos = (i32, i32); + +#[derive(Debug)] +enum RegionEntry { + /// There is a region file loaded here. + Occupied(Box), + /// There is no region file at this position. Don't try to read it from the + /// filesystem again. + Vacant, +} + +#[bitfield(u32)] +struct Location { + count: u8, + #[bits(24)] + offset: u32, +} + +impl Location { + fn is_none(self) -> bool { + self.0 == 0 + } + + fn offset_and_count(self) -> (u64, usize) { + (self.offset() as u64, self.count() as usize) + } +} + +#[derive(Debug)] +struct Region { + file: File, + locations: [Location; 1024], + timestamps: [u32; 1024], + used_sectors: bitvec::vec::BitVec, +} + +impl Region { + fn create(mut file: File) -> Result { + let header = [0; SECTOR_SIZE * 2]; + file.write_all(&header)?; + + Ok(Self { + file, + locations: [Location::default(); 1024], + timestamps: [0; 1024], + used_sectors: bitvec::vec::BitVec::repeat(true, 2), + }) + } + + fn open(mut file: File) -> Result { + let mut header = [0; SECTOR_SIZE * 2]; + file.read_exact(&mut header)?; + + let locations = std::array::from_fn(|i| { + Location(u32::from_be_bytes( + header[i * 4..i * 4 + 4].try_into().unwrap(), + )) + }); + let timestamps = std::array::from_fn(|i| { + u32::from_be_bytes( + header[i * 4 + SECTOR_SIZE..i * 4 + SECTOR_SIZE + 4] + .try_into() + .unwrap(), + ) + }); + + let mut used_sectors = bitvec::vec::BitVec::repeat(true, 2); + for location in locations { + if location.is_none() { + // No chunk exists at this position. + continue; + } + + let (sector_offset, sector_count) = location.offset_and_count(); + if sector_offset < 2 { + // skip locations pointing inside the header + continue; + } + if sector_count == 0 { + continue; + } + if sector_offset * SECTOR_SIZE as u64 > file.metadata()?.len() { + // this would go past the end of the file, which is impossible + continue; + } + + Self::reserve_sectors(&mut used_sectors, sector_offset, sector_count); + } + + Ok(Self { + file, + locations, + timestamps, + used_sectors, + }) + } + + fn get_chunk( + &mut self, + pos_x: i32, + pos_z: i32, + decompress_buf: &mut Vec, + region_root: &Path, + ) -> Result>, RegionError> + where + S: for<'a> FromModifiedUtf8<'a> + Hash + Ord, + { + let chunk_idx = Self::chunk_idx(pos_x, pos_z); + + let location = self.locations[chunk_idx]; + let timestamp = self.timestamps[chunk_idx]; + + if location.is_none() { + // No chunk exists at this position. + return Ok(None); + } + + let (sector_offset, sector_count) = location.offset_and_count(); + + // If the sector offset was <2, then the chunk data would be inside the region + // header. That doesn't make any sense. + if sector_offset < 2 { + return Err(RegionError::InvalidChunkSectorOffset); + } + + // Seek to the beginning of the chunk's data. + self.file + .seek(SeekFrom::Start(sector_offset * SECTOR_SIZE as u64))?; + + let exact_chunk_size = self.file.read_u32::()? as usize; + if exact_chunk_size == 0 { + return Err(RegionError::MissingChunkStream); + } + + // size of this chunk in sectors must always be >= the exact size. + if sector_count * SECTOR_SIZE < exact_chunk_size { + return Err(RegionError::InvalidChunkSize); + } + + let mut compression = self.file.read_u8()?; + + let data_buf = if Self::is_external_stream_chunk(compression) { + compression = Self::external_chunk_version(compression); + let mut external_file = + File::open(Self::external_chunk_file(pos_x, pos_z, region_root))?; + let mut buf = Vec::new(); + external_file.read_to_end(&mut buf)?; + buf.into_boxed_slice() + } else { + // the size includes the version of the stream, but we have already read that + let mut data_buf = vec![0; exact_chunk_size - 1].into_boxed_slice(); + self.file.read_exact(&mut data_buf)?; + data_buf + }; + + let r = data_buf.as_ref(); + + decompress_buf.clear(); + + // What compression does the chunk use? + let mut nbt_slice = match Compression::from_u8(compression) { + Some(Compression::Gzip) => { + let mut z = GzDecoder::new(r); + z.read_to_end(decompress_buf)?; + decompress_buf.as_slice() + } + Some(Compression::Zlib) => { + let mut z = ZlibDecoder::new(r); + z.read_to_end(decompress_buf)?; + decompress_buf.as_slice() + } + // Uncompressed + Some(Compression::None) => r, + // Unknown + None => return Err(RegionError::InvalidCompressionScheme(compression)), + }; + + let (data, _) = valence_nbt::from_binary(&mut nbt_slice)?; + + if !nbt_slice.is_empty() { + return Err(RegionError::TrailingNbtData); + } + + Ok(Some(RawChunk { data, timestamp })) + } + + fn delete_chunk( + &mut self, + pos_x: i32, + pos_z: i32, + delete_on_disk: bool, + region_root: &Path, + ) -> Result { + let chunk_idx = Self::chunk_idx(pos_x, pos_z); + + let location = self.locations[chunk_idx]; + if location.is_none() { + // chunk already missing, nothing to delete + return Ok(false); + } + + if delete_on_disk { + self.file.seek(SeekFrom::Start(chunk_idx as u64 * 4))?; + self.file.write_u32::(0)?; + + Self::delete_external_chunk_file(pos_x, pos_z, region_root)?; + } + + let (sector_offset, sector_count) = location.offset_and_count(); + if sector_offset >= 2 { + let start_index = sector_offset as usize; + let end_index = start_index + sector_count; + let len = self.used_sectors.len(); + self.used_sectors[start_index.min(len)..end_index.min(len)].fill(false); + } + + self.locations[chunk_idx] = Location::new(); + + Ok(true) + } + + fn set_chunk( + &mut self, + pos_x: i32, + pos_z: i32, + chunk: &Compound, + options: WriteOptions, + compress_buf: &mut Vec, + region_root: &Path, + ) -> Result<(), RegionError> + where + S: ToModifiedUtf8 + Hash + Ord, + { + // erase the chunk from allocated chunks (not from disk) + self.delete_chunk(pos_x, pos_z, false, region_root)?; + + // write the chunk into NBT and compress it according to the compression method + compress_buf.clear(); + let mut compress_cursor = Cursor::new(compress_buf); + match options.compression { + Compression::Gzip => valence_nbt::to_binary( + chunk, + GzEncoder::new(&mut compress_cursor, flate2::Compression::default()), + "", + )?, + Compression::Zlib => valence_nbt::to_binary( + chunk, + ZlibEncoder::new(&mut compress_cursor, flate2::Compression::default()), + "", + )?, + Compression::None => valence_nbt::to_binary(chunk, &mut compress_cursor, "")?, + } + let compress_buf = compress_cursor.into_inner(); + + // additional 5 bytes for exact chunk size + compression type, then add + // SECTOR_SIZE - 1 for rounding up + let num_sectors_needed = (compress_buf.len() + 5 + SECTOR_SIZE - 1) / SECTOR_SIZE; + let (start_sector, num_sectors) = if num_sectors_needed >= 256 { + if options.skip_oversized_chunks { + return Err(RegionError::OversizedChunk); + } + + // write oversized chunk to external file + File::create(Self::external_chunk_file(pos_x, pos_z, region_root))? + .write_all(&*compress_buf)?; + + let start_sector = self.allocate_sectors(1); + self.file + .seek(SeekFrom::Start(start_sector * SECTOR_SIZE as u64))?; + + // write the exact chunk size, which includes *only* the compression version + // (the rest of the chunk is external) + self.file.write_u32::(1)?; + // write the compression, with the marker which says our chunk is oversized + self.file.write_u8((options.compression as u8) | 0x80)?; + + (start_sector, 1) + } else { + // delete the oversized chunk if it existed before + Self::delete_external_chunk_file(pos_x, pos_z, region_root)?; + + let start_sector = self.allocate_sectors(num_sectors_needed); + self.file + .seek(SeekFrom::Start(start_sector * SECTOR_SIZE as u64))?; + + // write the exact chunk size, which accounts for the compression version which + // is not in our compress_buf + self.file + .write_u32::((compress_buf.len() + 1) as u32)?; + // write the compression + self.file.write_u8(options.compression as u8)?; + // write the data + self.file.write_all(&*compress_buf)?; + + (start_sector, num_sectors_needed) + }; + + let location = Location::new() + .with_offset(start_sector as u32) + .with_count(num_sectors as u8); + let timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .map(|duration| duration.as_secs() as u32) + .unwrap_or(0); + + // write changed header information to file + let chunk_idx = Self::chunk_idx(pos_x, pos_z); + self.file.seek(SeekFrom::Start(chunk_idx as u64 * 4))?; + self.file.write_u32::(location.0)?; + self.file + .seek(SeekFrom::Start(chunk_idx as u64 * 4 + SECTOR_SIZE as u64))?; + self.file.write_u32::(timestamp)?; + + // write changed header information to our header + self.locations[chunk_idx] = location; + self.timestamps[chunk_idx] = timestamp; + + // pad file to multiple of SECTOR_SIZE + let file_length = self.file.seek(SeekFrom::End(0))?; + let rem = file_length as usize % SECTOR_SIZE; + if rem != 0 { + self.file + .write_all(&[0; SECTOR_SIZE][..SECTOR_SIZE - rem])?; + } + + Ok(()) + } + + fn chunk_positions( + &self, + region_x: i32, + region_z: i32, + ) -> Vec> { + self.locations + .iter() + .enumerate() + .filter_map(move |(index, location)| { + if location.is_none() { + None + } else { + Some(( + region_x * 32 + (index % 32) as i32, + region_z * 32 + (index / 32) as i32, + )) + } + }) + .map(Ok) + .collect() + } + + fn external_chunk_file(pos_x: i32, pos_z: i32, region_root: &Path) -> PathBuf { + region_root + .to_path_buf() + .join(format!("c.{pos_x}.{pos_z}.mcc")) + } + + fn delete_external_chunk_file( + pos_x: i32, + pos_z: i32, + region_root: &Path, + ) -> Result<(), RegionError> { + match std::fs::remove_file(Self::external_chunk_file(pos_x, pos_z, region_root)) { + Ok(()) => Ok(()), + Err(err) if err.kind() == ErrorKind::NotFound => Ok(()), + Err(err) => Err(err.into()), + } + } + + fn reserve_sectors( + used_sectors: &mut bitvec::vec::BitVec, + sector_offset: u64, + sector_count: usize, + ) { + let start_index = sector_offset as usize; + let end_index = sector_offset as usize + sector_count; + if used_sectors.len() < end_index { + used_sectors.resize(start_index, false); + used_sectors.resize(end_index, true); + } else { + used_sectors[start_index..end_index].fill(true); + } + } + + fn allocate_sectors(&mut self, num_sectors: usize) -> u64 { + // find the first set of consecutive free sectors of length num_sectors + let mut index = 0; + let free_space_start = loop { + let Some(mut free_space_start) = self.used_sectors[index..].first_zero() else { + // we have reached a sequence of 1's at the end of the list, so next free space + // is at the end of the file + break self.used_sectors.len(); + }; + free_space_start += index; + + let Some(mut free_space_end) = self.used_sectors[free_space_start..].first_one() else { + // there is no 1 after this 0, so we have enough space here (even if we have to + // increase the file size) + break free_space_start; + }; + free_space_end += free_space_start; + + if free_space_end - free_space_start >= num_sectors { + // if the free space end is far enough from the free space start, we have enough + // space + break free_space_start; + } + + index = free_space_end; + }; + + Self::reserve_sectors(&mut self.used_sectors, free_space_start as u64, num_sectors); + free_space_start as u64 + } + + fn chunk_idx(pos_x: i32, pos_z: i32) -> usize { + (pos_x.rem_euclid(32) + pos_z.rem_euclid(32) * 32) as usize + } + + fn is_external_stream_chunk(stream_version: u8) -> bool { + (stream_version & 0x80) != 0 + } + + fn external_chunk_version(stream_version: u8) -> u8 { + stream_version & !0x80 + } +} + +const SECTOR_SIZE: usize = 4096; diff --git a/vendor/valence/crates/valence_anvil/src/parsing.rs b/vendor/valence/crates/valence_anvil/src/parsing.rs new file mode 100644 index 00000000..737ab133 --- /dev/null +++ b/vendor/valence/crates/valence_anvil/src/parsing.rs @@ -0,0 +1,380 @@ +use std::borrow::Cow; +use std::collections::BTreeMap; +use std::path::PathBuf; + +use thiserror::Error; +use valence_bytes::Utf8Bytes; +use valence_server::block::{PropName, PropValue}; +use valence_server::layer::chunk::{Chunk, UnloadedChunk}; +use valence_server::nbt::{Compound, List, Value}; +use valence_server::protocol::BlockKind; +use valence_server::registry::BiomeRegistry; +use valence_server::registry::biome::BiomeId; +use valence_server::{ChunkPos, Ident}; + +use crate::{RegionError, RegionFolder}; + +#[derive(Debug)] +pub struct DimensionFolder { + region: RegionFolder, + /// Mapping of biome names to their biome ID. + biome_to_id: BTreeMap, +} + +impl DimensionFolder { + pub fn new(dimension_root: impl Into, biomes: &BiomeRegistry) -> Self { + let mut region_root = dimension_root.into(); + region_root.push("region"); + + Self { + region: RegionFolder::new(region_root), + biome_to_id: biomes.iter().map(|(id, name, _)| (name, id)).collect(), + } + } + + /// Gets the parsed chunk at the given chunk position. + /// + /// Returns `Ok(Some(chunk))` if the chunk exists and no errors occurred + /// loading it. Returns `Ok(None)` if the chunk does not exist and no + /// errors occurred attempting to load it. Returns `Err(_)` if an error + /// occurred attempting to load the chunk. + pub fn get_chunk(&mut self, pos: ChunkPos) -> Result, ParseChunkError> { + let Some(raw_chunk) = self.region.get_chunk(pos.x, pos.z)? else { + return Ok(None); + }; + let parsed = parse_chunk(raw_chunk.data, &self.biome_to_id)?; + Ok(Some(ParsedChunk { + chunk: parsed, + timestamp: raw_chunk.timestamp, + })) + } +} + +/// A chunk parsed to show block information, biome information etc. +pub struct ParsedChunk { + pub chunk: UnloadedChunk, + pub timestamp: u32, +} + +#[derive(Debug, Error)] +#[non_exhaustive] +pub enum ParseChunkError { + #[error("region error: {0}")] + Region(#[from] RegionError), + #[error("missing chunk sections")] + MissingSections, + #[error("missing chunk section Y")] + MissingSectionY, + #[error("section Y is out of bounds")] + SectionYOutOfBounds, + #[error("missing block states")] + MissingBlockStates, + #[error("missing block palette")] + MissingBlockPalette, + #[error("invalid block palette length")] + BadBlockPaletteLen, + #[error("missing block name in palette")] + MissingBlockName, + #[error("unknown block name of \"{0}\"")] + UnknownBlockName(String), + #[error("unknown property name of \"{0}\"")] + UnknownPropName(String), + #[error("property value of block is not a string")] + BadPropValueType, + #[error("unknown property value of \"{0}\"")] + UnknownPropValue(String), + #[error("missing packed block state data in section")] + MissingBlockStateData, + #[error("unexpected number of longs in block state data")] + BadBlockLongCount, + #[error("invalid block palette index")] + BadBlockPaletteIndex, + #[error("missing biomes")] + MissingBiomes, + #[error("missing biome palette")] + MissingBiomePalette, + #[error("invalid biome palette length")] + BadBiomePaletteLen, + #[error("biome name is not a valid resource identifier")] + BadBiomeName, + #[error("missing packed biome data in section")] + MissingBiomeData, + #[error("unexpected number of longs in biome data")] + BadBiomeLongCount, + #[error("invalid biome palette index")] + BadBiomePaletteIndex, + #[error("missing block entities")] + MissingBlockEntities, + #[error("missing block entity ident")] + MissingBlockEntityIdent, + #[error("invalid block entity ident of \"{0}\"")] + InvalidBlockEntityName(Utf8Bytes), + #[error("invalid block entity position")] + InvalidBlockEntityPosition, +} + +pub fn parse_chunk( + mut nbt: Compound, + biome_map: &BTreeMap, // TODO: replace with biome registry arg. +) -> Result { + let Some(Value::List(List::Compound(sections))) = nbt.remove("sections") else { + return Err(ParseChunkError::MissingSections); + }; + + if sections.is_empty() { + return Ok(UnloadedChunk::new()); + } + + let mut chunk = + UnloadedChunk::with_height((sections.len() * 16).try_into().unwrap_or(u32::MAX)); + + let min_sect_y = sections + .iter() + .flat_map(|sect| { + if let Some(Value::Byte(sect_y)) = sect.get("Y") { + Some(*sect_y) + } else { + None + } + }) + .min() + .unwrap() as i32; + + let mut converted_block_palette = vec![]; + let mut converted_biome_palette = vec![]; + + for mut section in sections { + let Some(Value::Byte(sect_y)) = section.remove("Y") else { + return Err(ParseChunkError::MissingSectionY); + }; + + let sect_y = (sect_y as i32 - min_sect_y) as u32; + + if sect_y >= chunk.height() / 16 { + return Err(ParseChunkError::SectionYOutOfBounds); + } + + let Some(Value::Compound(mut block_states)) = section.remove("block_states") else { + return Err(ParseChunkError::MissingBlockStates); + }; + + let Some(Value::List(List::Compound(palette))) = block_states.remove("palette") else { + return Err(ParseChunkError::MissingBlockPalette); + }; + + if !(1..BLOCKS_PER_SECTION).contains(&palette.len()) { + return Err(ParseChunkError::BadBlockPaletteLen); + } + + converted_block_palette.clear(); + + for mut block in palette { + let Some(Value::String(name)) = block.remove("Name") else { + return Err(ParseChunkError::MissingBlockName); + }; + + let Some(block_kind) = BlockKind::from_str(ident_path(&name)) else { + return Err(ParseChunkError::UnknownBlockName(name)); + }; + + let mut state = block_kind.to_state(); + + if let Some(Value::Compound(properties)) = block.remove("Properties") { + for (key, value) in properties { + let Value::String(value) = value else { + return Err(ParseChunkError::BadPropValueType); + }; + + let Some(prop_name) = PropName::from_str(&key) else { + return Err(ParseChunkError::UnknownPropName(key)); + }; + + let Some(prop_value) = PropValue::from_str(&value) else { + return Err(ParseChunkError::UnknownPropValue(value)); + }; + + state = state.set(prop_name, prop_value); + } + } + + converted_block_palette.push(state); + } + + if converted_block_palette.len() == 1 { + chunk.fill_block_state_section(sect_y, converted_block_palette[0]); + } else { + debug_assert!(converted_block_palette.len() > 1); + + let Some(Value::LongArray(data)) = block_states.remove("data") else { + return Err(ParseChunkError::MissingBlockStateData); + }; + + let bits_per_idx = bit_width(converted_block_palette.len() - 1).max(4); + let idxs_per_long = 64 / bits_per_idx; + let long_count = BLOCKS_PER_SECTION.div_ceil(idxs_per_long); + let mask = 2_u64.pow(bits_per_idx as u32) - 1; + + if long_count != data.len() { + return Err(ParseChunkError::BadBlockLongCount); + }; + + let mut i: u32 = 0; + for long in data { + let u64 = long as u64; + + for j in 0..idxs_per_long { + if i >= BLOCKS_PER_SECTION as u32 { + break; + } + + let idx = (u64 >> (bits_per_idx * j)) & mask; + + let Some(block) = converted_block_palette.get(idx as usize).cloned() else { + return Err(ParseChunkError::BadBlockPaletteIndex); + }; + + let x = i % 16; + let z = i / 16 % 16; + let y = i / (16 * 16); + + chunk.set_block_state(x, sect_y * 16 + y, z, block); + + i += 1; + } + } + } + + let Some(Value::Compound(biomes)) = section.get("biomes") else { + return Err(ParseChunkError::MissingBiomes); + }; + + let Some(Value::List(List::String(palette))) = biomes.get("palette") else { + return Err(ParseChunkError::MissingBiomePalette); + }; + + if !(1..BIOMES_PER_SECTION).contains(&palette.len()) { + return Err(ParseChunkError::BadBiomePaletteLen); + } + + converted_biome_palette.clear(); + + for biome_name in palette { + if !Ident::is_valid(&biome_name) { + return Err(ParseChunkError::BadBiomeName); + }; + + converted_biome_palette.push( + biome_map + .get(biome_name.as_str()) + .copied() + .unwrap_or_default(), + ); + } + + if converted_biome_palette.len() == 1 { + chunk.fill_biome_section(sect_y, converted_biome_palette[0]); + } else { + debug_assert!(converted_biome_palette.len() > 1); + + let Some(Value::LongArray(data)) = biomes.get("data") else { + return Err(ParseChunkError::MissingBiomeData); + }; + + let bits_per_idx = bit_width(converted_biome_palette.len() - 1); + let idxs_per_long = 64 / bits_per_idx; + let long_count = BIOMES_PER_SECTION.div_ceil(idxs_per_long); + let mask = 2_u64.pow(bits_per_idx as u32) - 1; + + if long_count != data.len() { + return Err(ParseChunkError::BadBiomeLongCount); + }; + + let mut i: u32 = 0; + for &long in data.iter() { + let u64 = long as u64; + + for j in 0..idxs_per_long { + if i >= BIOMES_PER_SECTION as u32 { + break; + } + + let idx = (u64 >> (bits_per_idx * j)) & mask; + + let Some(biome) = converted_biome_palette.get(idx as usize).cloned() else { + return Err(ParseChunkError::BadBiomePaletteIndex); + }; + + let x = i % 4; + let z = i / 4 % 4; + let y = i / (4 * 4); + + chunk.set_biome(x, sect_y * 4 + y, z, biome); + + i += 1; + } + } + } + } + + let Some(Value::List(block_entities)) = nbt.remove("block_entities") else { + return Err(ParseChunkError::MissingBlockEntities); + }; + + if let List::Compound(block_entities) = block_entities { + for mut comp in block_entities { + let Some(Value::String(ident)) = comp.remove("id") else { + return Err(ParseChunkError::MissingBlockEntityIdent); + }; + + if let Err(e) = Ident::new(ident) { + return Err(ParseChunkError::InvalidBlockEntityName(e.0)); + } + + let Some(Value::Int(x)) = comp.remove("x") else { + return Err(ParseChunkError::InvalidBlockEntityPosition); + }; + + let x = x.rem_euclid(16) as u32; + + let Some(Value::Int(y)) = comp.remove("y") else { + return Err(ParseChunkError::InvalidBlockEntityPosition); + }; + + let Ok(y) = u32::try_from(y.wrapping_sub(min_sect_y * 16)) else { + return Err(ParseChunkError::InvalidBlockEntityPosition); + }; + + if y >= chunk.height() { + return Err(ParseChunkError::InvalidBlockEntityPosition); + } + + let Some(Value::Int(z)) = comp.remove("z") else { + return Err(ParseChunkError::InvalidBlockEntityPosition); + }; + + let z = z.rem_euclid(16) as u32; + + comp.remove("keepPacked"); + + chunk.set_block_entity(x, y, z, Some(comp)); + } + } + + Ok(chunk) +} + +const BLOCKS_PER_SECTION: usize = 16 * 16 * 16; +const BIOMES_PER_SECTION: usize = 4 * 4 * 4; + +/// Gets the path part of a resource identifier. +fn ident_path(ident: &str) -> &str { + match ident.rsplit_once(':') { + Some((_, after)) => after, + None => ident, + } +} + +/// Returns the minimum number of bits needed to represent the integer `n`. +const fn bit_width(n: usize) -> usize { + (usize::BITS - n.leading_zeros()) as _ +} diff --git a/vendor/valence/crates/valence_boss_bar/Cargo.toml b/vendor/valence/crates/valence_boss_bar/Cargo.toml new file mode 100644 index 00000000..7960ffe8 --- /dev/null +++ b/vendor/valence/crates/valence_boss_bar/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "valence_boss_bar" +description = "Boss bar API for Valence" +readme = "README.md" +keywords = ["minecraft", "bossbar", "api"] +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +valence_entity.workspace = true +valence_server.workspace = true +bitfield-struct.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +derive_more.workspace = true diff --git a/vendor/valence/crates/valence_boss_bar/README.md b/vendor/valence/crates/valence_boss_bar/README.md new file mode 100644 index 00000000..f5ce42d7 --- /dev/null +++ b/vendor/valence/crates/valence_boss_bar/README.md @@ -0,0 +1,3 @@ +# valence_boss_bar + +Manages Minecraft's boss bar which is the bar seen at the top of the screen when a boss mob is present. \ No newline at end of file diff --git a/vendor/valence/crates/valence_boss_bar/src/components.rs b/vendor/valence/crates/valence_boss_bar/src/components.rs new file mode 100644 index 00000000..6548fff5 --- /dev/null +++ b/vendor/valence/crates/valence_boss_bar/src/components.rs @@ -0,0 +1,65 @@ +use std::borrow::Cow; + +use bevy_ecs::prelude::{Bundle, Component}; +use derive_more::{Deref, DerefMut}; +use valence_entity::EntityLayerId; +use valence_server::protocol::packets::play::boss_bar_s2c::{ + BossBarAction, BossBarColor, BossBarDivision, BossBarFlags, +}; +use valence_server::{Text, UniqueId}; + +/// The bundle of components that make up a boss bar. +#[derive(Bundle, Default)] +pub struct BossBarBundle { + pub id: UniqueId, + pub title: BossBarTitle, + pub health: BossBarHealth, + pub style: BossBarStyle, + pub flags: BossBarFlags, + pub layer: EntityLayerId, +} + +/// The title of a boss bar. +#[derive(Component, Clone, Default, Deref, DerefMut)] +pub struct BossBarTitle(pub Text); + +impl ToPacketAction for BossBarTitle { + fn to_packet_action(&self) -> BossBarAction { + BossBarAction::UpdateTitle(Cow::Borrowed(&self.0)) + } +} + +/// The health of a boss bar. +#[derive(Component, Default, Deref, DerefMut)] +pub struct BossBarHealth(pub f32); + +impl ToPacketAction for BossBarHealth { + fn to_packet_action(&self) -> BossBarAction { + BossBarAction::UpdateHealth(self.0) + } +} + +/// The style of a boss bar. This includes the color and division of the boss +/// bar. +#[derive(Component, Default)] +pub struct BossBarStyle { + pub color: BossBarColor, + pub division: BossBarDivision, +} + +impl ToPacketAction for BossBarStyle { + fn to_packet_action(&self) -> BossBarAction { + BossBarAction::UpdateStyle(self.color, self.division) + } +} + +impl ToPacketAction for BossBarFlags { + fn to_packet_action(&self) -> BossBarAction { + BossBarAction::UpdateFlags(*self) + } +} + +/// Trait for converting a component to a boss bar action. +pub(crate) trait ToPacketAction { + fn to_packet_action(&self) -> BossBarAction; +} diff --git a/vendor/valence/crates/valence_boss_bar/src/lib.rs b/vendor/valence/crates/valence_boss_bar/src/lib.rs new file mode 100644 index 00000000..ea4b9ec2 --- /dev/null +++ b/vendor/valence/crates/valence_boss_bar/src/lib.rs @@ -0,0 +1,257 @@ +#![doc = include_str!("../README.md")] +#![allow(clippy::type_complexity)] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use std::borrow::Cow; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_server::client::{ + Client, OldViewDistance, OldVisibleEntityLayers, ViewDistance, VisibleEntityLayers, +}; +use valence_server::layer::UpdateLayersPreClientSet; +pub use valence_server::protocol::packets::play::boss_bar_s2c::{ + BossBarAction, BossBarColor, BossBarDivision, BossBarFlags, +}; +use valence_server::protocol::packets::play::BossBarS2c; +use valence_server::protocol::WritePacket; +use valence_server::{ChunkView, Despawned, EntityLayer, Layer, UniqueId}; + +mod components; +pub use components::*; +use valence_entity::{EntityLayerId, OldPosition, Position}; + +pub struct BossBarPlugin; + +impl Plugin for BossBarPlugin { + fn build(&self, app: &mut bevy_app::App) { + app.add_systems( + PostUpdate, + ( + update_boss_bar::, + update_boss_bar::, + update_boss_bar::, + update_boss_bar::, + update_boss_bar_layer_view, + update_boss_bar_chunk_view, + boss_bar_despawn, + ) + .before(UpdateLayersPreClientSet), + ); + } +} + +fn update_boss_bar( + boss_bars_query: Query<(&UniqueId, &T, &EntityLayerId, Option<&Position>), Changed>, + mut entity_layers_query: Query<&mut EntityLayer>, +) { + for (id, part, entity_layer_id, pos) in boss_bars_query.iter() { + if let Ok(mut entity_layer) = entity_layers_query.get_mut(entity_layer_id.0) { + let packet = BossBarS2c { + id: id.0, + action: part.to_packet_action(), + }; + if let Some(pos) = pos { + entity_layer.view_writer(pos.0).write_packet(&packet); + } else { + entity_layer.write_packet(&packet); + } + } + } +} + +fn update_boss_bar_layer_view( + mut clients_query: Query< + ( + &mut Client, + &VisibleEntityLayers, + &OldVisibleEntityLayers, + &Position, + &OldPosition, + &ViewDistance, + &OldViewDistance, + ), + Changed, + >, + boss_bars_query: Query<( + &UniqueId, + &BossBarTitle, + &BossBarHealth, + &BossBarStyle, + &BossBarFlags, + &EntityLayerId, + Option<&Position>, + )>, +) { + for ( + mut client, + visible_entity_layers, + old_visible_entity_layers, + position, + _old_position, + view_distance, + _old_view_distance, + ) in clients_query.iter_mut() + { + let view = ChunkView::new(position.0.into(), view_distance.get()); + + let old_layers = old_visible_entity_layers.get(); + let current_layers = &visible_entity_layers.0; + + for &added_layer in current_layers.difference(old_layers) { + for (id, title, health, style, flags, _, boss_bar_position) in boss_bars_query + .iter() + .filter(|(_, _, _, _, _, layer_id, _)| layer_id.0 == added_layer) + { + if let Some(position) = boss_bar_position { + if view.contains(position.0.into()) { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Add { + title: Cow::Borrowed(&title.0), + health: health.0, + color: style.color, + division: style.division, + flags: *flags, + }, + }); + } + } else { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Add { + title: Cow::Borrowed(&title.0), + health: health.0, + color: style.color, + division: style.division, + flags: *flags, + }, + }); + } + } + } + + for &removed_layer in old_layers.difference(current_layers) { + for (id, _, _, _, _, _, boss_bar_position) in boss_bars_query + .iter() + .filter(|(_, _, _, _, _, layer_id, _)| layer_id.0 == removed_layer) + { + if let Some(position) = boss_bar_position { + if view.contains(position.0.into()) { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Remove, + }); + } + } else { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Remove, + }); + } + } + } + } +} + +fn update_boss_bar_chunk_view( + mut clients_query: Query< + ( + &mut Client, + &VisibleEntityLayers, + &OldVisibleEntityLayers, + &Position, + &OldPosition, + &ViewDistance, + &OldViewDistance, + ), + Changed, + >, + boss_bars_query: Query<( + &UniqueId, + &BossBarTitle, + &BossBarHealth, + &BossBarStyle, + &BossBarFlags, + &EntityLayerId, + &Position, + )>, +) { + for ( + mut client, + visible_entity_layers, + _old_visible_entity_layers, + position, + old_position, + view_distance, + old_view_distance, + ) in clients_query.iter_mut() + { + let view = ChunkView::new(position.0.into(), view_distance.get()); + let old_view = ChunkView::new(old_position.get().into(), old_view_distance.get()); + + for layer in visible_entity_layers.0.iter() { + for (id, title, health, style, flags, _, boss_bar_position) in boss_bars_query + .iter() + .filter(|(_, _, _, _, _, layer_id, _)| layer_id.0 == *layer) + { + if view.contains(boss_bar_position.0.into()) + && !old_view.contains(boss_bar_position.0.into()) + { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Add { + title: Cow::Borrowed(&title.0), + health: health.0, + color: style.color, + division: style.division, + flags: *flags, + }, + }); + } else if !view.contains(boss_bar_position.0.into()) + && old_view.contains(boss_bar_position.0.into()) + { + client.write_packet(&BossBarS2c { + id: id.0, + action: BossBarAction::Remove, + }); + } + } + } + } +} + +fn boss_bar_despawn( + boss_bars_query: Query<(&UniqueId, &EntityLayerId, Option<&Position>), With>, + mut entity_layer_query: Query<&mut EntityLayer>, +) { + for (id, entity_layer_id, position) in boss_bars_query.iter() { + if let Ok(mut entity_layer) = entity_layer_query.get_mut(entity_layer_id.0) { + let packet = BossBarS2c { + id: id.0, + action: BossBarAction::Remove, + }; + if let Some(pos) = position { + entity_layer.view_writer(pos.0).write_packet(&packet); + } else { + entity_layer.write_packet(&packet); + } + } + } +} diff --git a/vendor/valence/crates/valence_build_utils/Cargo.toml b/vendor/valence/crates/valence_build_utils/Cargo.toml new file mode 100644 index 00000000..7a928faa --- /dev/null +++ b/vendor/valence/crates/valence_build_utils/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "valence_build_utils" +description = "Common build script utilities for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +syn.workspace = true +proc-macro2.workspace = true diff --git a/vendor/valence/crates/valence_build_utils/README.md b/vendor/valence/crates/valence_build_utils/README.md new file mode 100644 index 00000000..fa275e1a --- /dev/null +++ b/vendor/valence/crates/valence_build_utils/README.md @@ -0,0 +1,3 @@ +# valence_build_utils + +Common code used in build scripts. diff --git a/vendor/valence/crates/valence_build_utils/src/lib.rs b/vendor/valence/crates/valence_build_utils/src/lib.rs new file mode 100644 index 00000000..775f82a7 --- /dev/null +++ b/vendor/valence/crates/valence_build_utils/src/lib.rs @@ -0,0 +1,62 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use std::path::Path; +use std::process::Command; +use std::{env, fs}; + +use anyhow::Context; +use proc_macro2::{Ident, Span, TokenStream}; + +pub fn write_generated_file(content: TokenStream, out_file: &str) -> anyhow::Result<()> { + let out_dir = env::var_os("OUT_DIR").context("failed to get OUT_DIR env var")?; + let path = Path::new(&out_dir).join(out_file); + let code = content.to_string(); + + fs::write(&path, code)?; + + // Try to format the output for debugging purposes. + // Doesn't matter if rustfmt is unavailable. + let _ = Command::new("rustfmt").arg(path).output(); + + Ok(()) +} + +/// Parses a [`proc_macro2::Ident`] from a `str`. Rust keywords are prepended +/// with underscores to make them valid identifiers. +pub fn ident(s: impl AsRef) -> Ident { + let s = s.as_ref().trim(); + + // Parse the ident from a str. If the string is a Rust keyword, stick an + // underscore in front. + syn::parse_str::(s) + .unwrap_or_else(|_| Ident::new(format!("_{s}").as_str(), Span::call_site())) +} + +#[track_caller] +pub fn rerun_if_changed(files: [&str; N]) { + for file in files { + assert!( + Path::new(file).exists(), + "File \"{file}\" does not exist. Did you forget to update the path?" + ); + + println!("cargo:rerun-if-changed={file}"); + } +} diff --git a/vendor/valence/crates/valence_bytes/Cargo.toml b/vendor/valence/crates/valence_bytes/Cargo.toml new file mode 100644 index 00000000..db9142a5 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "valence_bytes" +description = "Storing reference counted bytes" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bytes.workspace = true diff --git a/vendor/valence/crates/valence_bytes/README.md b/vendor/valence/crates/valence_bytes/README.md new file mode 100644 index 00000000..13de0a51 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/README.md @@ -0,0 +1,3 @@ +# valence_bytes + +A library for storing reference-counted bytes diff --git a/vendor/valence/crates/valence_bytes/src/cow_bytes.rs b/vendor/valence/crates/valence_bytes/src/cow_bytes.rs new file mode 100644 index 00000000..08a9c87b --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/cow_bytes.rs @@ -0,0 +1,91 @@ +use std::ops::{Deref, RangeBounds}; + +use crate::Bytes; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum CowBytes<'a> { + Borrowed(&'a [u8]), + Owned(Bytes), +} + +impl<'a> CowBytes<'a> { + pub fn into_owned(self) -> Bytes { + match self { + Self::Borrowed(bytes) => Bytes::copy_from_slice(bytes), + Self::Owned(bytes) => bytes, + } + } + + pub fn clear(&mut self) { + match self { + Self::Borrowed(bytes) => { + *bytes = &bytes[0..0]; + } + Self::Owned(bytes) => bytes.clear(), + } + } + + pub fn slice(&self, range: impl RangeBounds) -> Self { + match self { + Self::Borrowed(bytes) => { + Self::Borrowed(&bytes[(range.start_bound().cloned(), range.end_bound().cloned())]) + } + Self::Owned(bytes) => Self::Owned(bytes.slice(range)), + } + } + + pub fn split_off(&mut self, at: usize) -> Self { + assert!(at <= self.len()); + let result = self.slice(at..); + self.truncate(at); + result + } + + pub fn split_to(&mut self, at: usize) -> Self { + assert!(at <= self.len()); + let mut result = self.clone(); + result.truncate(at); + *self = self.slice(at..); + result + } + + pub fn truncate(&mut self, len: usize) { + match self { + Self::Borrowed(bytes) => { + if let Some(truncated) = bytes.get(0..len) { + *bytes = truncated; + } + } + Self::Owned(bytes) => bytes.truncate(len), + } + } +} + +impl<'a> Default for CowBytes<'a> { + fn default() -> Self { + Bytes::default().into() + } +} + +impl<'a> Deref for CowBytes<'a> { + type Target = [u8]; + + fn deref(&self) -> &[u8] { + match self { + Self::Borrowed(bytes) => bytes, + Self::Owned(bytes) => bytes, + } + } +} + +impl<'a> From<&'a [u8]> for CowBytes<'a> { + fn from(bytes: &'a [u8]) -> Self { + Self::Borrowed(bytes) + } +} + +impl<'a> From for CowBytes<'a> { + fn from(bytes: Bytes) -> Self { + Self::Owned(bytes) + } +} diff --git a/vendor/valence/crates/valence_bytes/src/cow_fixed_bytes.rs b/vendor/valence/crates/valence_bytes/src/cow_fixed_bytes.rs new file mode 100644 index 00000000..823a6e13 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/cow_fixed_bytes.rs @@ -0,0 +1,41 @@ +use std::ops::Deref; + +use crate::FixedBytes; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum CowFixedBytes<'a, const N: usize> { + Borrowed(&'a [u8; N]), + Owned(FixedBytes), +} + +impl<'a, const N: usize> CowFixedBytes<'a, N> { + pub fn into_owned(self) -> FixedBytes { + match self { + Self::Borrowed(bytes) => FixedBytes::copy_from_array(bytes), + Self::Owned(bytes) => bytes, + } + } +} + +impl<'a, const N: usize> Deref for CowFixedBytes<'a, N> { + type Target = [u8; N]; + + fn deref(&self) -> &[u8; N] { + match self { + Self::Borrowed(bytes) => bytes, + Self::Owned(bytes) => bytes, + } + } +} + +impl<'a, const N: usize> From<&'a [u8; N]> for CowFixedBytes<'a, N> { + fn from(bytes: &'a [u8; N]) -> Self { + Self::Borrowed(bytes) + } +} + +impl<'a, const N: usize> From> for CowFixedBytes<'a, N> { + fn from(bytes: FixedBytes) -> Self { + Self::Owned(bytes) + } +} diff --git a/vendor/valence/crates/valence_bytes/src/cow_utf8_bytes.rs b/vendor/valence/crates/valence_bytes/src/cow_utf8_bytes.rs new file mode 100644 index 00000000..50568d72 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/cow_utf8_bytes.rs @@ -0,0 +1,58 @@ +use std::fmt::{Display, Formatter}; +use std::ops::Deref; + +use crate::Utf8Bytes; + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum CowUtf8Bytes<'a> { + Borrowed(&'a str), + Owned(Utf8Bytes), +} + +impl<'a> CowUtf8Bytes<'a> { + pub fn into_owned(self) -> Utf8Bytes { + match self { + Self::Borrowed(bytes) => Utf8Bytes::copy_from_str(bytes), + Self::Owned(bytes) => bytes, + } + } + + pub fn as_str(&self) -> &str { + self + } +} + +impl<'a> Display for CowUtf8Bytes<'a> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + Display::fmt(self.as_str(), f) + } +} + +impl<'a> Default for CowUtf8Bytes<'a> { + fn default() -> Self { + Utf8Bytes::default().into() + } +} + +impl<'a> Deref for CowUtf8Bytes<'a> { + type Target = str; + + fn deref(&self) -> &str { + match self { + Self::Borrowed(bytes) => bytes, + Self::Owned(bytes) => bytes, + } + } +} + +impl<'a> From<&'a str> for CowUtf8Bytes<'a> { + fn from(bytes: &'a str) -> Self { + Self::Borrowed(bytes) + } +} + +impl<'a> From for CowUtf8Bytes<'a> { + fn from(bytes: Utf8Bytes) -> Self { + Self::Owned(bytes) + } +} diff --git a/vendor/valence/crates/valence_bytes/src/fixed_bytes.rs b/vendor/valence/crates/valence_bytes/src/fixed_bytes.rs new file mode 100644 index 00000000..c1c53a27 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/fixed_bytes.rs @@ -0,0 +1,102 @@ +use std::convert::AsRef; +use std::error::Error; +use std::fmt::{Display, Formatter}; +use std::ops::Deref; + +use bytes::Bytes; + +/// Wrapper around [`bytes::Bytes`] which guarantees that the bytes are exactly +/// `N` length +#[derive(Clone, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)] +pub struct FixedBytes(Bytes); + +impl FixedBytes { + pub fn new(value: Bytes) -> Option { + if value.len() == N { + // SAFETY: The length of the bytes has been checked + Some(unsafe { FixedBytes::new_unchecked(value) }) + } else { + None + } + } + + /// # Safety + /// `bytes` must have a length of exactly `N` + pub const unsafe fn new_unchecked(bytes: Bytes) -> Self { + FixedBytes(bytes) + } + + pub const fn from_static(value: &'static [u8; N]) -> Self { + // SAFETY: Length is guaranteed to be `N` + unsafe { Self::new_unchecked(Bytes::from_static(value)) } + } + + pub fn copy_from_array(value: &[u8; N]) -> Self { + // SAFETY: Length is guaranteed to be `N` + unsafe { Self::new_unchecked(Bytes::copy_from_slice(value)) } + } +} + +impl Deref for FixedBytes { + type Target = [u8; N]; + + fn deref(&self) -> &[u8; N] { + let data: &[u8] = &self.0; + // SAFETY: FixedBytes is guaranteed to have a length of exactly `N` bytes + let data: &[u8; N] = unsafe { data.try_into().unwrap_unchecked() }; + data + } +} + +impl AsRef<[u8; N]> for FixedBytes { + fn as_ref(&self) -> &[u8; N] { + self + } +} + +impl AsRef<[u8]> for FixedBytes { + fn as_ref(&self) -> &[u8] { + let value: &[u8; N] = self; + value + } +} + +impl AsRef for FixedBytes { + fn as_ref(&self) -> &Bytes { + &self.0 + } +} + +#[derive(Debug, Copy, Clone)] +pub struct TryFromBytesError(()); + +impl Display for TryFromBytesError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!( + f, + "could not convert Bytes to FixedBytes because it is the wrong length" + ) + } +} + +impl Error for TryFromBytesError {} + +impl TryFrom for FixedBytes { + type Error = TryFromBytesError; + + fn try_from(value: Bytes) -> Result { + Self::new(value).ok_or(TryFromBytesError(())) + } +} + +impl From<[u8; N]> for FixedBytes { + fn from(value: [u8; N]) -> Self { + FixedBytes::copy_from_array(&value) + } +} + +impl From<&'static [u8; N]> for FixedBytes { + fn from(value: &'static [u8; N]) -> Self { + Self::from_static(value) + } +} diff --git a/vendor/valence/crates/valence_bytes/src/lib.rs b/vendor/valence/crates/valence_bytes/src/lib.rs new file mode 100644 index 00000000..21e8cb7c --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/lib.rs @@ -0,0 +1,12 @@ +pub use bytes::Bytes; +pub use cow_bytes::CowBytes; +pub use cow_fixed_bytes::CowFixedBytes; +pub use cow_utf8_bytes::CowUtf8Bytes; +pub use fixed_bytes::FixedBytes; +pub use utf8::Utf8Bytes; + +pub mod cow_bytes; +pub mod cow_fixed_bytes; +pub mod cow_utf8_bytes; +pub mod fixed_bytes; +pub mod utf8; diff --git a/vendor/valence/crates/valence_bytes/src/utf8.rs b/vendor/valence/crates/valence_bytes/src/utf8.rs new file mode 100644 index 00000000..35dd2a02 --- /dev/null +++ b/vendor/valence/crates/valence_bytes/src/utf8.rs @@ -0,0 +1,101 @@ +use std::convert::AsRef; +use std::fmt::{Debug, Display, Formatter}; +use std::ops::Deref; + +use bytes::Bytes; + +/// Wrapper around [`bytes::Bytes`] which guarantees that the bytes are UTF-8 +#[derive(Default, Clone, PartialOrd, Ord, PartialEq, Eq, Hash)] +pub struct Utf8Bytes(Bytes); + +impl Utf8Bytes { + pub fn new(value: Bytes) -> Result { + // Check that the bytes are UTF-8 + std::str::from_utf8(&value)?; + + // SAFETY: Bytes have been confirmed to be UTF-8 + Ok(unsafe { Utf8Bytes::new_unchecked(value) }) + } + + /// # Safety + /// `bytes` must be UTF-8 + pub const unsafe fn new_unchecked(bytes: Bytes) -> Self { + Utf8Bytes(bytes) + } + + pub const fn from_static(value: &'static str) -> Self { + // SAFETY: str guarantees UTF-8 + unsafe { Self::new_unchecked(Bytes::from_static(value.as_bytes())) } + } + + pub fn copy_from_str(value: &str) -> Self { + // SAFETY: str guarantees UTF-8 + unsafe { Self::new_unchecked(Bytes::copy_from_slice(value.as_bytes())) } + } + + pub fn as_str(&self) -> &str { + self + } +} + +impl Deref for Utf8Bytes { + type Target = str; + + fn deref(&self) -> &str { + // SAFETY: Utf8Bytes is guaranteed to be UTF-8 + unsafe { std::str::from_utf8_unchecked(&self.0) } + } +} + +impl AsRef for Utf8Bytes { + fn as_ref(&self) -> &str { + self + } +} + +impl AsRef<[u8]> for Utf8Bytes { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} + +impl AsRef for Utf8Bytes { + fn as_ref(&self) -> &Bytes { + &self.0 + } +} + +impl TryFrom for Utf8Bytes { + type Error = std::str::Utf8Error; + + fn try_from(value: Bytes) -> Result { + Self::new(value) + } +} + +impl From for Utf8Bytes { + fn from(value: String) -> Self { + // SAFETY: String guarantees UTF-8 + unsafe { Utf8Bytes::new_unchecked(value.into()) } + } +} + +impl From<&'static str> for Utf8Bytes { + fn from(value: &'static str) -> Self { + Self::from_static(value) + } +} + +impl Debug for Utf8Bytes { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let value: &str = self; + Debug::fmt(value, f) + } +} + +impl Display for Utf8Bytes { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + let value: &str = self; + Display::fmt(value, f) + } +} diff --git a/vendor/valence/crates/valence_command/Cargo.toml b/vendor/valence/crates/valence_command/Cargo.toml new file mode 100644 index 00000000..125f68e9 --- /dev/null +++ b/vendor/valence/crates/valence_command/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "valence_command" +description = "Command management for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +bevy_app.workspace = true +bevy_derive.workspace = true +bevy_ecs.workspace = true +byteorder.workspace = true +ordered-float.workspace = true +petgraph.workspace = true +thiserror.workspace = true +tracing.workspace = true + +valence_server.workspace = true +valence_text.workspace = true diff --git a/vendor/valence/crates/valence_command/README.md b/vendor/valence/crates/valence_command/README.md new file mode 100644 index 00000000..82c2ce7c --- /dev/null +++ b/vendor/valence/crates/valence_command/README.md @@ -0,0 +1,13 @@ +# Valence Command + +This plugin manages the command system for a valence server. It is responsible for parsing, storing, managing and +dispatching commands. + +#### This plugin manages the following: + +- Registering commands to a Command Graph which is used parse commands. +- Receiving commands from the client and turning them into events. +- Parsing commands and dispatching them in the registered executable format. +- Sending the command graph to clients. + +See the module level documentation for more information. diff --git a/vendor/valence/crates/valence_command/src/graph.rs b/vendor/valence/crates/valence_command/src/graph.rs new file mode 100644 index 00000000..239a6f14 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/graph.rs @@ -0,0 +1,533 @@ +//! # Command graph implementation +//! +//! This is the core of the command system. It is a graph of `CommandNode`s that +//! are connected by the `CommandEdgeType`. The graph is used to determine what +//! command to run when a command is entered. The graph is also used to generate +//! the command tree that is sent to the client. +//! +//! ### The graph is a directed graph with 3 types of nodes: +//! * Root node ([NodeData::Root]) - This is the root of the graph. It is used +//! to connect all the +//! other nodes to the graph. It is always present and there should only be one. +//! * Literal node ([NodeData::Literal]) - This is a literal part of a command. +//! It is a string that +//! must be matched exactly by the client to trigger the validity of the node. +//! For example, the command `/teleport` would have a literal node with the name +//! `teleport` which is a child of the root node. +//! * Argument node ([NodeData::Argument]) - This is a node that represents an +//! argument in a +//! command. It is a string that is matched by the client and checked by the +//! server. For example, the command `/teleport 0 0 0` would have 1 argument +//! node with the name "" and the parser [Parser::Vec3] +//! which is a child of the literal node with the name `teleport`. +//! +//! #### and 2 types of edges: +//! * Child edge ([CommandEdgeType::Child]) - This is an edge that connects a +//! parent node to a +//! child node. It is used to determine what nodes are valid children of a +//! parent node. for example, the literal node with the name `teleport` would +//! have a child edge to the argument node with the name +//! "". This means that the argument node is a valid child +//! of the literal node. +//! * Redirect edge ([CommandEdgeType::Redirect]) - This edge is special. It is +//! used to redirect the +//! client to another node. For example, the literal node with the name `tp` +//! would have a Redirect edge to the literal node with the name `teleport`. +//! This means that if the client enters the command `/tp` the server will +//! redirect the client to the literal node with the name `teleport`. Making the +//! command `/tp` functionally equivalent to `/teleport`. +//! +//! # Cool Example Graph For Possible Implementation Of Teleport Command (made with graphviz) +//! ```text +//! ┌────────────────────────────────┐ +//! │ Root │ ─┐ +//! └────────────────────────────────┘ │ +//! │ │ +//! │ Child │ +//! ▼ │ +//! ┌────────────────────────────────┐ │ +//! │ Literal: tp │ │ +//! └────────────────────────────────┘ │ +//! │ │ +//! │ Redirect │ Child +//! ▼ ▼ +//! ┌──────────────────────────────────┐ Child ┌──────────────────────────────────────────────────────────────────────────────┐ +//! │ Argument: │ ◀─────── │ Literal: teleport │ +//! └──────────────────────────────────┘ └──────────────────────────────────────────────────────────────────────────────┘ +//! │ │ +//! │ Child │ Child +//! ▼ ▼ +//! ┌──────────────────────────────────┐ Child ┌────────────────────────────────┐ ┌──────────────────────────────────┐ +//! │ Argument: │ ◀─────── │ Argument: │ │ Argument: │ +//! └──────────────────────────────────┘ └────────────────────────────────┘ └──────────────────────────────────┘ +//! │ +//! │ Child +//! ▼ +//! ┌────────────────────────────────┐ +//! │ Argument: │ +//! └────────────────────────────────┘ +//! ``` +//! If you want a cool graph of your own command graph you can use the display +//! trait on the [CommandGraph] struct. Then you can use a tool like +//! [Graphviz Online](https://dreampuf.github.io/GraphvizOnline) to look at the graph. + +use std::collections::HashMap; +use std::fmt::{Display, Formatter}; + +use petgraph::dot::Dot; +use petgraph::prelude::*; +use valence_server::protocol::packets::play::command_tree_s2c::{ + Node, NodeData, Parser, StringArg, +}; +use valence_server::protocol::packets::play::CommandTreeS2c; +use valence_server::protocol::VarInt; + +use crate::modifier_value::ModifierValue; +use crate::parsers::{CommandArg, ParseInput}; +use crate::{CommandRegistry, CommandScopeRegistry}; + +/// This struct is used to store the command graph. (see module level docs for +/// more info) +#[derive(Debug, Clone)] +pub struct CommandGraph { + pub graph: Graph, + pub root: NodeIndex, +} + +impl Default for CommandGraph { + fn default() -> Self { + Self::new() + } +} + +/// Output the graph in graphviz dot format to do visual debugging. (this was +/// used to make the cool graph in the module level docs) +impl Display for CommandGraph { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", Dot::new(&self.graph)) + } +} + +impl CommandGraph { + pub fn new() -> Self { + let mut graph = Graph::::new(); + let root = graph.add_node(CommandNode { + executable: false, + data: NodeData::Root, + scopes: vec![], + }); + + Self { graph, root } + } +} + +/// Data for the nodes in the graph (see module level docs for more info) +#[derive(Clone, Debug, PartialEq)] +pub struct CommandNode { + pub executable: bool, + pub data: NodeData, + pub scopes: Vec, +} + +impl Display for CommandNode { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match &self.data { + NodeData::Root => write!(f, "Root"), + NodeData::Literal { name } => write!(f, "Literal: {}", name), + NodeData::Argument { name, .. } => write!(f, "Argument: <{}>", name), + } + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Hash)] +pub enum CommandEdgeType { + Redirect, + Child, +} + +impl Display for CommandEdgeType { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + CommandEdgeType::Redirect => write!(f, "Redirect"), + CommandEdgeType::Child => write!(f, "Child"), + } + } +} + +impl From for CommandTreeS2c { + fn from(command_graph: CommandGraph) -> Self { + let graph = command_graph.graph; + let nodes_and_edges = graph.into_nodes_edges(); + + let mut nodes: Vec = nodes_and_edges + .0 + .into_iter() + .map(|node| Node { + children: Vec::new(), + data: node.weight.data, + executable: node.weight.executable, + redirect_node: None, + }) + .collect(); + + let edges = nodes_and_edges.1; + + for edge in edges { + match edge.weight { + CommandEdgeType::Child => { + nodes[edge.source().index()] + .children + .push(VarInt::from(edge.target().index() as i32)); + } + CommandEdgeType::Redirect => { + nodes[edge.source().index()].redirect_node = + Some(VarInt::from(edge.target().index() as i32)); + } + } + } + + CommandTreeS2c { + commands: nodes, + root_index: VarInt::from(command_graph.root.index() as i32), + } + } +} + +/// Ergonomic builder pattern for adding executables, literals and arguments to +/// a command graph. See the derive macro for a more ergonomic way of doing this +/// for a basic command with an enum. +/// +/// # Type Parameters +/// * `T` - the type that should be constructed by an executable when the +/// command is executed +/// +/// # Example +/// ``` +/// use std::collections::HashMap; +/// use petgraph::visit::{EdgeCount, NodeCount}; +/// use valence_command::graph::{ +/// CommandGraph, CommandGraphBuilder +/// }; +/// use valence_command::{CommandRegistry}; +/// use valence_command::parsers::CommandArg; +/// +/// struct TestCommand { +/// test: i32, +/// } +/// +/// let mut command_graph = CommandRegistry::default(); +/// let mut executable_map = HashMap::new(); +/// let mut parser_map = HashMap::new(); +/// let mut modifier_map = HashMap::new(); +/// let mut command_graph_builder = CommandGraphBuilder::::new(&mut command_graph, &mut executable_map, &mut parser_map, &mut modifier_map); +/// +/// // simple command +/// let simple_command = command_graph_builder +/// .root() // transition to the root node +/// .literal("test") // add a literal node then transition to it +/// .argument("test") +/// // a player needs one of these scopes to execute the command +/// //(note: if you want an admin scope you should use the link method on the scope registry.) +/// .with_scopes(vec!["test:admin", "command:test"]) +/// .with_parser::() +/// // it is reasonably safe to unwrap here because we know that the argument is an integer +/// .with_executable(|args| TestCommand { test: i32::parse_arg(args).unwrap() }) +/// .id(); +/// +/// // complex command (redirects back to the simple command) +/// command_graph_builder +/// .root() +/// .literal("test") +/// .literal("command") +/// .redirect_to(simple_command); +/// +/// assert_eq!(command_graph.graph.graph.node_count(), 5); // root, test, command, , test +/// // 5 edges, 2 for the simple command, 2 for the complex command and 1 for the redirect +/// assert_eq!(command_graph.graph.graph.edge_count(), 5); +/// ``` +/// +/// in this example we can execute either of the following commands for the same +/// result: +/// - `/test test 1` +/// - `/test command test 1` +/// +/// the executables from these commands will both return a `TestCommand` with +/// the value `1` +#[allow(clippy::type_complexity)] +pub struct CommandGraphBuilder<'a, T> { + // We do not own the graph, we just have a mutable reference to it + graph: &'a mut CommandGraph, + current_node: NodeIndex, + executables: &'a mut HashMap T>, + parsers: &'a mut HashMap bool>, + modifiers: &'a mut HashMap)>, + scopes_added: Vec, /* we need to keep track of added scopes so we can add them to + * the registry later */ +} + +impl<'a, T> CommandGraphBuilder<'a, T> { + /// Creates a new command graph builder + /// + /// # Arguments + /// * registry - the command registry to add the commands to + /// * executables - the map of node indices to executable parser functions + #[allow(clippy::type_complexity)] + pub fn new( + registry: &'a mut CommandRegistry, + executables: &'a mut HashMap T>, + parsers: &'a mut HashMap bool>, + modifiers: &'a mut HashMap< + NodeIndex, + fn(String, &mut HashMap), + >, + ) -> Self { + CommandGraphBuilder { + current_node: registry.graph.root, + graph: &mut registry.graph, + executables, + parsers, + modifiers, + scopes_added: Vec::new(), + } + } + + /// Transitions to the root node. Use this to start building a new command + /// from root. + pub fn root(&mut self) -> &mut Self { + self.current_node = self.graph.root; + self + } + + /// Creates a new literal node and transitions to it. + /// + /// # Default Values + /// * executable - `false` + /// * scopes - `Vec::new()` + pub fn literal(&mut self, literal: impl Into) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = &mut self.current_node; + + let literal_node = graph.add_node(CommandNode { + executable: false, + data: NodeData::Literal { + name: literal.into(), + }, + scopes: Vec::new(), + }); + + graph.add_edge(*current_node, literal_node, CommandEdgeType::Child); + + *current_node = literal_node; + + self + } + + /// Creates a new argument node and transitions to it. + /// + /// # Default Values + /// * executable - `false` + /// * scopes - `Vec::new()` + /// * parser - `StringArg::SingleWord` + /// * suggestion - `None` + pub fn argument(&mut self, argument: impl Into) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = &mut self.current_node; + + let argument_node = graph.add_node(CommandNode { + executable: false, + data: NodeData::Argument { + name: argument.into(), + parser: Parser::String(StringArg::SingleWord), + suggestion: None, + }, + scopes: Vec::new(), + }); + + graph.add_edge(*current_node, argument_node, CommandEdgeType::Child); + + *current_node = argument_node; + + self + } + + /// Creates a new redirect edge from the current node to the node specified. + /// For info on what a redirect edge is, see the module level documentation. + /// + /// # Example + /// ``` + /// use std::collections::HashMap; + /// + /// use valence_command::graph::CommandGraphBuilder; + /// use valence_command::CommandRegistry; + /// + /// struct TestCommand; + /// + /// let mut command_graph = CommandRegistry::default(); + /// let mut executable_map = HashMap::new(); + /// let mut parser_map = HashMap::new(); + /// let mut modifier_map = HashMap::new(); + /// let mut command_graph_builder = CommandGraphBuilder::::new( + /// &mut command_graph, + /// &mut executable_map, + /// &mut parser_map, + /// &mut modifier_map, + /// ); + /// + /// let simple_command = command_graph_builder + /// .root() // transition to the root node + /// .literal("test") // add a literal node then transition to it + /// .id(); // get the id of the literal node + /// + /// command_graph_builder + /// .root() // transition to the root node + /// .literal("test") // add a literal node then transition to it + /// .literal("command") // add a literal node then transition to it + /// .redirect_to(simple_command); // redirect to the simple command + /// ``` + pub fn redirect_to(&mut self, node: NodeIndex) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = &mut self.current_node; + + graph.add_edge(*current_node, node, CommandEdgeType::Redirect); + + *current_node = node; + + self + } + + /// Sets up the executable function for the current node. This function will + /// be called when the command is executed and should parse the args and + /// return the `T` type. + /// + /// # Arguments + /// * executable - the executable function to add + /// + /// # Example + /// have a look at the example for [CommandGraphBuilder] + pub fn with_executable(&mut self, executable: fn(&mut ParseInput) -> T) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = &mut self.current_node; + + let node = graph.node_weight_mut(*current_node).unwrap(); + + node.executable = true; + self.executables.insert(*current_node, executable); + + self + } + + /// Adds a modifier to the current node + /// + /// # Arguments + /// * modifier - the modifier function to add + /// + /// # Example + /// ``` + /// use std::collections::HashMap; + /// + /// use valence_command::graph::CommandGraphBuilder; + /// use valence_command::CommandRegistry; + /// + /// struct TestCommand; + /// + /// let mut command_graph = CommandRegistry::default(); + /// let mut executable_map = HashMap::new(); + /// let mut parser_map = HashMap::new(); + /// let mut modifier_map = HashMap::new(); + /// let mut command_graph_builder = + /// CommandGraphBuilder::::new(&mut command_graph, &mut executable_map, &mut parser_map, &mut modifier_map); + /// + /// command_graph_builder + /// .root() // transition to the root node + /// .literal("test") // add a literal node then transition to it + /// .with_modifier(|_, modifiers| { + /// modifiers.insert("test".into(), "test".into()); // this will trigger when the node is passed + /// }) + /// .literal("command") // add a literal node then transition to it + /// .with_executable(|_| TestCommand); + /// ``` + pub fn with_modifier( + &mut self, + modifier: fn(String, &mut HashMap), + ) -> &mut Self { + let current_node = &mut self.current_node; + + self.modifiers.insert(*current_node, modifier); + + self + } + + /// Sets the required scopes for the current node + /// + /// # Arguments + /// * scopes - a list of scopes for that are aloud to access a command node + /// and its children (list of strings following the system described in + /// [command_scopes](crate::scopes)) + pub fn with_scopes(&mut self, scopes: Vec>) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = &mut self.current_node; + + let node = graph.node_weight_mut(*current_node).unwrap(); + + node.scopes = scopes.into_iter().map(|s| s.into()).collect(); + self.scopes_added.extend(node.scopes.clone()); + + self + } + + /// Applies the scopes to the registry + /// + /// # Arguments + /// * registry - the registry to apply the scopes to + pub fn apply_scopes(&mut self, registry: &mut CommandScopeRegistry) -> &mut Self { + for scope in self.scopes_added.clone() { + registry.add_scope(scope); + } + self.scopes_added.clear(); + self + } + + /// Sets the parser for the current node. This will decide how the argument + /// is parsed client side and will be used to check the argument before + /// it is passed to the executable. The node should be an argument node + /// or nothing will happen. + /// + /// # Type Parameters + /// * `P` - the parser to use for the current node (must be [CommandArg]) + pub fn with_parser(&mut self) -> &mut Self { + let graph = &mut self.graph.graph; + let current_node = self.current_node; + + let node = graph.node_weight_mut(current_node).unwrap(); + self.parsers + .insert(current_node, |input| P::parse_arg(input).is_ok()); + + let parser = P::display(); + + node.data = match node.data.clone() { + NodeData::Argument { + name, suggestion, .. + } => NodeData::Argument { + name, + parser, + suggestion, + }, + NodeData::Literal { name } => NodeData::Literal { name }, + NodeData::Root => NodeData::Root, + }; + + self + } + + /// Transitions to the node specified. + pub fn at(&mut self, node: NodeIndex) -> &mut Self { + self.current_node = node; + self + } + + /// Gets the id of the current node (useful for commands that have multiple + /// children). + pub fn id(&self) -> NodeIndex { + self.current_node + } +} diff --git a/vendor/valence/crates/valence_command/src/handler.rs b/vendor/valence/crates/valence_command/src/handler.rs new file mode 100644 index 00000000..59bfda3e --- /dev/null +++ b/vendor/valence/crates/valence_command/src/handler.rs @@ -0,0 +1,126 @@ +use std::collections::HashMap; +use std::marker::PhantomData; + +use bevy_app::{App, Plugin, PostStartup}; +use bevy_ecs::change_detection::ResMut; +use bevy_ecs::event::{Event, EventReader, EventWriter}; +use bevy_ecs::prelude::{Entity, IntoSystemConfigs, Resource}; +use petgraph::prelude::NodeIndex; +use valence_server::EventLoopPreUpdate; + +use crate::graph::CommandGraphBuilder; +use crate::modifier_value::ModifierValue; +use crate::parsers::ParseInput; +use crate::{ + Command, CommandProcessedEvent, CommandRegistry, CommandScopeRegistry, CommandSystemSet, +}; + +impl Plugin for CommandHandlerPlugin +where + T: Command + Send + Sync + 'static, +{ + fn build(&self, app: &mut App) { + app.add_event::>() + .insert_resource(CommandResource::::new()) + .add_systems(PostStartup, command_startup_system::) + .add_systems( + EventLoopPreUpdate, + command_event_system::.after(CommandSystemSet), + ); + } +} + +pub struct CommandHandlerPlugin +where + T: Command, +{ + command: PhantomData, +} + +impl Default for CommandHandlerPlugin { + fn default() -> Self { + Self::new() + } +} + +impl CommandHandlerPlugin +where + T: Command, +{ + pub fn new() -> Self { + CommandHandlerPlugin { + command: PhantomData, + } + } +} + +#[derive(Resource)] +struct CommandResource { + command: PhantomData, + executables: HashMap T>, +} + +impl CommandResource { + pub fn new() -> Self { + CommandResource { + command: PhantomData, + executables: HashMap::new(), + } + } +} + +#[derive(Event)] +pub struct CommandResultEvent +where + T: Command, + T: Send + Sync + 'static, +{ + pub result: T, + pub executor: Entity, + pub modifiers: HashMap, +} + +fn command_startup_system( + mut registry: ResMut, + mut scope_registry: ResMut, + mut command: ResMut>, +) where + T: Command + Send + Sync + 'static, +{ + let mut executables = HashMap::new(); + let mut parsers = HashMap::new(); + let mut modifiers = HashMap::new(); + let graph_builder = &mut CommandGraphBuilder::new( + &mut registry, + &mut executables, + &mut parsers, + &mut modifiers, + ); + T::assemble_graph(graph_builder); + graph_builder.apply_scopes(&mut scope_registry); + + command.executables.extend(executables.clone()); + registry.parsers.extend(parsers); + registry.modifiers.extend(modifiers); + registry.executables.extend(executables.keys()); +} + +/// This system reads incoming command events. +fn command_event_system( + mut commands_executed: EventReader, + mut events: EventWriter>, + command: ResMut>, +) where + T: Command + Send + Sync, +{ + for command_event in commands_executed.read() { + if let Some(executable) = command.executables.get(&command_event.node) { + let result = executable(&mut ParseInput::new(&command_event.command)); + events.send(CommandResultEvent { + result, + executor: command_event.executor, + modifiers: command_event.modifiers.clone(), + }); + } + } +} diff --git a/vendor/valence/crates/valence_command/src/lib.rs b/vendor/valence/crates/valence_command/src/lib.rs new file mode 100644 index 00000000..03c1017d --- /dev/null +++ b/vendor/valence/crates/valence_command/src/lib.rs @@ -0,0 +1,48 @@ +pub mod graph; +pub mod handler; +pub mod manager; +mod modifier_value; +pub mod parsers; +pub mod scopes; + +use std::collections::{HashMap, HashSet}; +use std::fmt::Debug; + +use bevy_app::App; +use bevy_ecs::prelude::{Resource, SystemSet}; +pub use manager::{CommandExecutionEvent, CommandProcessedEvent}; +pub use modifier_value::ModifierValue; +use petgraph::prelude::NodeIndex; +pub use scopes::CommandScopeRegistry; + +use crate::graph::{CommandGraph, CommandGraphBuilder}; +use crate::handler::CommandHandlerPlugin; +use crate::parsers::ParseInput; + +#[derive(SystemSet, Clone, PartialEq, Eq, Hash, Debug)] +pub struct CommandSystemSet; + +#[derive(Resource, Default)] +#[allow(clippy::type_complexity)] +pub struct CommandRegistry { + pub graph: CommandGraph, + pub parsers: HashMap bool>, + pub modifiers: HashMap)>, + pub executables: HashSet, +} + +pub trait Command { + fn assemble_graph(graph: &mut CommandGraphBuilder) + where + Self: Sized; +} + +pub trait AddCommand { + fn add_command(&mut self) -> &mut Self; +} + +impl AddCommand for App { + fn add_command(&mut self) -> &mut Self { + self.add_plugins(CommandHandlerPlugin::::new()) + } +} diff --git a/vendor/valence/crates/valence_command/src/manager.rs b/vendor/valence/crates/valence_command/src/manager.rs new file mode 100644 index 00000000..bea073a7 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/manager.rs @@ -0,0 +1,418 @@ +use std::collections::{HashMap, HashSet}; + +use bevy_app::{App, Plugin, PreUpdate}; +use bevy_ecs::entity::Entity; +use bevy_ecs::prelude::{ + Added, Changed, Commands, DetectChanges, Event, EventReader, EventWriter, IntoSystemConfigs, + Mut, Or, Query, Res, +}; +use petgraph::graph::NodeIndex; +use petgraph::prelude::EdgeRef; +use petgraph::{Direction, Graph}; +use tracing::{debug, warn}; +use valence_server::client::{Client, SpawnClientsSet}; +use valence_server::event_loop::PacketEvent; +use valence_server::protocol::packets::play::command_tree_s2c::NodeData; +use valence_server::protocol::packets::play::{CommandExecutionC2s, CommandTreeS2c}; +use valence_server::protocol::WritePacket; +use valence_server::EventLoopPreUpdate; + +use crate::graph::{CommandEdgeType, CommandGraph, CommandNode}; +use crate::parsers::ParseInput; +use crate::scopes::{CommandScopePlugin, CommandScopes}; +use crate::{CommandRegistry, CommandScopeRegistry, CommandSystemSet, ModifierValue}; + +pub struct CommandPlugin; + +impl Plugin for CommandPlugin { + fn build(&self, app: &mut App) { + app.add_plugins(CommandScopePlugin) + .add_event::() + .add_event::() + .add_systems(PreUpdate, insert_scope_component.after(SpawnClientsSet)) + .add_systems( + EventLoopPreUpdate, + ( + update_command_tree, + command_tree_update_with_client, + read_incoming_packets.before(CommandSystemSet), + parse_incoming_commands.in_set(CommandSystemSet), + ), + ); + + let graph: CommandGraph = CommandGraph::new(); + let modifiers = HashMap::new(); + let parsers = HashMap::new(); + let executables = HashSet::new(); + + app.insert_resource(CommandRegistry { + graph, + modifiers, + parsers, + executables, + }); + } +} + +/// This event is sent when a command is sent (you can send this with any +/// entity) +#[derive(Debug, Clone, PartialEq, Eq, Hash, Event)] +pub struct CommandExecutionEvent { + /// the command that was executed eg. "teleport @p 0 ~ 0" + pub command: String, + /// usually the Client entity but it could be a command block or something + /// (whatever the library user wants) + pub executor: Entity, +} + +/// This will only be sent if the command was successfully parsed and an +/// executable was found +#[derive(Debug, Clone, PartialEq, Eq, Event)] +pub struct CommandProcessedEvent { + /// the command that was executed eg. "teleport @p 0 ~ 0" + pub command: String, + /// usually the Client entity but it could be a command block or something + /// (whatever the library user wants) + pub executor: Entity, + /// the modifiers that were applied to the command + pub modifiers: HashMap, + /// the node that was executed + pub node: NodeIndex, +} + +fn insert_scope_component(mut clients: Query>, mut commands: Commands) { + for client in clients.iter_mut() { + commands.entity(client).insert(CommandScopes::new()); + } +} + +fn read_incoming_packets( + mut packets: EventReader, + mut event_writer: EventWriter, +) { + for packet in packets.read() { + let client = packet.client; + if let Some(packet) = packet.decode::() { + event_writer.send(CommandExecutionEvent { + command: packet.command.to_string(), + executor: client, + }); + } + } +} + +#[allow(clippy::type_complexity)] +fn command_tree_update_with_client( + command_registry: Res, + scope_registry: Res, + mut updated_clients: Query< + (&mut Client, &CommandScopes), + Or<(Added, Changed)>, + >, +) { + update_client_command_tree( + &command_registry, + scope_registry, + &mut updated_clients.iter_mut().collect(), + ); +} + +fn update_command_tree( + command_registry: Res, + scope_registry: Res, + mut clients: Query<(&mut Client, &CommandScopes)>, +) { + if command_registry.is_changed() { + update_client_command_tree( + &command_registry, + scope_registry, + &mut clients.iter_mut().collect(), + ); + } +} + +fn update_client_command_tree( + command_registry: &Res, + scope_registry: Res, + updated_clients: &mut Vec<(Mut, &CommandScopes)>, +) { + for (ref mut client, client_scopes) in updated_clients { + let time = std::time::Instant::now(); + + let old_graph = &command_registry.graph; + let mut new_graph = Graph::new(); + + // collect a new graph into only nodes that are allowed to be executed + let root = old_graph.root; + + let mut to_visit = vec![(None, root)]; + let mut already_visited = HashSet::new(); // prevent recursion + let mut old_to_new = HashMap::new(); + let mut new_root = None; + + while let Some((parent, node)) = to_visit.pop() { + if already_visited.contains(&(parent.map(|(_, edge)| edge), node)) { + continue; + } + already_visited.insert((parent.map(|(_, edge)| edge), node)); + let node_scopes = &old_graph.graph[node].scopes; + if !node_scopes.is_empty() { + let mut has_scope = false; + for scope in node_scopes { + if scope_registry.any_grants( + &client_scopes.0.iter().map(|scope| scope.as_str()).collect(), + scope, + ) { + has_scope = true; + break; + } + } + if !has_scope { + continue; + } + } + + let new_node = *old_to_new + .entry(node) + .or_insert_with(|| new_graph.add_node(old_graph.graph[node].clone())); + + for neighbor in old_graph.graph.edges_directed(node, Direction::Outgoing) { + to_visit.push((Some((new_node, neighbor.weight())), neighbor.target())); + } + + if let Some(parent) = parent { + new_graph.add_edge(parent.0, new_node, *parent.1); + } else { + new_root = Some(new_node); + } + } + + match new_root { + Some(new_root) => { + let command_graph = CommandGraph { + graph: new_graph, + root: new_root, + }; + let packet: CommandTreeS2c = command_graph.into(); + + client.write_packet(&packet); + } + None => { + warn!( + "Client has no permissions to execute any commands so we sent them nothing. \ + It is generally a bad idea to scope the root node of the command graph as it \ + can cause undefined behavior. For example, if the player has permission to \ + execute a command before you change the scope of the root node, the packet \ + will not be sent to the client and so the client will still think they can \ + execute the command." + ) + } + } + + debug!("command tree update took {:?}", time.elapsed()); + } +} + +fn parse_incoming_commands( + mut event_reader: EventReader, + mut event_writer: EventWriter, + command_registry: Res, + scope_registry: Res, + entity_scopes: Query<&CommandScopes>, +) { + for command_event in event_reader.read() { + let executor = command_event.executor; + // these are the leafs of the graph that are executable under this command + // group + let executable_leafs = command_registry + .executables + .iter() + .collect::>(); + let root = command_registry.graph.root; + + let command_input = &*command_event.command; + let graph = &command_registry.graph.graph; + let input = ParseInput::new(command_input); + + let mut to_be_executed = Vec::new(); + + let mut args = Vec::new(); + let mut modifiers_to_be_executed = Vec::new(); + + parse_command_args( + &mut args, + &mut modifiers_to_be_executed, + input, + graph, + &executable_leafs, + command_registry.as_ref(), + &mut to_be_executed, + root, + executor, + &entity_scopes, + scope_registry.as_ref(), + false, + ); + + let mut modifiers = HashMap::new(); + for (node, modifier) in modifiers_to_be_executed { + command_registry.modifiers.get(&node).unwrap()(modifier, &mut modifiers); + } + + debug!("Command processed: /{}", command_event.command); + + for node in to_be_executed { + println!("executing node: {:?}", node); + event_writer.send(CommandProcessedEvent { + command: args.join(" "), + executor, + modifiers: modifiers.clone(), + node, + }); + } + } +} + +#[allow(clippy::too_many_arguments)] +/// recursively parse the command args. +fn parse_command_args( + command_args: &mut Vec, + modifiers_to_be_executed: &mut Vec<(NodeIndex, String)>, + mut input: ParseInput, + graph: &Graph, + executable_leafs: &[&NodeIndex], + command_registry: &CommandRegistry, + to_be_executed: &mut Vec, + current_node: NodeIndex, + executor: Entity, + scopes: &Query<&CommandScopes>, + scope_registry: &CommandScopeRegistry, + coming_from_redirect: bool, +) -> bool { + let node_scopes = &graph[current_node].scopes; + let default_scopes = CommandScopes::new(); + let client_scopes: Vec<&str> = scopes + .get(executor) + .unwrap_or(&default_scopes) + .0 + .iter() + .map(|scope| scope.as_str()) + .collect(); + // if empty, we assume the node is global + if !node_scopes.is_empty() { + let mut has_scope = false; + for scope in node_scopes { + if scope_registry.any_grants(&client_scopes, scope) { + has_scope = true; + break; + } + } + if !has_scope { + return false; + } + } + + if !coming_from_redirect { + // we want to skip whitespace before matching the node + input.skip_whitespace(); + match &graph[current_node].data { + // no real need to check for root node + NodeData::Root => { + if command_registry.modifiers.contains_key(¤t_node) { + modifiers_to_be_executed.push((current_node, String::new())); + } + } + // if the node is a literal, we want to match the name of the literal + // to the input + NodeData::Literal { name } => { + match input.match_next(name) { + true => { + if !input.match_next(" ") && !input.is_done() { + return false; + } // we want to pop the whitespace after the literal + if command_registry.modifiers.contains_key(¤t_node) { + modifiers_to_be_executed.push((current_node, String::new())); + } + } + false => return false, + } + } + // if the node is an argument, we want to parse the argument + NodeData::Argument { .. } => { + let parser = match command_registry.parsers.get(¤t_node) { + Some(parser) => parser, + None => { + return false; + } + }; + // we want to save the input before and after parsing + // this is so we can save the argument to the command args + let pre_input = input.clone().into_inner(); + let valid = parser(&mut input); + if valid { + // If input.len() > pre_input.len() the parser replaced the input + let Some(arg) = pre_input + .get(..pre_input.len().wrapping_sub(input.len())) + .map(|s| s.to_string()) + else { + panic!( + "Parser replaced input with another string. This is not allowed. \ + Attempting to parse: {}", + input.into_inner() + ); + }; + + if command_registry.modifiers.contains_key(¤t_node) { + modifiers_to_be_executed.push((current_node, arg.clone())); + } + command_args.push(arg); + } else { + return false; + } + } + } + } else { + command_args.clear(); + } + + input.skip_whitespace(); + if input.is_done() && executable_leafs.contains(&¤t_node) { + to_be_executed.push(current_node); + return true; + } + + let mut all_invalid = true; + for neighbor in graph.neighbors(current_node) { + let pre_input = input.clone(); + let mut args = command_args.clone(); + let mut modifiers = modifiers_to_be_executed.clone(); + let valid = parse_command_args( + &mut args, + &mut modifiers, + input.clone(), + graph, + executable_leafs, + command_registry, + to_be_executed, + neighbor, + executor, + scopes, + scope_registry, + { + let edge = graph.find_edge(current_node, neighbor).unwrap(); + matches!(&graph[edge], CommandEdgeType::Redirect) + }, + ); + if valid { + *command_args = args; + *modifiers_to_be_executed = modifiers; + all_invalid = false; + } else { + input = pre_input; + } + } + if all_invalid { + return false; + } + true +} diff --git a/vendor/valence/crates/valence_command/src/modifier_value.rs b/vendor/valence/crates/valence_command/src/modifier_value.rs new file mode 100644 index 00000000..811e6e96 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/modifier_value.rs @@ -0,0 +1,219 @@ +use std::cmp::Ordering; +use std::collections::{BTreeMap, HashMap}; +use std::hash::{Hash, Hasher}; + +use ordered_float::OrderedFloat; + +/// Used to store keys values for command modifiers. Heavily inspired by +/// serde-value. +#[derive(Clone, Debug)] +pub enum ModifierValue { + Bool(bool), + + U8(u8), + U16(u16), + U32(u32), + U64(u64), + + I8(i8), + I16(i16), + I32(i32), + I64(i64), + + F32(f32), + F64(f64), + + Char(char), + String(String), + + Unit, + Option(Option>), + Seq(Vec), + Map(BTreeMap), +} + +#[allow(clippy::unit_hash)] +impl Hash for ModifierValue { + fn hash(&self, hasher: &mut H) + where + H: Hasher, + { + self.discriminant().hash(hasher); + match *self { + ModifierValue::Bool(v) => v.hash(hasher), + ModifierValue::U8(v) => v.hash(hasher), + ModifierValue::U16(v) => v.hash(hasher), + ModifierValue::U32(v) => v.hash(hasher), + ModifierValue::U64(v) => v.hash(hasher), + ModifierValue::I8(v) => v.hash(hasher), + ModifierValue::I16(v) => v.hash(hasher), + ModifierValue::I32(v) => v.hash(hasher), + ModifierValue::I64(v) => v.hash(hasher), + ModifierValue::F32(v) => OrderedFloat(v).hash(hasher), + ModifierValue::F64(v) => OrderedFloat(v).hash(hasher), + ModifierValue::Char(v) => v.hash(hasher), + ModifierValue::String(ref v) => v.hash(hasher), + ModifierValue::Unit => ().hash(hasher), + ModifierValue::Option(ref v) => v.hash(hasher), + ModifierValue::Seq(ref v) => v.hash(hasher), + ModifierValue::Map(ref v) => v.hash(hasher), + } + } +} + +impl PartialEq for ModifierValue { + fn eq(&self, rhs: &Self) -> bool { + match (self, rhs) { + (&ModifierValue::Bool(v0), &ModifierValue::Bool(v1)) if v0 == v1 => true, + (&ModifierValue::U8(v0), &ModifierValue::U8(v1)) if v0 == v1 => true, + (&ModifierValue::U16(v0), &ModifierValue::U16(v1)) if v0 == v1 => true, + (&ModifierValue::U32(v0), &ModifierValue::U32(v1)) if v0 == v1 => true, + (&ModifierValue::U64(v0), &ModifierValue::U64(v1)) if v0 == v1 => true, + (&ModifierValue::I8(v0), &ModifierValue::I8(v1)) if v0 == v1 => true, + (&ModifierValue::I16(v0), &ModifierValue::I16(v1)) if v0 == v1 => true, + (&ModifierValue::I32(v0), &ModifierValue::I32(v1)) if v0 == v1 => true, + (&ModifierValue::I64(v0), &ModifierValue::I64(v1)) if v0 == v1 => true, + (&ModifierValue::F32(v0), &ModifierValue::F32(v1)) + if OrderedFloat(v0) == OrderedFloat(v1) => + { + true + } + (&ModifierValue::F64(v0), &ModifierValue::F64(v1)) + if OrderedFloat(v0) == OrderedFloat(v1) => + { + true + } + (&ModifierValue::Char(v0), &ModifierValue::Char(v1)) if v0 == v1 => true, + (ModifierValue::String(v0), ModifierValue::String(v1)) if v0 == v1 => true, + (ModifierValue::Unit, ModifierValue::Unit) => true, + (ModifierValue::Option(v0), ModifierValue::Option(v1)) if v0 == v1 => true, + (ModifierValue::Seq(v0), ModifierValue::Seq(v1)) if v0 == v1 => true, + (ModifierValue::Map(v0), ModifierValue::Map(v1)) if v0 == v1 => true, + _ => false, + } + } +} + +impl Ord for ModifierValue { + fn cmp(&self, rhs: &Self) -> Ordering { + match (self, rhs) { + (&ModifierValue::Bool(v0), ModifierValue::Bool(v1)) => v0.cmp(v1), + (&ModifierValue::U8(v0), ModifierValue::U8(v1)) => v0.cmp(v1), + (&ModifierValue::U16(v0), ModifierValue::U16(v1)) => v0.cmp(v1), + (&ModifierValue::U32(v0), ModifierValue::U32(v1)) => v0.cmp(v1), + (&ModifierValue::U64(v0), ModifierValue::U64(v1)) => v0.cmp(v1), + (&ModifierValue::I8(v0), ModifierValue::I8(v1)) => v0.cmp(v1), + (&ModifierValue::I16(v0), ModifierValue::I16(v1)) => v0.cmp(v1), + (&ModifierValue::I32(v0), ModifierValue::I32(v1)) => v0.cmp(v1), + (&ModifierValue::I64(v0), ModifierValue::I64(v1)) => v0.cmp(v1), + (&ModifierValue::F32(v0), &ModifierValue::F32(v1)) => { + OrderedFloat(v0).cmp(&OrderedFloat(v1)) + } + (&ModifierValue::F64(v0), &ModifierValue::F64(v1)) => { + OrderedFloat(v0).cmp(&OrderedFloat(v1)) + } + (ModifierValue::Char(v0), ModifierValue::Char(ref v1)) => v0.cmp(v1), + (ModifierValue::String(ref v0), ModifierValue::String(ref v1)) => v0.cmp(v1), + (ModifierValue::Unit, &ModifierValue::Unit) => Ordering::Equal, + (ModifierValue::Option(ref v0), ModifierValue::Option(ref v1)) => v0.cmp(v1), + (ModifierValue::Seq(ref v0), ModifierValue::Seq(ref v1)) => v0.cmp(v1), + (ModifierValue::Map(ref v0), ModifierValue::Map(ref v1)) => v0.cmp(v1), + (v0, v1) => v0.discriminant().cmp(&v1.discriminant()), + } + } +} + +impl ModifierValue { + fn discriminant(&self) -> usize { + match *self { + ModifierValue::Bool(..) => 0, + ModifierValue::U8(..) => 1, + ModifierValue::U16(..) => 2, + ModifierValue::U32(..) => 3, + ModifierValue::U64(..) => 4, + ModifierValue::I8(..) => 5, + ModifierValue::I16(..) => 6, + ModifierValue::I32(..) => 7, + ModifierValue::I64(..) => 8, + ModifierValue::F32(..) => 9, + ModifierValue::F64(..) => 10, + ModifierValue::Char(..) => 11, + ModifierValue::String(..) => 12, + ModifierValue::Unit => 13, + ModifierValue::Option(..) => 14, + ModifierValue::Seq(..) => 16, + ModifierValue::Map(..) => 17, + } + } +} + +impl Eq for ModifierValue {} +impl PartialOrd for ModifierValue { + fn partial_cmp(&self, rhs: &Self) -> Option { + Some(self.cmp(rhs)) + } +} + +macro_rules! impl_from { + ($ty:ty, $variant:ident) => { + impl From<$ty> for ModifierValue { + fn from(v: $ty) -> Self { + ModifierValue::$variant(v) + } + } + }; +} + +impl_from!(bool, Bool); + +impl_from!(u8, U8); +impl_from!(u16, U16); +impl_from!(u32, U32); +impl_from!(u64, U64); + +impl_from!(i8, I8); +impl_from!(i16, I16); +impl_from!(i32, I32); +impl_from!(i64, I64); + +impl_from!(f32, F32); +impl_from!(f64, F64); + +impl_from!(char, Char); +impl_from!(String, String); + +impl From<&str> for ModifierValue { + fn from(v: &str) -> Self { + ModifierValue::String(v.to_owned()) + } +} + +impl From<()> for ModifierValue { + fn from(_: ()) -> Self { + ModifierValue::Unit + } +} + +impl From> for ModifierValue { + fn from(v: Option) -> Self { + ModifierValue::Option(v.map(Box::new)) + } +} + +impl> From> for ModifierValue { + fn from(v: Vec) -> Self { + ModifierValue::Seq(v.into_iter().map(Into::into).collect()) + } +} + +impl, V: Into> From> for ModifierValue { + fn from(v: BTreeMap) -> Self { + ModifierValue::Map(v.into_iter().map(|(k, v)| (k.into(), v.into())).collect()) + } +} + +impl, V: Into> From> for ModifierValue { + fn from(v: HashMap) -> Self { + ModifierValue::Map(v.into_iter().map(|(k, v)| (k.into(), v.into())).collect()) + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers.rs b/vendor/valence/crates/valence_command/src/parsers.rs new file mode 100644 index 00000000..956b70ee --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers.rs @@ -0,0 +1,309 @@ +//! A collection of parses for use in command argument nodes. +pub mod angle; +pub mod block_pos; +pub mod bool; +pub mod color; +pub mod column_pos; +pub mod entity_anchor; +pub mod entity_selector; +pub mod gamemode; +pub mod inventory_slot; +pub mod numbers; +pub mod rotation; +pub mod score_holder; +pub mod strings; +pub mod swizzle; +pub mod time; +pub mod vec2; +pub mod vec3; + +use std::ops::Add; + +pub use block_pos::BlockPos; +pub use column_pos::ColumnPos; +pub use entity_anchor::EntityAnchor; +pub use entity_selector::EntitySelector; +pub use inventory_slot::InventorySlot; +pub use rotation::Rotation; +pub use score_holder::ScoreHolder; +pub use strings::{GreedyString, QuotableString}; +pub use swizzle::Swizzle; +use thiserror::Error; +pub use time::Time; +use tracing::error; +pub(crate) use valence_server::protocol::packets::play::command_tree_s2c::Parser; +pub use vec2::Vec2; +pub use vec3::Vec3; + +pub trait CommandArg: Sized { + fn arg_from_str(string: &str) -> Result { + Self::parse_arg(&mut ParseInput::new(string)) + } + + fn parse_arg(input: &mut ParseInput) -> Result; + /// what will the client be sent + fn display() -> Parser; +} + +/// +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ParseInput<'a>(&'a str); + +impl<'a> ParseInput<'a> { + fn advance(&mut self) { + self.advance_n_chars(1); + } + + fn advance_n_chars(&mut self, n: usize) { + if self.is_done() { + return; + } + match self.0.char_indices().nth(n) { + Some((len, _)) => { + self.0 = &self.0[len..]; + } + None => { + self.0 = &self.0[self.0.len()..]; + } + } + } + + fn advance_n_bytes(&mut self, n: usize) { + if self.is_done() { + return; + } + self.0 = &self.0[n..]; + } + pub fn new(input: &'a str) -> Self { + ParseInput(input) + } + + /// Returns the next character without advancing the input + pub fn peek(&self) -> Option { + self.0.chars().next() + } + + /// Returns the next n characters without advancing the input + pub fn peek_n(&self, n: usize) -> &'a str { + self.0 + .char_indices() + .nth(n) + .map(|(idx, _)| &self.0[..idx]) + .unwrap_or(self.0) + } + + /// Returns the next word without advancing the input + pub fn peek_word(&self) -> &'a str { + self.0 + .char_indices() + .find(|(_, c)| c.is_whitespace()) + .map(|(idx, _)| &self.0[..idx]) + .unwrap_or(self.0) + } + + /// Checks if the input is empty + pub fn is_done(&self) -> bool { + self.0.is_empty() + } + + /// Returns the next character and advances the input + pub fn pop(&mut self) -> Option { + let c = self.peek()?; + self.advance(); + Some(c) + } + + /// Returns the next n characters and advances the input + pub fn pop_n(&mut self, n: usize) -> &str { + let s = self.peek_n(n); + self.advance_n_bytes(s.len()); + s + } + + /// Returns the next word and advances the input + pub fn pop_word(&mut self) -> &str { + let s = self.peek_word(); + self.advance_n_bytes(s.len()); + s + } + + /// Returns the rest of the input and advances the input + pub fn pop_all(&mut self) -> Option<&str> { + let s = self.0; + self.advance_n_bytes(self.0.len()); + Some(s) + } + + /// Returns the next word and advances the input + pub fn pop_to_next(&mut self, c: char) -> Option<&str> { + let pos = self.0.find(c)?; + let s = &self.0[..pos]; + self.advance_n_bytes(pos); + Some(s) + } + + /// Matches the case-insensitive string and advances the input if it matches + pub fn match_next(&mut self, string: &str) -> bool { + if self + .0 + .to_lowercase() + .starts_with(string.to_lowercase().as_str()) + { + self.advance_n_bytes(string.len()); + true + } else { + false + } + } + + /// Skip all whitespace at the front of the input + pub fn skip_whitespace(&mut self) { + while let Some(c) = self.peek() { + if c.is_whitespace() { + self.advance(); + } else { + break; + } + } + } + + /// Set the inner string + pub fn into_inner(self) -> &'a str { + self.0 + } + + #[allow(clippy::len_without_is_empty)] + pub fn len(&self) -> usize { + self.0.len() + } +} + +#[test] +fn test_parse_input() { + let mut input = ParseInput::new("The QuIck brown FOX jumps over the lazy dog"); + assert_eq!(input.peek(), Some('T')); + assert_eq!(input.peek_n(0), ""); + assert_eq!(input.peek_n(1), "T"); + assert_eq!(input.peek_n(2), "Th"); + assert_eq!(input.peek_n(3), "The"); + + assert_eq!(input.peek_word(), "The"); + input.pop_word(); + input.skip_whitespace(); + assert_eq!(input.peek_word(), "QuIck"); + + assert!(input.match_next("quick")); + input.pop(); + assert_eq!(input.peek_word(), "brown"); + + assert!(input.match_next("brown fox")); + assert_eq!(input.pop_all(), Some(" jumps over the lazy dog")); +} + +#[derive(Debug, Error)] +pub enum CommandArgParseError { + // these should be player facing and not disclose internal information + #[error("invalid argument, expected {expected} got {got}")] // e.g. "integer" number + InvalidArgument { expected: String, got: String }, + #[error("invalid argument length")] + InvalidArgLength, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum AbsoluteOrRelative { + Absolute(T), + Relative(T), // current value + T +} + +impl AbsoluteOrRelative +where + T: Add + Copy, +{ + pub fn get(&self, original: T) -> T { + match self { + Self::Absolute(num) => *num, + Self::Relative(num) => *num + original, + } + } +} + +impl CommandArg for AbsoluteOrRelative +where + T: CommandArg + Default, +{ + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.peek() == Some('~') { + input.advance(); + if input.peek() == Some(' ') || input.peek().is_none() { + Ok(AbsoluteOrRelative::Relative(T::default())) + } else { + Ok(AbsoluteOrRelative::Relative(T::parse_arg(input)?)) + } + } else if input.peek() == Some(' ') || input.peek().is_none() { + Err(CommandArgParseError::InvalidArgLength) + } else { + Ok(AbsoluteOrRelative::Absolute(T::parse_arg(input)?)) + } + } + + fn display() -> Parser { + T::display() + } +} + +#[test] +fn test_absolute_or_relative() { + let mut input = ParseInput::new("~"); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Relative(0) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("~1"); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Relative(1) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("~1.5"); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Relative(1.5) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("1"); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Absolute(1) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("1.5 "); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Absolute(1.5) + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("1.5 2"); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Absolute(1.5) + ); + assert!(!input.is_done()); + assert_eq!( + AbsoluteOrRelative::::parse_arg(&mut input).unwrap(), + AbsoluteOrRelative::Absolute(2.0) + ); + assert!(input.is_done()); +} + +impl Default for AbsoluteOrRelative { + fn default() -> Self { + AbsoluteOrRelative::Absolute(T::default()) + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/angle.rs b/vendor/valence/crates/valence_command/src/parsers/angle.rs new file mode 100644 index 00000000..f2c69fee --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/angle.rs @@ -0,0 +1,20 @@ +use bevy_derive::Deref; + +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Default, Deref)] +pub struct Angle(pub f32); + +impl CommandArg for Angle { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let angle = f32::parse_arg(input)?; + + Ok(Angle(angle)) + } + + fn display() -> Parser { + Parser::Angle + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/block_pos.rs b/vendor/valence/crates/valence_command/src/parsers/block_pos.rs new file mode 100644 index 00000000..700b443a --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/block_pos.rs @@ -0,0 +1,62 @@ +use super::Parser; +use crate::parsers::{AbsoluteOrRelative, CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct BlockPos { + pub x: AbsoluteOrRelative, + pub y: AbsoluteOrRelative, + pub z: AbsoluteOrRelative, +} + +impl CommandArg for BlockPos { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let x = AbsoluteOrRelative::::parse_arg(input)?; + input.skip_whitespace(); + let y = AbsoluteOrRelative::::parse_arg(input)?; + input.skip_whitespace(); + let z = AbsoluteOrRelative::::parse_arg(input)?; + + Ok(BlockPos { x, y, z }) + } + + fn display() -> Parser { + Parser::BlockPos + } +} + +#[test] +fn test_block_pos() { + let mut input = ParseInput::new("~-1 2 3"); + assert_eq!( + BlockPos::parse_arg(&mut input).unwrap(), + BlockPos { + x: AbsoluteOrRelative::Relative(-1), + y: AbsoluteOrRelative::Absolute(2), + z: AbsoluteOrRelative::Absolute(3) + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("-1 ~2 3 "); + assert_eq!( + BlockPos::parse_arg(&mut input).unwrap(), + BlockPos { + x: AbsoluteOrRelative::Absolute(-1), + y: AbsoluteOrRelative::Relative(2), + z: AbsoluteOrRelative::Absolute(3) + } + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("-1 2 ~3 4"); + assert_eq!( + BlockPos::parse_arg(&mut input).unwrap(), + BlockPos { + x: AbsoluteOrRelative::Absolute(-1), + y: AbsoluteOrRelative::Absolute(2), + z: AbsoluteOrRelative::Relative(3) + } + ); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/bool.rs b/vendor/valence/crates/valence_command/src/parsers/bool.rs new file mode 100644 index 00000000..9dd83f54 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/bool.rs @@ -0,0 +1,42 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +impl CommandArg for bool { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.match_next("true") { + Ok(true) + } else if input.match_next("false") { + Ok(false) + } else { + Err(CommandArgParseError::InvalidArgument { + expected: "bool".to_string(), + got: input.peek_word().to_string(), + }) + } + } + + fn display() -> Parser { + Parser::Bool + } +} + +#[test] +fn test_bool() { + let mut input = ParseInput::new("true"); + assert!(bool::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("false"); + assert!(!bool::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("false "); + assert!(!bool::parse_arg(&mut input).unwrap()); + assert!(!input.is_done()); + + let mut input = ParseInput::new("falSe trUe"); + assert!(!bool::parse_arg(&mut input).unwrap()); + assert!(bool::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/color.rs b/vendor/valence/crates/valence_command/src/parsers/color.rs new file mode 100644 index 00000000..4695f38b --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/color.rs @@ -0,0 +1,54 @@ +use valence_text::Color; + +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +impl CommandArg for Color { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.match_next("black") { + Ok(Self::BLACK) + } else if input.match_next("dark_blue") { + Ok(Self::DARK_BLUE) + } else if input.match_next("dark_green") { + Ok(Self::DARK_GREEN) + } else if input.match_next("dark_aqua") { + Ok(Self::DARK_AQUA) + } else if input.match_next("dark_red") { + Ok(Self::DARK_RED) + } else if input.match_next("dark_purple") { + Ok(Self::DARK_PURPLE) + } else if input.match_next("gold") { + Ok(Self::GOLD) + } else if input.match_next("gray") { + Ok(Self::GRAY) + } else if input.match_next("dark_gray") { + Ok(Self::DARK_GRAY) + } else if input.match_next("blue") { + Ok(Self::BLUE) + } else if input.match_next("green") { + Ok(Self::GREEN) + } else if input.match_next("aqua") { + Ok(Self::AQUA) + } else if input.match_next("red") { + Ok(Self::RED) + } else if input.match_next("light_purple") { + Ok(Self::LIGHT_PURPLE) + } else if input.match_next("yellow") { + Ok(Self::YELLOW) + } else if input.match_next("white") { + Ok(Self::WHITE) + } else if input.match_next("reset") { + Ok(Self::Reset) + } else { + Err(CommandArgParseError::InvalidArgument { + expected: "chat_color".to_string(), + got: "not a valid chat color".to_string(), + }) + } + } + + fn display() -> Parser { + Parser::Color + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/column_pos.rs b/vendor/valence/crates/valence_command/src/parsers/column_pos.rs new file mode 100644 index 00000000..041c3e3d --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/column_pos.rs @@ -0,0 +1,64 @@ +use super::Parser; +use crate::parsers::{AbsoluteOrRelative, CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct ColumnPos { + pub x: AbsoluteOrRelative, + pub y: AbsoluteOrRelative, + pub z: AbsoluteOrRelative, +} + +impl CommandArg for ColumnPos { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let x = AbsoluteOrRelative::::parse_arg(input)?; + input.skip_whitespace(); + let y = AbsoluteOrRelative::::parse_arg(input)?; + input.skip_whitespace(); + let z = AbsoluteOrRelative::::parse_arg(input)?; + + Ok(ColumnPos { x, y, z }) + } + + fn display() -> Parser { + Parser::ColumnPos + } +} + +#[test] +fn test_column_pos() { + let mut input = ParseInput::new("~-1 2 3"); + assert_eq!( + ColumnPos::parse_arg(&mut input).unwrap(), + ColumnPos { + x: AbsoluteOrRelative::Relative(-1), + y: AbsoluteOrRelative::Absolute(2), + z: AbsoluteOrRelative::Absolute(3) + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("-1 ~2 3 hello"); + assert_eq!( + ColumnPos::parse_arg(&mut input).unwrap(), + ColumnPos { + x: AbsoluteOrRelative::Absolute(-1), + y: AbsoluteOrRelative::Relative(2), + z: AbsoluteOrRelative::Absolute(3) + } + ); + assert!(!input.is_done()); + input.skip_whitespace(); + assert!(input.match_next("hello")); + + let mut input = ParseInput::new("-1 2 ~3 4"); + assert_eq!( + ColumnPos::parse_arg(&mut input).unwrap(), + ColumnPos { + x: AbsoluteOrRelative::Absolute(-1), + y: AbsoluteOrRelative::Absolute(2), + z: AbsoluteOrRelative::Relative(3) + } + ); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/entity_anchor.rs b/vendor/valence/crates/valence_command/src/parsers/entity_anchor.rs new file mode 100644 index 00000000..88e42acb --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/entity_anchor.rs @@ -0,0 +1,29 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub enum EntityAnchor { + #[default] + Eyes, + Feet, +} + +impl CommandArg for EntityAnchor { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.match_next("eyes") { + Ok(EntityAnchor::Eyes) + } else if input.match_next("feet") { + Ok(EntityAnchor::Feet) + } else { + Err(CommandArgParseError::InvalidArgument { + expected: "entity_anchor".to_string(), + got: "not a valid entity anchor".to_string(), + }) + } + } + + fn display() -> Parser { + Parser::EntityAnchor + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/entity_selector.rs b/vendor/valence/crates/valence_command/src/parsers/entity_selector.rs new file mode 100644 index 00000000..af48f76a --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/entity_selector.rs @@ -0,0 +1,136 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum EntitySelector { + SimpleSelector(EntitySelectors), + ComplexSelector(EntitySelectors, String), +} + +#[derive(Debug, Clone, PartialEq, Eq, Default)] +pub enum EntitySelectors { + AllEntities, + SinglePlayer(String), + #[default] + AllPlayers, + SelfPlayer, + NearestPlayer, + RandomPlayer, +} + +impl CommandArg for EntitySelector { + // we want to get either a simple string [`@e`, `@a`, `@p`, `@r`, + // ``] or a full selector: [`@e[]`, `@a[]`, + // `@p[]`, `@r[]`] the selectors can have spaces in + // them, so we need to be careful + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let mut simple_selector = None; + while let Some(c) = input.peek() { + match c { + '@' => { + input.pop(); // pop the '@' + match input.pop() { + Some('e') => simple_selector = Some(EntitySelectors::AllEntities), + Some('a') => simple_selector = Some(EntitySelectors::AllPlayers), + Some('p') => simple_selector = Some(EntitySelectors::NearestPlayer), + Some('r') => simple_selector = Some(EntitySelectors::RandomPlayer), + Some('s') => simple_selector = Some(EntitySelectors::SelfPlayer), + _ => { + return Err(CommandArgParseError::InvalidArgument { + expected: "entity selector".to_string(), + got: c.to_string(), + }) + } + } + if input.peek() != Some('[') { + // if there's no complex selector, we're done + return Ok(EntitySelector::SimpleSelector(simple_selector.unwrap())); + } + } + '[' => { + input.pop(); + if simple_selector.is_none() { + return Err(CommandArgParseError::InvalidArgument { + expected: "entity selector".to_string(), + got: c.to_string(), + }); + } + let mut s = String::new(); + while let Some(c) = input.pop() { + if c == ']' { + return Ok(EntitySelector::ComplexSelector( + simple_selector.unwrap(), + s.trim().to_string(), + )); + } else { + s.push(c); + } + } + } + _ => { + return Ok(EntitySelector::SimpleSelector( + EntitySelectors::SinglePlayer(String::parse_arg(input)?), + )) + } + } + } + Err(CommandArgParseError::InvalidArgLength) + } + + fn display() -> Parser { + Parser::Entity { + only_players: false, + single: false, + } + } +} + +#[test] +fn test_entity_selector() { + let mut input = ParseInput::new("@e"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::SimpleSelector(EntitySelectors::AllEntities) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("@e[distance=..5]"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::ComplexSelector(EntitySelectors::AllEntities, "distance=..5".to_string()) + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("@s[distance=..5"); + assert!(EntitySelector::parse_arg(&mut input).is_err()); + assert!(input.is_done()); + + let mut input = ParseInput::new("@r[distance=..5] hello"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::ComplexSelector(EntitySelectors::RandomPlayer, "distance=..5".to_string()) + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("@p[distance=..5]hello"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::ComplexSelector(EntitySelectors::NearestPlayer, "distance=..5".to_string()) + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("@e[distance=..5] hello world"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::ComplexSelector(EntitySelectors::AllEntities, "distance=..5".to_string()) + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("@e[distance=..5]hello world"); + assert_eq!( + EntitySelector::parse_arg(&mut input).unwrap(), + EntitySelector::ComplexSelector(EntitySelectors::AllEntities, "distance=..5".to_string()) + ); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/gamemode.rs b/vendor/valence/crates/valence_command/src/parsers/gamemode.rs new file mode 100644 index 00000000..c2c8a6c6 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/gamemode.rs @@ -0,0 +1,28 @@ +use valence_server::protocol::packets::play::command_tree_s2c::Parser; +use valence_server::GameMode; + +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +impl CommandArg for GameMode { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.match_next("survival") { + Ok(GameMode::Survival) + } else if input.match_next("creative") { + Ok(GameMode::Creative) + } else if input.match_next("adventure") { + Ok(GameMode::Adventure) + } else if input.match_next("spectator") { + Ok(GameMode::Spectator) + } else { + Err(CommandArgParseError::InvalidArgument { + expected: "game_mode".to_string(), + got: input.peek_word().to_string(), + }) + } + } + + fn display() -> Parser { + Parser::GameMode + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/inventory_slot.rs b/vendor/valence/crates/valence_command/src/parsers/inventory_slot.rs new file mode 100644 index 00000000..d9312948 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/inventory_slot.rs @@ -0,0 +1,20 @@ +use bevy_derive::Deref; + +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deref)] +pub struct InventorySlot(pub u32); + +impl CommandArg for InventorySlot { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let slot = u32::parse_arg(input)?; + + Ok(InventorySlot(slot)) + } + + fn display() -> Parser { + Parser::ItemSlot + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/numbers.rs b/vendor/valence/crates/valence_command/src/parsers/numbers.rs new file mode 100644 index 00000000..9f8ad976 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/numbers.rs @@ -0,0 +1,55 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; +macro_rules! impl_parser_for_number { + ($type:ty, $name:expr, $parser:ident) => { + impl CommandArg for $type { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let s = input.pop_word(); + + let parsed = s.parse::<$type>(); + + parsed.map_err(|_| CommandArgParseError::InvalidArgument { + expected: $name.to_string(), + got: s.to_string(), + }) + } + + fn display() -> Parser { + Parser::$parser { + min: None, + max: None, + } + } + } + }; +} + +impl_parser_for_number!(f32, "float", Float); +impl_parser_for_number!(f64, "double", Double); +impl_parser_for_number!(i32, "integer", Integer); +impl_parser_for_number!(i64, "long", Long); +impl_parser_for_number!(u32, "unsigned integer", Integer); + +#[test] +fn test_number() { + let mut input = ParseInput::new("1"); + assert_eq!(1, i32::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("1"); + assert_eq!(1, i64::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("1.0"); + assert_eq!(1.0, f32::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("1.0"); + assert_eq!(1.0, f64::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); + + let mut input = ParseInput::new("3.40282347e+38 "); + assert_eq!(f32::MAX, f32::parse_arg(&mut input).unwrap()); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/rotation.rs b/vendor/valence/crates/valence_command/src/parsers/rotation.rs new file mode 100644 index 00000000..5bcb554c --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/rotation.rs @@ -0,0 +1,21 @@ +use bevy_derive::Deref; + +use super::Parser; +use crate::parsers::vec2::Vec2; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Default, Deref)] +pub struct Rotation(pub Vec2); + +impl CommandArg for Rotation { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let vec2 = Vec2::parse_arg(input)?; + + Ok(Rotation(vec2)) + } + + fn display() -> Parser { + Parser::Rotation + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/score_holder.rs b/vendor/valence/crates/valence_command/src/parsers/score_holder.rs new file mode 100644 index 00000000..654a5d3e --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/score_holder.rs @@ -0,0 +1,27 @@ +use super::Parser; +use crate::parsers::entity_selector::EntitySelector; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, PartialEq, Eq, Default)] +pub enum ScoreHolder { + Entity(EntitySelector), + #[default] + All, +} + +impl CommandArg for ScoreHolder { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + if input.peek() == Some('*') { + Ok(ScoreHolder::All) + } else { + Ok(ScoreHolder::Entity(EntitySelector::parse_arg(input)?)) + } + } + + fn display() -> Parser { + Parser::ScoreHolder { + allow_multiple: false, + } + } +} diff --git a/vendor/valence/crates/valence_command/src/parsers/strings.rs b/vendor/valence/crates/valence_command/src/parsers/strings.rs new file mode 100644 index 00000000..ceeabe15 --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/strings.rs @@ -0,0 +1,107 @@ +use bevy_derive::Deref; +use valence_server::protocol::packets::play::command_tree_s2c::StringArg; + +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +impl CommandArg for String { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + Ok(input.pop_word().to_string()) + } + + fn display() -> Parser { + Parser::String(StringArg::SingleWord) + } +} + +#[test] +fn test_string() { + let mut input = ParseInput::new("hello world"); + assert_eq!("hello", String::parse_arg(&mut input).unwrap()); + assert_eq!("world", String::parse_arg(&mut input).unwrap()); + assert!(input.is_done()); +} + +#[derive(Debug, Clone, PartialEq, Eq, Default, Deref)] +pub struct GreedyString(pub String); + +impl CommandArg for GreedyString { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + Ok(GreedyString( + match input.pop_all() { + Some(s) => s, + None => return Err(CommandArgParseError::InvalidArgLength), + } + .to_string(), + )) + } + + fn display() -> Parser { + Parser::String(StringArg::GreedyPhrase) + } +} + +#[test] +fn test_greedy_string() { + let mut input = ParseInput::new("hello world"); + assert_eq!( + "hello world", + GreedyString::parse_arg(&mut input).unwrap().0 + ); + assert!(input.is_done()); +} + +#[derive(Debug, Clone, PartialEq, Eq, Default, Deref)] +pub struct QuotableString(pub String); + +impl CommandArg for QuotableString { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + match input.peek() { + Some('"') => { + input.pop(); + let mut s = String::new(); + let mut escaped = false; + while let Some(c) = input.pop() { + if escaped { + s.push(c); + escaped = false; + } else if c == '\\' { + escaped = true; + } else if c == '"' { + return Ok(QuotableString(s)); + } else { + s.push(c); + } + } + Err(CommandArgParseError::InvalidArgLength) + } + Some(_) => Ok(QuotableString(String::parse_arg(input)?)), + None => Err(CommandArgParseError::InvalidArgLength), + } + } + + fn display() -> Parser { + Parser::String(StringArg::QuotablePhrase) + } +} + +#[test] +fn test_quotable_string() { + let mut input = ParseInput::new("\"hello world\""); + assert_eq!( + "hello world", + QuotableString::parse_arg(&mut input).unwrap().0 + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("\"hello w\"orld"); + assert_eq!("hello w", QuotableString::parse_arg(&mut input).unwrap().0); + assert!(!input.is_done()); + + let mut input = ParseInput::new("hello world\""); + assert_eq!("hello", QuotableString::parse_arg(&mut input).unwrap().0); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/swizzle.rs b/vendor/valence/crates/valence_command/src/parsers/swizzle.rs new file mode 100644 index 00000000..161c94dd --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/swizzle.rs @@ -0,0 +1,117 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] +pub struct Swizzle { + pub x: bool, + pub y: bool, + pub z: bool, +} + +impl CommandArg for Swizzle { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let mut swizzle = Swizzle::default(); + while let Some(c) = input.peek() { + match c { + 'x' => swizzle.x = true, + 'y' => swizzle.y = true, + 'z' => swizzle.z = true, + _ => break, + } + input.pop(); + } + + Ok(swizzle) + } + + fn display() -> Parser { + Parser::Swizzle + } +} + +#[test] +fn test_swizzle() { + let mut input = ParseInput::new("xyzzzz"); + let swizzle = Swizzle::parse_arg(&mut input).unwrap(); + assert_eq!( + swizzle, + Swizzle { + x: true, + y: true, + z: true + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("xzy"); + let swizzle = Swizzle::parse_arg(&mut input).unwrap(); + assert_eq!( + swizzle, + Swizzle { + x: true, + y: true, + z: true + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("x"); + let swizzle = Swizzle::parse_arg(&mut input).unwrap(); + assert_eq!( + swizzle, + Swizzle { + x: true, + y: false, + z: false + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("x y z zy xyz"); + let swizzle_a = Swizzle::parse_arg(&mut input).unwrap(); + let swizzle_b = Swizzle::parse_arg(&mut input).unwrap(); + let swizzle_c = Swizzle::parse_arg(&mut input).unwrap(); + let swizzle_d = Swizzle::parse_arg(&mut input).unwrap(); + let swizzle_e = Swizzle::parse_arg(&mut input).unwrap(); + assert_eq!( + swizzle_a, + Swizzle { + x: true, + y: false, + z: false + } + ); + assert_eq!( + swizzle_b, + Swizzle { + x: false, + y: true, + z: false + } + ); + assert_eq!( + swizzle_c, + Swizzle { + x: false, + y: false, + z: true + } + ); + assert_eq!( + swizzle_d, + Swizzle { + x: false, + y: true, + z: true + } + ); + assert_eq!( + swizzle_e, + Swizzle { + x: true, + y: true, + z: true + } + ); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/time.rs b/vendor/valence/crates/valence_command/src/parsers/time.rs new file mode 100644 index 00000000..d1eff8cc --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/time.rs @@ -0,0 +1,83 @@ +use super::Parser; +use crate::parsers::{CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum Time { + Ticks(f32), + Seconds(f32), + Days(f32), +} + +impl CommandArg for Time { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let mut number_str = String::new(); + while let Some(c) = input.pop() { + match c { + 't' => { + return Ok(Time::Ticks(number_str.parse::().map_err(|_| { + CommandArgParseError::InvalidArgument { + expected: "time".to_string(), + got: "not a valid time".to_string(), + } + })?)); + } + 's' => { + return Ok(Time::Seconds(number_str.parse::().map_err(|_| { + CommandArgParseError::InvalidArgument { + expected: "time".to_string(), + got: "not a valid time".to_string(), + } + })?)); + } + 'd' => { + return Ok(Time::Days(number_str.parse::().map_err(|_| { + CommandArgParseError::InvalidArgument { + expected: "time".to_string(), + got: "not a valid time".to_string(), + } + })?)); + } + _ => { + number_str.push(c); + } + } + } + if !number_str.is_empty() { + return Ok(Time::Ticks(number_str.parse::().map_err(|_| { + CommandArgParseError::InvalidArgument { + expected: "time".to_string(), + got: "not a valid time".to_string(), + } + })?)); + } + + Err(CommandArgParseError::InvalidArgument { + expected: "time".to_string(), + got: "not a valid time".to_string(), + }) + } + + fn display() -> Parser { + Parser::Time + } +} + +#[test] +fn test_time() { + let mut input = ParseInput::new("42.31t"); + let time = Time::parse_arg(&mut input).unwrap(); + assert_eq!(time, Time::Ticks(42.31)); + + let mut input = ParseInput::new("42.31"); + let time = Time::parse_arg(&mut input).unwrap(); + assert_eq!(time, Time::Ticks(42.31)); + + let mut input = ParseInput::new("1239.72s"); + let time = Time::parse_arg(&mut input).unwrap(); + assert_eq!(time, Time::Seconds(1239.72)); + + let mut input = ParseInput::new("133.1d"); + let time = Time::parse_arg(&mut input).unwrap(); + assert_eq!(time, Time::Days(133.1)); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/vec2.rs b/vendor/valence/crates/valence_command/src/parsers/vec2.rs new file mode 100644 index 00000000..02235a8c --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/vec2.rs @@ -0,0 +1,56 @@ +use super::Parser; +use crate::parsers::{AbsoluteOrRelative, CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Default)] +pub struct Vec2 { + pub x: AbsoluteOrRelative, + pub y: AbsoluteOrRelative, +} + +impl CommandArg for Vec2 { + fn parse_arg(input: &mut ParseInput) -> Result { + input.skip_whitespace(); + let x = AbsoluteOrRelative::::parse_arg(input)?; + input.skip_whitespace(); + let y = AbsoluteOrRelative::::parse_arg(input)?; + + Ok(Vec2 { x, y }) + } + + fn display() -> Parser { + Parser::Vec2 + } +} + +#[test] +fn test_vec2() { + let mut input = ParseInput::new("~-1.5 2.5"); + assert_eq!( + Vec2::parse_arg(&mut input).unwrap(), + Vec2 { + x: AbsoluteOrRelative::Relative(-1.5), + y: AbsoluteOrRelative::Absolute(2.5), + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("-1.5 ~2.5 "); + assert_eq!( + Vec2::parse_arg(&mut input).unwrap(), + Vec2 { + x: AbsoluteOrRelative::Absolute(-1.5), + y: AbsoluteOrRelative::Relative(2.5), + } + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("-1.5 2.5 3.5"); + assert_eq!( + Vec2::parse_arg(&mut input).unwrap(), + Vec2 { + x: AbsoluteOrRelative::Absolute(-1.5), + y: AbsoluteOrRelative::Absolute(2.5), + } + ); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/parsers/vec3.rs b/vendor/valence/crates/valence_command/src/parsers/vec3.rs new file mode 100644 index 00000000..f5befdbe --- /dev/null +++ b/vendor/valence/crates/valence_command/src/parsers/vec3.rs @@ -0,0 +1,59 @@ +use super::Parser; +use crate::parsers::{AbsoluteOrRelative, CommandArg, CommandArgParseError, ParseInput}; + +#[derive(Debug, Clone, Copy, PartialEq, Default)] +pub struct Vec3 { + pub x: AbsoluteOrRelative, + pub y: AbsoluteOrRelative, + pub z: AbsoluteOrRelative, +} + +impl CommandArg for Vec3 { + fn parse_arg(input: &mut ParseInput) -> Result { + let x = AbsoluteOrRelative::::parse_arg(input)?; + let y = AbsoluteOrRelative::::parse_arg(input)?; + let z = AbsoluteOrRelative::::parse_arg(input)?; + + Ok(Vec3 { x, y, z }) + } + + fn display() -> Parser { + Parser::Vec3 + } +} + +#[test] +fn test_vec3() { + let mut input = ParseInput::new("~-1.5 2.5 3.5"); + assert_eq!( + Vec3::parse_arg(&mut input).unwrap(), + Vec3 { + x: AbsoluteOrRelative::Relative(-1.5), + y: AbsoluteOrRelative::Absolute(2.5), + z: AbsoluteOrRelative::Absolute(3.5) + } + ); + assert!(input.is_done()); + + let mut input = ParseInput::new("-1.5 ~2.5 3.5 "); + assert_eq!( + Vec3::parse_arg(&mut input).unwrap(), + Vec3 { + x: AbsoluteOrRelative::Absolute(-1.5), + y: AbsoluteOrRelative::Relative(2.5), + z: AbsoluteOrRelative::Absolute(3.5) + } + ); + assert!(!input.is_done()); + + let mut input = ParseInput::new("-1.5 2.5 ~3.5 4.5"); + assert_eq!( + Vec3::parse_arg(&mut input).unwrap(), + Vec3 { + x: AbsoluteOrRelative::Absolute(-1.5), + y: AbsoluteOrRelative::Absolute(2.5), + z: AbsoluteOrRelative::Relative(3.5) + } + ); + assert!(!input.is_done()); +} diff --git a/vendor/valence/crates/valence_command/src/scopes.rs b/vendor/valence/crates/valence_command/src/scopes.rs new file mode 100644 index 00000000..ddfcca5c --- /dev/null +++ b/vendor/valence/crates/valence_command/src/scopes.rs @@ -0,0 +1,298 @@ +//! Scope graph for the Valence Command system. +//! +//! ## Breakdown +//! Each scope is a node in a graph. A path from one node to another indicates +//! that the first scope implies the second. A dot in the scope name indicates +//! a sub-scope. You can use this to create a hierarchy of scopes. For example, +//! the scope "valence.command" implies "valence.command.tp". this means that if +//! a player has the "valence.command" scope, they can use the "tp" command. +//! +//! You may also link scopes together in the registry. This is useful for admin +//! scope umbrellas. For example, if the scope "valence.admin" is linked to +//! "valence.command", It means that if a player has the "valence.admin" scope, +//! they can use all commands under the command scope. +//! +//! # Example +//! ``` +//! use valence_command::scopes::CommandScopeRegistry; +//! +//! let mut registry = CommandScopeRegistry::new(); +//! +//! // add a scope to the registry +//! registry.add_scope("valence.command.teleport"); +//! +//! // we added 4 scopes to the registry. "valence", "valence.command", "valence.command.teleport", +//! // and the root scope. +//! assert_eq!(registry.scope_count(), 4); +//! +//! registry.add_scope("valence.admin"); +//! +//! // add a scope to the registry with a link to another scope +//! registry.link("valence.admin", "valence.command.teleport"); +//! +//! // the "valence.admin" scope implies the "valence.command.teleport" scope +//! assert_eq!( +//! registry.grants("valence.admin", "valence.command.teleport"), +//! true +//! ); +//! ``` + +use std::collections::{BTreeSet, HashMap}; +use std::fmt::{Debug, Formatter}; + +use bevy_app::{App, Plugin, Update}; +use bevy_derive::{Deref, DerefMut}; +use bevy_ecs::prelude::{Component, ResMut}; +use bevy_ecs::query::Changed; +use bevy_ecs::system::{Query, Resource}; +use petgraph::dot; +use petgraph::dot::Dot; +use petgraph::prelude::*; + +pub struct CommandScopePlugin; + +impl Plugin for CommandScopePlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_systems(Update, add_new_scopes); + } +} + +/// Command scope Component for players. This is a list of scopes that a player +/// has. If a player has a scope, they can use any command that requires +/// that scope. +#[derive( + Debug, Clone, PartialEq, Eq, Hash, Ord, PartialOrd, Component, Default, Deref, DerefMut, +)] +pub struct CommandScopes(pub BTreeSet); + +/// This system makes it a bit easier to add new scopes to the registry without +/// having to explicitly add them to the registry on app startup. +fn add_new_scopes( + mut registry: ResMut, + scopes: Query<&CommandScopes, Changed>, +) { + for scopes in scopes.iter() { + for scope in scopes.iter() { + if !registry.string_to_node.contains_key(scope) { + registry.add_scope(scope); + } + } + } +} + +impl CommandScopes { + /// create a new scope component + pub fn new() -> Self { + Self::default() + } + + /// add a scope to this component + pub fn add(&mut self, scope: &str) { + self.0.insert(scope.into()); + } +} + +/// Store the scope graph and provide methods for querying it. +#[derive(Clone, Resource)] +pub struct CommandScopeRegistry { + graph: Graph, + string_to_node: HashMap, + root: NodeIndex, +} + +impl Default for CommandScopeRegistry { + fn default() -> Self { + let mut graph = Graph::new(); + let root = graph.add_node("root".to_string()); + Self { + graph, + string_to_node: HashMap::from([("root".to_string(), root)]), + root, + } + } +} + +impl Debug for CommandScopeRegistry { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{:?}", + Dot::with_config(&self.graph, &[dot::Config::EdgeNoLabel]) + )?; + Ok(()) + } +} + +impl CommandScopeRegistry { + /// Create a new scope registry. + pub fn new() -> Self { + Self::default() + } + + /// Add a scope to the registry. + /// + /// # Example + /// ``` + /// use valence_command::CommandScopeRegistry; + /// + /// let mut registry = CommandScopeRegistry::new(); + /// + /// // creates two nodes. "valence" and "command" with an edge from "valence" to "command" + /// registry.add_scope("valence.command"); + /// // creates one node. "valence.command.tp" with an edge from "valence.command" to + /// // "valence.command.tp" + /// registry.add_scope("valence.command.tp"); + /// + /// // the root node is always present + /// assert_eq!(registry.scope_count(), 4); + /// ``` + pub fn add_scope(&mut self, scope: impl Into) { + let scope = scope.into(); + if self.string_to_node.contains_key(&scope) { + return; + } + let mut current_node = self.root; + let mut prefix = String::new(); + for part in scope.split('.') { + let node = self + .string_to_node + .entry(prefix.clone() + part) + .or_insert_with(|| { + let node = self.graph.add_node(part.to_string()); + self.graph.add_edge(current_node, node, ()); + node + }); + current_node = *node; + + prefix = prefix + part + "."; + } + } + + /// Remove a scope from the registry. + /// + /// # Example + /// ``` + /// use valence_command::CommandScopeRegistry; + /// + /// let mut registry = CommandScopeRegistry::new(); + /// + /// registry.add_scope("valence.command"); + /// registry.add_scope("valence.command.tp"); + /// + /// assert_eq!(registry.scope_count(), 4); + /// + /// registry.remove_scope("valence.command.tp"); + /// + /// assert_eq!(registry.scope_count(), 3); + /// ``` + pub fn remove_scope(&mut self, scope: &str) { + if let Some(node) = self.string_to_node.remove(scope) { + self.graph.remove_node(node); + }; + } + + /// Check if a scope grants another scope. + /// + /// # Example + /// ``` + /// use valence_command::CommandScopeRegistry; + /// + /// let mut registry = CommandScopeRegistry::new(); + /// + /// registry.add_scope("valence.command"); + /// registry.add_scope("valence.command.tp"); + /// + /// assert!(registry.grants("valence.command", "valence.command.tp")); // command implies tp + /// assert!(!registry.grants("valence.command.tp", "valence.command")); // tp does not imply command + /// ``` + pub fn grants(&self, scope: &str, other: &str) -> bool { + if scope == other { + return true; + } + + let scope_idx = match self.string_to_node.get(scope) { + None => { + return false; + } + Some(idx) => *idx, + }; + let other_idx = match self.string_to_node.get(other) { + None => { + return false; + } + Some(idx) => *idx, + }; + + if scope_idx == self.root { + return true; + } + + // if we can reach the other scope from the scope, then the scope + // grants the other scope + let mut dfs = Dfs::new(&self.graph, scope_idx); + while let Some(node) = dfs.next(&self.graph) { + if node == other_idx { + return true; + } + } + false + } + + /// do any of the scopes in the list grant the other scope? + /// + /// # Example + /// ``` + /// use valence_command::CommandScopeRegistry; + /// + /// let mut registry = CommandScopeRegistry::new(); + /// + /// registry.add_scope("valence.command"); + /// registry.add_scope("valence.command.tp"); + /// registry.add_scope("valence.admin"); + /// + /// assert!(registry.any_grants( + /// &vec!["valence.admin", "valence.command"], + /// "valence.command.tp" + /// )); + /// ``` + pub fn any_grants(&self, scopes: &Vec<&str>, other: &str) -> bool { + for scope in scopes { + if self.grants(scope, other) { + return true; + } + } + false + } + + /// Create a link between two scopes so that one implies the other. It will + /// add them if they don't exist. + /// + /// # Example + /// ``` + /// use valence_command::CommandScopeRegistry; + /// + /// let mut registry = CommandScopeRegistry::new(); + /// + /// registry.add_scope("valence.command.tp"); + /// + /// registry.link("valence.admin", "valence.command"); + /// + /// assert!(registry.grants("valence.admin", "valence.command")); + /// assert!(registry.grants("valence.admin", "valence.command.tp")); + /// ``` + pub fn link(&mut self, scope: &str, other: &str) { + self.add_scope(scope); + self.add_scope(other); + + let scope_idx = self.string_to_node.get(scope).unwrap(); + let other_idx = self.string_to_node.get(other).unwrap(); + + self.graph.add_edge(*scope_idx, *other_idx, ()); + } + + /// Get the number of scopes in the registry. + pub fn scope_count(&self) -> usize { + self.graph.node_count() + } +} diff --git a/vendor/valence/crates/valence_command_macros/Cargo.toml b/vendor/valence/crates/valence_command_macros/Cargo.toml new file mode 100644 index 00000000..60657a4f --- /dev/null +++ b/vendor/valence/crates/valence_command_macros/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "valence_command_macros" +description = "Simplify the creation of Valence commands with a derive macro." +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[lib] +proc-macro = true + +[dependencies] +syn = { version = "2.0", features = ["full"] } +quote = "1.0" +proc-macro2 = "1.0" + diff --git a/vendor/valence/crates/valence_command_macros/README.md b/vendor/valence/crates/valence_command_macros/README.md new file mode 100644 index 00000000..26391900 --- /dev/null +++ b/vendor/valence/crates/valence_command_macros/README.md @@ -0,0 +1,143 @@ +Simplify the creation of Valence commands with a derive macro. + +## Usage + +```rust +#[derive(Command, Debug, Clone)] +#[paths("teleport", "tp")] +#[scopes("valence.command.teleport")] +enum TeleportCommand { + #[paths = "{location}"] + ExecutorToLocation { location: Vec3Parser }, + #[paths = "{target}"] + ExecutorToTarget { target: EntitySelector }, + #[paths = "{from} {to}"] + TargetToTarget { + from: EntitySelector, + to: EntitySelector, + }, + #[paths = "{target} {location}"] + TargetToLocation { + target: EntitySelector, + location: Vec3Parser, + }, +} + +#[derive(Command, Debug, Clone)] +#[paths("gamemode", "gm")] +#[scopes("valence.command.gamemode")] +enum GamemodeCommand { + #[paths("survival", "{/} gms")] + Survival, + #[paths("creative", "{/} gmc")] + Creative, + #[paths("adventure", "{/} gma")] + Adventure, + #[paths("spectator", "{/} gmsp")] + Spectator, +} + +#[derive(Command, Debug, Clone)] +#[paths("test", "t")] +#[scopes("valence.command.test")] +#[allow(dead_code)] +enum TestCommand { + // 3 literals with an arg each + #[paths("a {a} b {b} c {c}", "{a} {b} {c}")] + A { a: String, b: i32, c: f32 }, + // 2 literals with an arg last being optional (Because of the greedy string before the end + // this is technically unreachable) + #[paths = "a {a} {b} b {c?}"] + B { + a: Vec3Parser, + b: GreedyString, + c: Option, + }, + // greedy string optional arg + #[paths = "a {a} b {b?}"] + C { a: String, b: Option }, + // greedy string required arg + #[paths = "a {a} b {b}"] + D { a: String, b: GreedyString }, + // five optional args and an ending greedyString + #[paths("options {a?} {b?} {c?} {d?} {e?}", "options {b?} {a?} {d?} {c?} {e?}")] + E { + a: Option, + b: Option, + c: Option, + d: Option, + e: Option, + }, +} +``` + +## Attributes + +### `#[paths(...)]` or `#[paths = "..."]` + +The `#[paths(...)]` or `#[paths = "..."]` attribute is used to specify the different paths that can be used to invoke +the command. The paths are specified as string literals, where any arguments are enclosed in curly braces `{}`. +The arguments are then mapped to fields in the command enum variant. + +For example, in the `Teleport` enum, the `ExecutorToLocation` variant has a path of `{location}`, which means it expects +a single argument called `location` of type `Vec3Parser`. The `ExecutorToTarget` variant has a path of `{target}`, which +expects a single argument called `target` of type `EntitySelector`. + +The paths attribute can have multiple values separated by commas, representing alternative paths that can be used to +invoke the command. These alternative paths can have different argument orders, but they must have the same arguments. + +Their are two special paths that can be used. The first is `{/}`, which represents the root command, this can only be +used at the start of the command to specify it as a direct child of the root node. The second is `{?}`, which +represents an optional argument. The optional argument must only be followed by other optional arguments or the end of +the path. + +### `#[scopes(...)]` or `#[scopes = "..."]` + +The `#[scopes(...)]` or `#[scopes = "..."]` attribute is used to specify the scopes that the command belongs to. Scopes +are used to specify who can use the command. The scopes are specified as string literals, where each scope is separated +by a colon. + +For example, in the `Teleport` enum, the variants are assigned the scope `valence:command:teleport`, which means they +can be used by anyone with the `valence:command:teleport`, `valence:command` or `valence` scope. + +The scopes attribute can have multiple values separated by commas, representing the different scopes that the command +belongs to. + +## How do command graphs work anyway? + +This is the core of the command system. It is a graph of `CommandNode`s that are connected by the `CommandEdgeType`. The +graph is used to determine what command to run when a command is entered. The graph is also used to generate the command +tree that is sent to the client. You can think of it as a tree where each leaf is part of a command, and the path to the +leaf is the command. See the documentation for `command.rs` in `valence_command` for more information. + + +### Our teleport command from the example (made with graphviz) +```text + ┌────────────────────────────────┐ + │ Root │ ─┐ + └────────────────────────────────┘ │ + │ │ + │ Child │ + ▼ │ + ┌────────────────────────────────┐ │ + │ Literal: tp │ │ + └────────────────────────────────┘ │ + │ │ + │ Redirect │ Child + ▼ ▼ +┌──────────────────────────────────┐ Child ┌──────────────────────────────────────────────────────────────────────────────┐ +│ Argument: │ ◀─────── │ Literal: teleport │ +└──────────────────────────────────┘ └──────────────────────────────────────────────────────────────────────────────┘ + │ │ + │ Child │ Child + ▼ ▼ +┌──────────────────────────────────┐ Child ┌────────────────────────────────┐ ┌──────────────────────────────────┐ +│ Argument: │ ◀─────── │ Argument: │ │ Argument: │ +└──────────────────────────────────┘ └────────────────────────────────┘ └──────────────────────────────────┘ + │ + │ Child + ▼ + ┌────────────────────────────────┐ + │ Argument: │ + └────────────────────────────────┘ +``` \ No newline at end of file diff --git a/vendor/valence/crates/valence_command_macros/src/lib.rs b/vendor/valence/crates/valence_command_macros/src/lib.rs new file mode 100644 index 00000000..17abad06 --- /dev/null +++ b/vendor/valence/crates/valence_command_macros/src/lib.rs @@ -0,0 +1,706 @@ +use proc_macro::TokenStream; +use proc_macro2::{Ident, TokenTree}; +use quote::{format_ident, quote}; +use syn::{parse_macro_input, Attribute, Data, DeriveInput, Error, Expr, Fields, Meta, Result}; + +#[proc_macro_derive(Command, attributes(command, scopes, paths))] +pub fn derive_command(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as DeriveInput); + match command(input) { + Ok(expansion) => expansion, + Err(err) => err.to_compile_error().into(), + } +} + +fn command(input: DeriveInput) -> Result { + let input_name = input.ident; + + let outer_scopes = input + .attrs + .iter() + .filter_map(|attr| get_lit_list_attr(attr, "scopes")) + .next() + .unwrap_or(Vec::new()); + + match input.data { + Data::Enum(ref data_enum) => { + let mut alias_paths = match input.attrs.iter().filter_map(parse_path).next() { + // there should only be one base command name set + Some(paths) => paths, + None => { + return Err(Error::new_spanned( + input_name, + "No paths attribute found for command enum", + )) + } + }; + + let base_path = alias_paths.remove(0); + + let fields = &data_enum.variants; + let mut paths = Vec::new(); + + for variant in fields { + for attr in variant.attrs.iter() { + if let Some(attr_paths) = parse_path(attr) { + paths.push((attr_paths, variant.fields.clone(), variant.ident.clone())); + } + } + } + + let mut expanded_nodes = Vec::new(); + + for (paths, fields, variant_ident) in paths { + expanded_nodes.push({ + let processed = process_paths_enum( + &input_name, + paths, + &fields, + variant_ident.clone(), + true, + ); + quote! { #processed; } + }); + } + + let base_command_expansion = { + let processed = process_paths_enum( + &input_name, + vec![base_path], + &Fields::Unit, + format_ident!("{}Root", input_name), // this is more of placeholder + // (should never be used) + false, + ); // this will error if the base path has args + let mut expanded_main_command = quote! { + let command_root_node = #processed + }; + + if !outer_scopes.is_empty() { + expanded_main_command = quote! { + #expanded_main_command + .with_scopes(vec![#(#outer_scopes),*]) + } + } + + quote! { + #expanded_main_command.id(); + } + }; + + let command_alias_expansion = { + let mut alias_expansion = quote! {}; + for path in alias_paths { + let processed = process_paths_enum( + &input_name, + vec![path], + &Fields::Unit, + format_ident!("{}Root", input_name), + false, + ); + + alias_expansion = quote! { + #alias_expansion + + #processed + .redirect_to(command_root_node) + }; + + if !outer_scopes.is_empty() { + alias_expansion = quote! { + #alias_expansion + .with_scopes(vec![#(#outer_scopes),*]) + } + } + + alias_expansion = quote! { + #alias_expansion; + } + } + + alias_expansion + }; + + let _new_struct = format_ident!("{}Command", input_name); + + Ok(TokenStream::from(quote! { + + impl valence::command::Command for #input_name { + fn assemble_graph(command_graph: &mut valence::command::graph::CommandGraphBuilder) { + use valence::command::parsers::CommandArg; + #base_command_expansion + + #command_alias_expansion + + #(#expanded_nodes)* + } + } + })) + } + Data::Struct(x) => { + let mut paths = Vec::new(); + + for attr in input.attrs.iter() { + if let Some(attr_paths) = parse_path(attr) { + paths.push(attr_paths); + } + } + + let mut expanded_nodes = Vec::new(); + + for path in paths { + expanded_nodes.push({ + let mut processed = + process_paths_struct(&input_name, path, &x.fields, outer_scopes.clone()); + // add scopes + + if !outer_scopes.is_empty() { + processed = quote! { + #processed + .with_scopes(vec![#(#outer_scopes),*]) + } + } + + quote! { #processed; } + }); + } + + Ok(TokenStream::from(quote! { + + impl valence::command::Command for #input_name { + fn assemble_graph(command_graph: &mut valence::command::graph::CommandGraphBuilder) { + use valence::command::parsers::CommandArg; + #(#expanded_nodes)* + } + } + })) + } + Data::Union(x) => Err(Error::new_spanned( + x.union_token, + "Command enum must be an enum, not a union", + )), + } +} + +fn process_paths_enum( + enum_name: &Ident, + paths: Vec<(Vec, bool)>, + fields: &Fields, + variant_ident: Ident, + executables: bool, +) -> proc_macro2::TokenStream { + let mut inner_expansion = quote! {}; + let mut first = true; + + for path in paths { + if !first { + inner_expansion = if executables && !path.1 { + quote! { + #inner_expansion; + + command_graph.at(command_root_node) + } + } else { + quote! { + #inner_expansion; + + command_graph.root() + } + }; + } else { + inner_expansion = if executables && !path.1 { + quote! { + command_graph.at(command_root_node) + } + } else { + quote! { + command_graph.root() + } + }; + + first = false; + } + + let path = path.0; + + let mut final_executable = Vec::new(); + for (i, arg) in path.iter().enumerate() { + match arg { + CommandArg::Literal(lit) => { + inner_expansion = quote! { + #inner_expansion.literal(#lit) + + }; + if executables && i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| #enum_name::#variant_ident{#(#final_executable,)*}) + }; + } + } + CommandArg::Required(ident) => { + let field_type = &fields + .iter() + .find(|field| field.ident.as_ref().unwrap() == ident) + .expect("Required arg not found") + .ty; + let ident_string = ident.to_string(); + + inner_expansion = quote! { + #inner_expansion + .argument(#ident_string) + .with_parser::<#field_type>() + }; + + final_executable.push(quote! { + #ident: #field_type::parse_arg(s).unwrap() + }); + + if i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| { + #enum_name::#variant_ident { + #(#final_executable,)* + } + }) + }; + } + } + CommandArg::Optional(ident) => { + let field_type = &fields + .iter() + .find(|field| field.ident.as_ref().unwrap() == ident) + .expect("Optional arg not found") + .ty; + let so_far_ident = format_ident!("graph_til_{}", ident); + + // get what is inside the Option<...> + let option_inner = match field_type { + syn::Type::Path(ref type_path) => { + let path = &type_path.path; + if path.segments.len() != 1 { + return Error::new_spanned( + path, + "Option type must be a single path segment", + ) + .into_compile_error(); + } + let segment = &path.segments.first().unwrap(); + if segment.ident != "Option" { + return Error::new_spanned( + &segment.ident, + "Option type must be a option", + ) + .into_compile_error(); + } + match &segment.arguments { + syn::PathArguments::AngleBracketed(ref angle_bracketed) => { + if angle_bracketed.args.len() != 1 { + return Error::new_spanned( + angle_bracketed, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + match angle_bracketed.args.first().unwrap() { + syn::GenericArgument::Type(ref generic_type) => { + generic_type + } + _ => { + return Error::new_spanned( + angle_bracketed, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + } + } + _ => { + return Error::new_spanned( + segment, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + } + } + _ => { + return Error::new_spanned( + field_type, + "Option type must be a single path segment", + ) + .into_compile_error(); + } + }; + + let ident_string = ident.to_string(); + + // find the ident of all following optional args + let mut next_optional_args = Vec::new(); + for next_arg in path.iter().skip(i + 1) { + match next_arg { + CommandArg::Optional(ident) => next_optional_args.push(ident), + _ => { + return Error::new_spanned( + variant_ident, + "Only optional args can follow an optional arg", + ) + .into_compile_error(); + } + } + } + + inner_expansion = quote! { + let #so_far_ident = {#inner_expansion + .with_executable(|s| { + #enum_name::#variant_ident { + #(#final_executable,)* + #ident: None, + #(#next_optional_args: None,)* + } + }) + .id()}; + + command_graph.at(#so_far_ident) + .argument(#ident_string) + .with_parser::<#option_inner>() + }; + + final_executable.push(quote! { + #ident: Some(#option_inner::parse_arg(s).unwrap()) + }); + + if i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| { + #enum_name::#variant_ident { + #(#final_executable,)* + } + }) + }; + } + } + } + } + } + quote!(#inner_expansion) +} + +fn process_paths_struct( + struct_name: &Ident, + paths: Vec<(Vec, bool)>, + fields: &Fields, + outer_scopes: Vec, +) -> proc_macro2::TokenStream { + let mut inner_expansion = quote! {}; + let mut first = true; + + for path in paths { + if !first { + inner_expansion = quote! { + #inner_expansion; + + command_graph.root() + }; + } else { + inner_expansion = quote! { + command_graph.root() + }; + + first = false; + } + + let path = path.0; + + let mut final_executable = Vec::new(); + let mut path_first = true; + for (i, arg) in path.iter().enumerate() { + match arg { + CommandArg::Literal(lit) => { + inner_expansion = quote! { + #inner_expansion.literal(#lit) + + }; + if i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| #struct_name{#(#final_executable,)*}) + }; + } + + if path_first { + inner_expansion = quote! { + #inner_expansion + .with_scopes(vec![#(#outer_scopes),*]) + }; + path_first = false; + } + } + CommandArg::Required(ident) => { + let field_type = &fields + .iter() + .find(|field| field.ident.as_ref().unwrap() == ident) + .expect("Required arg not found") + .ty; + let ident_string = ident.to_string(); + + inner_expansion = quote! { + #inner_expansion + .argument(#ident_string) + .with_parser::<#field_type>() + }; + + final_executable.push(quote! { + #ident: #field_type::parse_arg(s).unwrap() + }); + + if i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| { + #struct_name { + #(#final_executable,)* + } + }) + }; + } + + if path_first { + inner_expansion = quote! { + #inner_expansion + .with_scopes(vec![#(#outer_scopes),*]) + }; + path_first = false; + } + } + CommandArg::Optional(ident) => { + let field_type = &fields + .iter() + .find(|field| field.ident.as_ref().unwrap() == ident) + .expect("Optional arg not found") + .ty; + let so_far_ident = format_ident!("graph_til_{}", ident); + + // get what is inside the Option<...> + let option_inner = match field_type { + syn::Type::Path(ref type_path) => { + let path = &type_path.path; + if path.segments.len() != 1 { + return Error::new_spanned( + path, + "Option type must be a single path segment", + ) + .into_compile_error(); + } + let segment = &path.segments.first().unwrap(); + if segment.ident != "Option" { + return Error::new_spanned( + &segment.ident, + "Option type must be a option", + ) + .into_compile_error(); + } + match &segment.arguments { + syn::PathArguments::AngleBracketed(ref angle_bracketed) => { + if angle_bracketed.args.len() != 1 { + return Error::new_spanned( + angle_bracketed, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + match angle_bracketed.args.first().unwrap() { + syn::GenericArgument::Type(ref generic_type) => { + generic_type + } + _ => { + return Error::new_spanned( + angle_bracketed, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + } + } + _ => { + return Error::new_spanned( + segment, + "Option type must have a single generic argument", + ) + .into_compile_error(); + } + } + } + _ => { + return Error::new_spanned( + field_type, + "Option type must be a single path segment", + ) + .into_compile_error(); + } + }; + + let ident_string = ident.to_string(); + + // find the ident of all following optional args + let mut next_optional_args = Vec::new(); + for next_arg in path.iter().skip(i + 1) { + match next_arg { + CommandArg::Optional(ident) => next_optional_args.push(ident), + _ => { + return Error::new_spanned( + struct_name, + "Only optional args can follow an optional arg", + ) + .into_compile_error(); + } + } + } + + inner_expansion = quote! { + let #so_far_ident = {#inner_expansion + .with_executable(|s| { + #struct_name { + #(#final_executable,)* + #ident: None, + #(#next_optional_args: None,)* + } + }) + .id()}; + + command_graph.at(#so_far_ident) + .argument(#ident_string) + .with_parser::<#option_inner>() + }; + + final_executable.push(quote! { + #ident: Some(#option_inner::parse_arg(s).unwrap()) + }); + + if i == path.len() - 1 { + inner_expansion = quote! { + #inner_expansion + .with_executable(|s| { + #struct_name { + #(#final_executable,)* + } + }) + }; + } + + if path_first { + inner_expansion = quote! { + #inner_expansion + .with_scopes(vec![#(#outer_scopes),*]) + }; + path_first = false; + } + } + } + } + } + quote!(#inner_expansion) +} + +#[derive(Debug)] +enum CommandArg { + Required(Ident), + Optional(Ident), + Literal(String), +} + +// example input: #[paths = "strawberry {0?}"] +// example output: [CommandArg::Literal("Strawberry"), CommandArg::Optional(0)] +fn parse_path(path: &Attribute) -> Option, bool)>> { + let path_strings: Vec = get_lit_list_attr(path, "paths")?; + + let mut paths = Vec::new(); + // we now have the path as a string eg "strawberry {0?}" + // the first word is a literal + // the next word is an optional arg with the index 0 + for path_str in path_strings { + let mut args = Vec::new(); + let at_root = path_str.starts_with("{/}"); + + for word in path_str + .split_whitespace() + .skip(if at_root { 1 } else { 0 }) + { + if word.starts_with('{') && word.ends_with('}') { + if word.ends_with("?}") { + args.push(CommandArg::Optional(format_ident!( + "{}", + word[1..word.len() - 2].to_string() + ))); + } else { + args.push(CommandArg::Required(format_ident!( + "{}", + word[1..word.len() - 1].to_string() + ))); + } + } else { + args.push(CommandArg::Literal(word.to_string())); + } + } + paths.push((args, at_root)); + } + + Some(paths) +} + +fn get_lit_list_attr(attr: &Attribute, ident: &str) -> Option> { + match attr.meta { + Meta::NameValue(ref key_value) => { + if !key_value.path.is_ident(ident) { + return None; + } + + match key_value.value { + Expr::Lit(ref lit) => match lit.lit { + syn::Lit::Str(ref lit_str) => Some(vec![lit_str.value()]), + _ => None, + }, + _ => None, + } + } + Meta::List(ref list) => { + if !list.path.is_ident(ident) { + return None; + } + + let mut path_strings = Vec::new(); + // parse as array with strings + let mut comma_next = false; + for token in list.tokens.clone() { + match token { + TokenTree::Literal(lit) => { + if comma_next { + return None; + } + let lit_str = lit.to_string(); + path_strings.push( + lit_str + .strip_prefix('"') + .unwrap() + .strip_suffix('"') + .unwrap() + .to_string(), + ); + comma_next = true; + } + TokenTree::Punct(punct) => { + if punct.as_char() != ',' || !comma_next { + return None; + } + comma_next = false; + } + _ => return None, + } + } + Some(path_strings) + } + _ => None, + } +} diff --git a/vendor/valence/crates/valence_entity/Cargo.toml b/vendor/valence/crates/valence_entity/Cargo.toml new file mode 100644 index 00000000..7e01c41d --- /dev/null +++ b/vendor/valence/crates/valence_entity/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "valence_entity" +description = "Minecraft entities for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +bitfield-struct.workspace = true +derive_more.workspace = true +valence_math.workspace = true +paste.workspace = true +rustc-hash.workspace = true +tracing.workspace = true +uuid.workspace = true +valence_server_common.workspace = true +valence_nbt.workspace = true +valence_generated.workspace = true +valence_protocol.workspace = true +indexmap.workspace = true + +[build-dependencies] +anyhow.workspace = true +proc-macro2.workspace = true +quote.workspace = true +syn.workspace = true +serde_json.workspace = true +heck.workspace = true +serde.workspace = true +valence_build_utils.workspace = true diff --git a/vendor/valence/crates/valence_entity/README.md b/vendor/valence/crates/valence_entity/README.md new file mode 100644 index 00000000..18a76d10 --- /dev/null +++ b/vendor/valence/crates/valence_entity/README.md @@ -0,0 +1,5 @@ +# valence_entity + +Components and systems concerning Minecraft entities. This includes "zombie", "chicken", "player", etc. + +Bundles of components are used to spawn entities. Each entity type gets its own module here. diff --git a/vendor/valence/crates/valence_entity/build.rs b/vendor/valence/crates/valence_entity/build.rs new file mode 100644 index 00000000..bdfdbbb1 --- /dev/null +++ b/vendor/valence/crates/valence_entity/build.rs @@ -0,0 +1,786 @@ +use std::collections::BTreeMap; + +use anyhow::Context; +use heck::{ToPascalCase, ToShoutySnakeCase, ToSnakeCase}; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed, write_generated_file}; + +#[derive(Deserialize, Clone, Debug)] +struct Entity { + #[serde(rename = "type")] + typ: Option, + translation_key: Option, + fields: Vec, + attributes: Option>, + parent: Option, +} + +#[derive(Deserialize, Clone, Debug)] +struct EntityTypes { + entity_type: BTreeMap, +} + +#[derive(Deserialize, Clone, Debug)] +struct Field { + name: String, + index: u8, + #[serde(flatten)] + default_value: Value, +} + +#[derive(Deserialize, Clone, Debug)] +struct Attribute { + name: String, + base_value: f64, +} + +#[derive(Deserialize, Clone, Debug)] +#[serde(tag = "type", content = "default_value", rename_all = "snake_case")] +#[allow(dead_code)] +enum Value { + Byte(i8), + Integer(i32), + Long(i64), + Float(f32), + String(String), + TextComponent(String), + OptionalTextComponent(Option), + ItemStack(String), + Boolean(bool), + Rotation { + pitch: f32, + yaw: f32, + roll: f32, + }, + BlockPos(BlockPos), + OptionalBlockPos(Option), + Facing(String), + OptionalUuid(Option), + BlockState(String), + OptionalBlockState(Option), + NbtCompound(String), + Particle(String), + VillagerData { + #[serde(rename = "type")] + typ: String, + profession: String, + level: i32, + }, + OptionalInt(Option), + EntityPose(String), + CatVariant(String), + FrogVariant(String), + OptionalGlobalPos(Option<()>), // TODO + PaintingVariant(String), + SnifferState(String), + Vector3f { + x: f32, + y: f32, + z: f32, + }, + Quaternionf { + x: f32, + y: f32, + z: f32, + w: f32, + }, +} + +#[derive(Deserialize, Debug, Clone, Copy)] +struct BlockPos { + x: i32, + y: i32, + z: i32, +} + +impl Value { + pub fn type_id(&self) -> u8 { + match self { + Value::Byte(_) => 0, + Value::Integer(_) => 1, + Value::Long(_) => 2, + Value::Float(_) => 3, + Value::String(_) => 4, + Value::TextComponent(_) => 5, + Value::OptionalTextComponent(_) => 6, + Value::ItemStack(_) => 7, + Value::Boolean(_) => 8, + Value::Rotation { .. } => 9, + Value::BlockPos(_) => 10, + Value::OptionalBlockPos(_) => 11, + Value::Facing(_) => 12, + Value::OptionalUuid(_) => 13, + Value::BlockState(_) => 14, + Value::OptionalBlockState(_) => 15, + Value::NbtCompound(_) => 16, + Value::Particle(_) => 17, + Value::VillagerData { .. } => 18, + Value::OptionalInt(_) => 19, + Value::EntityPose(_) => 20, + Value::CatVariant(_) => 21, + Value::FrogVariant(_) => 22, + Value::OptionalGlobalPos(_) => 23, + Value::PaintingVariant(_) => 24, + Value::SnifferState(_) => 25, + Value::Vector3f { .. } => 26, + Value::Quaternionf { .. } => 27, + } + } + + pub fn field_type(&self) -> TokenStream { + match self { + Value::Byte(_) => quote!(i8), + Value::Integer(_) => quote!(i32), + Value::Long(_) => quote!(i64), + Value::Float(_) => quote!(f32), + Value::String(_) => quote!(String), + Value::TextComponent(_) => quote!(valence_protocol::Text), + Value::OptionalTextComponent(_) => quote!(Option), + Value::ItemStack(_) => quote!(valence_protocol::ItemStack), + Value::Boolean(_) => quote!(bool), + Value::Rotation { .. } => quote!(crate::EulerAngle), + Value::BlockPos(_) => quote!(valence_protocol::BlockPos), + Value::OptionalBlockPos(_) => quote!(Option), + Value::Facing(_) => quote!(valence_protocol::Direction), + Value::OptionalUuid(_) => quote!(Option<::uuid::Uuid>), + Value::BlockState(_) => quote!(valence_protocol::BlockState), + Value::OptionalBlockState(_) => quote!(valence_protocol::BlockState), + Value::NbtCompound(_) => quote!(valence_nbt::Compound), + Value::Particle(_) => quote!(valence_protocol::packets::play::particle_s2c::Particle), + Value::VillagerData { .. } => quote!(crate::VillagerData), + Value::OptionalInt(_) => quote!(Option), + Value::EntityPose(_) => quote!(crate::Pose), + Value::CatVariant(_) => quote!(crate::CatKind), + Value::FrogVariant(_) => quote!(crate::FrogKind), + Value::OptionalGlobalPos(_) => quote!(()), // TODO + Value::PaintingVariant(_) => quote!(crate::PaintingKind), + Value::SnifferState(_) => quote!(crate::SnifferState), + Value::Vector3f { .. } => quote!(valence_math::Vec3), + Value::Quaternionf { .. } => quote!(valence_math::Quat), + } + } + + pub fn default_expr(&self) -> TokenStream { + match self { + Value::Byte(b) => quote!(#b), + Value::Integer(i) => quote!(#i), + Value::Long(l) => quote!(#l), + Value::Float(f) => quote!(#f), + Value::String(s) => quote!(#s.to_owned()), + Value::TextComponent(txt) => { + assert!(txt.is_empty()); + quote!(valence_protocol::Text::default()) + } + Value::OptionalTextComponent(t) => { + assert!(t.is_none()); + quote!(None) + } + Value::ItemStack(stack) => { + assert_eq!(stack, "0 air"); + quote!(valence_protocol::ItemStack::default()) + } + Value::Boolean(b) => quote!(#b), + Value::Rotation { pitch, yaw, roll } => quote! { + crate::EulerAngle { + pitch: #pitch, + yaw: #yaw, + roll: #roll, + } + }, + Value::BlockPos(BlockPos { x, y, z }) => { + quote!(valence_protocol::BlockPos { x: #x, y: #y, z: #z }) + } + Value::OptionalBlockPos(pos) => { + assert!(pos.is_none()); + quote!(None) + } + Value::Facing(f) => { + let variant = ident(f.to_pascal_case()); + quote!(valence_protocol::Direction::#variant) + } + Value::OptionalUuid(uuid) => { + assert!(uuid.is_none()); + quote!(None) + } + Value::BlockState(_) => { + quote!(valence_protocol::BlockState::default()) + } + Value::OptionalBlockState(bs) => { + assert!(bs.is_none()); + quote!(valence_protocol::BlockState::default()) + } + Value::NbtCompound(s) => { + assert_eq!(s, "{}"); + quote!(valence_nbt::Compound::default()) + } + Value::Particle(p) => { + let variant = ident(p.to_pascal_case()); + quote!(valence_protocol::packets::play::particle_s2c::Particle::#variant) + } + Value::VillagerData { + typ, + profession, + level, + } => { + let typ = ident(typ.to_pascal_case()); + let profession = ident(profession.to_pascal_case()); + quote! { + crate::VillagerData { + kind: crate::VillagerKind::#typ, + profession: crate::VillagerProfession::#profession, + level: #level, + } + } + } + Value::OptionalInt(i) => { + assert!(i.is_none()); + quote!(None) + } + Value::EntityPose(p) => { + let variant = ident(p.to_pascal_case()); + quote!(crate::Pose::#variant) + } + Value::CatVariant(c) => { + let variant = ident(c.to_pascal_case()); + quote!(crate::CatKind::#variant) + } + Value::FrogVariant(f) => { + let variant = ident(f.to_pascal_case()); + quote!(crate::FrogKind::#variant) + } + Value::OptionalGlobalPos(_) => quote!(()), + Value::PaintingVariant(p) => { + let variant = ident(p.to_pascal_case()); + quote!(crate::PaintingKind::#variant) + } + Value::SnifferState(s) => { + let state = ident(s.to_pascal_case()); + quote!(crate::SnifferState::#state) + } + Value::Vector3f { x, y, z } => quote!(valence_math::Vec3::new(#x, #y, #z)), + Value::Quaternionf { x, y, z, w } => quote! { + valence_math::Quat::from_xyzw(#x, #y, #z, #w) + }, + } + } + + pub fn encodable_expr(&self, self_lvalue: TokenStream) -> TokenStream { + match self { + Value::Integer(_) => quote!(VarInt(#self_lvalue)), + Value::OptionalInt(_) => quote!(OptionalInt(#self_lvalue)), + _ => quote!(&#self_lvalue), + } + } +} + +type Entities = BTreeMap; + +pub fn main() -> anyhow::Result<()> { + rerun_if_changed(["extracted/misc.json", "extracted/entities.json"]); + + write_generated_file(build_entities()?, "entity.rs")?; + + Ok(()) +} + +fn build_entities() -> anyhow::Result { + let entity_types = serde_json::from_str::(include_str!("extracted/misc.json")) + .context("failed to deserialize misc.json")? + .entity_type; + + let entities: Entities = + serde_json::from_str::(include_str!("extracted/entities.json")) + .context("failed to deserialize entities.json")? + .into_iter() + .collect(); + + let mut entity_kind_consts = TokenStream::new(); + let mut entity_kind_fmt_args = TokenStream::new(); + let mut translation_key_arms = TokenStream::new(); + let mut modules = TokenStream::new(); + let mut systems = TokenStream::new(); + let mut system_names = vec![]; + + for (entity_name, entity) in entities.clone() { + let entity_name_ident = ident(&entity_name); + let stripped_shouty_entity_name = strip_entity_suffix(&entity_name).to_shouty_snake_case(); + let stripped_shouty_entity_name_ident = ident(&stripped_shouty_entity_name); + let stripped_snake_entity_name = strip_entity_suffix(&entity_name).to_snake_case(); + let stripped_snake_entity_name_ident = ident(&stripped_snake_entity_name); + + let mut module_body = TokenStream::new(); + + if let Some(parent_name) = entity.parent { + let stripped_snake_parent_name = strip_entity_suffix(&parent_name).to_snake_case(); + + let module_doc = format!( + "Parent class: \ + [`{stripped_snake_parent_name}`][super::{stripped_snake_parent_name}]." + ); + + module_body.extend([quote! { + #![doc = #module_doc] + }]); + } + + // Is this a concrete entity type? + if let Some(entity_type) = entity.typ { + let entity_type_id = entity_types[&entity_type]; + + entity_kind_consts.extend([quote! { + pub const #stripped_shouty_entity_name_ident: EntityKind = EntityKind(#entity_type_id); + }]); + + entity_kind_fmt_args.extend([quote! { + EntityKind::#stripped_shouty_entity_name_ident => write!(f, "{} ({})", #entity_type_id, #stripped_shouty_entity_name), + }]); + + let translation_key_expr = if let Some(key) = entity.translation_key { + quote!(Some(#key)) + } else { + quote!(None) + }; + + translation_key_arms.extend([quote! { + EntityKind::#stripped_shouty_entity_name_ident => #translation_key_expr, + }]); + + // Create bundle type. + let mut bundle_fields = TokenStream::new(); + let mut bundle_init_fields = TokenStream::new(); + + for marker_or_field in collect_bundle_fields(&entity_name, &entities) { + match marker_or_field { + MarkerOrField::Marker { entity_name } => { + let stripped_entity_name = strip_entity_suffix(entity_name); + + let snake_entity_name_ident = ident(entity_name.to_snake_case()); + let stripped_snake_entity_name_ident = + ident(stripped_entity_name.to_snake_case()); + let pascal_entity_name_ident = ident(entity_name.to_pascal_case()); + + bundle_fields.extend([quote! { + pub #snake_entity_name_ident: super::#stripped_snake_entity_name_ident::#pascal_entity_name_ident, + }]); + + bundle_init_fields.extend([quote! { + #snake_entity_name_ident: Default::default(), + }]); + + match entity_name { + "LivingEntity" => { + bundle_fields.extend([quote! { + pub living_absorption: super::living::Absorption, + }]); + + bundle_init_fields.extend([quote! { + living_absorption: Default::default(), + }]); + + bundle_fields.extend([quote! { + pub living_attributes: super::attributes::EntityAttributes, + }]); + + // Get the default values of the attributes. + #[allow(clippy::excessive_nesting)] + let attribute_default_values = { + let mut values = TokenStream::new(); + if let Some(attributes) = &entity.attributes { + for attribute in attributes { + let name = ident(attribute.name.to_pascal_case()); + let base_value = attribute.base_value; + values.extend([quote! { + .with_attribute_and_value( + super::EntityAttribute::#name, + #base_value, + ) + }]); + } + } + values + }; + + bundle_init_fields.extend([quote! { + living_attributes: super::attributes::EntityAttributes::new() #attribute_default_values, + }]); + + bundle_fields.extend([quote! { + pub living_attributes_tracker: super::attributes::TrackedEntityAttributes, + }]); + bundle_init_fields.extend([quote! { + living_attributes_tracker: Default::default(), + }]); + + bundle_fields.extend([quote! { + pub living_active_status_effects: super::active_status_effects::ActiveStatusEffects, + }]); + bundle_init_fields.extend([quote! { + living_active_status_effects: Default::default(), + }]); + } + "PlayerEntity" => { + bundle_fields.extend([quote! { + pub player_food: super::player::Food, + pub player_saturation: super::player::Saturation, + }]); + + bundle_init_fields.extend([quote! { + player_food: Default::default(), + player_saturation: Default::default(), + }]); + } + _ => {} + } + } + MarkerOrField::Field { entity_name, field } => { + let snake_field_name = field.name.to_snake_case(); + let pascal_field_name = field.name.to_pascal_case(); + let pascal_field_name_ident = ident(&pascal_field_name); + let stripped_entity_name = strip_entity_suffix(entity_name); + let stripped_snake_entity_name = stripped_entity_name.to_snake_case(); + let stripped_snake_entity_name_ident = ident(&stripped_snake_entity_name); + + let field_name_ident = + ident(format!("{stripped_snake_entity_name}_{snake_field_name}")); + + bundle_fields.extend([quote! { + pub #field_name_ident: super::#stripped_snake_entity_name_ident::#pascal_field_name_ident, + }]); + + bundle_init_fields.extend([quote! { + #field_name_ident: Default::default(), + }]); + } + } + } + + bundle_fields.extend([quote! { + pub kind: super::EntityKind, + pub id: super::EntityId, + pub uuid: super::UniqueId, + pub layer: super::EntityLayerId, + pub old_layer: super::OldEntityLayerId, + pub position: super::Position, + pub old_position: super::OldPosition, + pub look: super::Look, + pub head_yaw: super::HeadYaw, + pub on_ground: super::OnGround, + pub velocity: super::Velocity, + pub statuses: super::EntityStatuses, + pub animations: super::EntityAnimations, + pub object_data: super::ObjectData, + pub tracked_data: super::tracked_data::TrackedData, + }]); + + bundle_init_fields.extend([quote! { + kind: super::EntityKind::#stripped_shouty_entity_name_ident, + id: Default::default(), + uuid: Default::default(), + layer: Default::default(), + old_layer: Default::default(), + position: Default::default(), + old_position: Default::default(), + look: Default::default(), + head_yaw: Default::default(), + on_ground: Default::default(), + velocity: Default::default(), + statuses: Default::default(), + animations: Default::default(), + object_data: Default::default(), + tracked_data: Default::default(), + }]); + + let bundle_name_ident = ident(format!("{entity_name}Bundle")); + let bundle_doc = format!( + "The bundle of components for spawning `{stripped_snake_entity_name}` entities." + ); + + module_body.extend([quote! { + #[doc = #bundle_doc] + #[derive(bevy_ecs::bundle::Bundle, Debug)] + pub struct #bundle_name_ident { + #bundle_fields + } + + impl Default for #bundle_name_ident { + fn default() -> Self { + Self { + #bundle_init_fields + } + } + } + }]); + } + + for field in &entity.fields { + let pascal_field_name_ident = ident(field.name.to_pascal_case()); + let snake_field_name = field.name.to_snake_case(); + let inner_type = field.default_value.field_type(); + let default_expr = field.default_value.default_expr(); + + module_body.extend([quote! { + #[derive(bevy_ecs::component::Component, PartialEq, Clone, Debug, ::derive_more::Deref, ::derive_more::DerefMut)] + pub struct #pascal_field_name_ident(pub #inner_type); + + #[allow(clippy::derivable_impls)] + impl Default for #pascal_field_name_ident { + fn default() -> Self { + Self(#default_expr) + } + } + }]); + + let system_name_ident = ident(format!( + "update_{stripped_snake_entity_name}_{snake_field_name}" + )); + let component_path = + quote!(#stripped_snake_entity_name_ident::#pascal_field_name_ident); + + system_names.push(quote!(#system_name_ident)); + + let data_index = field.index; + let data_type = field.default_value.type_id(); + let encodable_expr = field.default_value.encodable_expr(quote!(value.0)); + + systems.extend([quote! { + #[allow(clippy::needless_borrow)] + #[allow(clippy::suspicious_else_formatting)] + #[allow(clippy::needless_borrows_for_generic_args)] + fn #system_name_ident( + mut query: Query<(&#component_path, &mut tracked_data::TrackedData), Changed<#component_path>> + ) { + for (value, mut tracked_data) in &mut query { + if *value == Default::default() { + tracked_data.remove_init_value(#data_index); + } else { + tracked_data.insert_init_value(#data_index, #data_type, #encodable_expr); + } + + if !tracked_data.is_added() { + tracked_data.append_update_value(#data_index, #data_type, #encodable_expr); + } + } + } + }]); + } + + let marker_doc = format!("Marker component for `{stripped_snake_entity_name}` entities."); + + module_body.extend([quote! { + #[doc = #marker_doc] + #[derive(bevy_ecs::component::Component, Copy, Clone, Default, Debug)] + pub struct #entity_name_ident; + }]); + + match entity_name.as_str() { + "LivingEntity" => { + module_body.extend([quote! { + #[doc = "Special untracked component for `LivingEntity` entities."] + #[derive(bevy_ecs::component::Component, Copy, Clone, Default, Debug)] + pub struct Absorption(pub f32); + }]); + } + "PlayerEntity" => { + module_body.extend([quote! { + #[doc = "Special untracked component for `PlayerEntity` entities."] + #[derive(bevy_ecs::component::Component, Copy, Clone, Debug)] + pub struct Food(pub i32); + + impl Default for Food { + fn default() -> Self { + Self(20) + } + } + + #[doc = "Special untracked component for `PlayerEntity` entities."] + #[derive(bevy_ecs::component::Component, Copy, Clone, Default, Debug)] + pub struct Saturation(pub f32); + }]); + } + _ => {} + } + + modules.extend([quote! { + #[allow(clippy::module_inception)] + pub mod #stripped_snake_entity_name_ident { + #module_body + } + }]); + } + + systems.extend([quote! { + /// Special case for `living::Absorption`. + /// Updates the `AbsorptionAmount` component of the player entity. + fn update_living_and_player_absorption( + mut query: Query<(&living::Absorption, &mut player::AbsorptionAmount), Changed> + ) { + for (living_absorption, mut player_absorption) in query.iter_mut() { + player_absorption.0 = living_absorption.0; + } + } + + /// Special case for `living::Attributes`. + fn update_living_attributes( + mut query: Query<( + &mut attributes::TrackedEntityAttributes, + &mut attributes::EntityAttributes, + ), + Changed> + ) { + for (mut tracked, mut attributes) in query.iter_mut() { + for attribute in attributes.take_recently_changed() { + tracked.mark_modified(&attributes, attribute); + } + } + } + }]); + + system_names.push(quote!(update_living_and_player_absorption)); + system_names.push(quote!(update_living_attributes)); + + #[derive(Deserialize, Debug)] + struct MiscEntityData { + entity_status: BTreeMap, + entity_animation: BTreeMap, + } + + let misc_entity_data: MiscEntityData = + serde_json::from_str(include_str!("extracted/misc.json"))?; + + let entity_status_variants = misc_entity_data + .entity_status + .into_iter() + .map(|(name, code)| { + let name = ident(name.to_pascal_case()); + let code = code as isize; + + quote! { + #name = #code, + } + }); + + let entity_animation_variants = + misc_entity_data + .entity_animation + .into_iter() + .map(|(name, code)| { + let name = ident(name.to_pascal_case()); + let code = code as isize; + + quote! { + #name = #code, + } + }); + + Ok(quote! { + use valence_generated::attributes::EntityAttribute; + + #modules + + /// Identifies the type of an entity. + /// As a component, the entity kind should not be modified. + #[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, ::derive_more::Deref)] + pub struct EntityKind(i32); + + impl EntityKind { + #entity_kind_consts + + pub const fn new(inner: i32) -> Self { + Self(inner) + } + + pub const fn get(self) -> i32 { + self.0 + } + + pub const fn translation_key(self) -> Option<&'static str> { + match self { + #translation_key_arms + _ => None, + } + } + } + + impl std::fmt::Debug for EntityKind { + #[allow(clippy::write_literal)] + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match *self { + #entity_kind_fmt_args + EntityKind(other) => write!(f, "{other}"), + } + } + } + + #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] + pub enum EntityStatus { + #(#entity_status_variants)* + } + + #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] + pub enum EntityAnimation { + #(#entity_animation_variants)* + } + + fn add_tracked_data_systems(app: &mut App) { + #systems + + #( + app.add_systems( + PostUpdate, + #system_names + .in_set(UpdateTrackedDataSet) + .ambiguous_with(UpdateTrackedDataSet) + ); + )* + } + }) +} + +enum MarkerOrField<'a> { + Marker { + entity_name: &'a str, + }, + Field { + entity_name: &'a str, + field: &'a Field, + }, +} + +fn collect_bundle_fields<'a>( + mut entity_name: &'a str, + entities: &'a Entities, +) -> Vec> { + let mut res = vec![]; + + loop { + let e = &entities[entity_name]; + + res.push(MarkerOrField::Marker { entity_name }); + res.extend( + e.fields + .iter() + .map(|field| MarkerOrField::Field { entity_name, field }), + ); + + if let Some(parent) = &e.parent { + entity_name = parent; + } else { + break; + } + } + + res +} + +fn strip_entity_suffix(string: &str) -> String { + let stripped = string.strip_suffix("Entity").unwrap_or(string); + + if stripped.is_empty() { + string + } else { + stripped + } + .to_owned() +} diff --git a/vendor/valence/crates/valence_entity/extracted/entities.json b/vendor/valence/crates/valence_entity/extracted/entities.json new file mode 100644 index 00000000..f7638662 --- /dev/null +++ b/vendor/valence/crates/valence_entity/extracted/entities.json @@ -0,0 +1,6224 @@ +{ + "AbstractDecorationEntity": { + "parent": "Entity", + "fields": [] + }, + "AbstractDonkeyEntity": { + "parent": "AbstractHorseEntity", + "fields": [ + { + "name": "chest", + "index": 18, + "type": "boolean", + "default_value": false + } + ], + "attributes": [] + }, + "AbstractFireballEntity": { + "parent": "ExplosiveProjectileEntity", + "fields": [ + { + "name": "item", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + } + ] + }, + "AbstractHorseEntity": { + "parent": "AnimalEntity", + "fields": [ + { + "name": "horse_flags", + "index": 17, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [] + }, + "AbstractMinecartEntity": { + "parent": "Entity", + "fields": [ + { + "name": "damage_wobble_ticks", + "index": 8, + "type": "integer", + "default_value": 0 + }, + { + "name": "damage_wobble_side", + "index": 9, + "type": "integer", + "default_value": 1 + }, + { + "name": "damage_wobble_strength", + "index": 10, + "type": "float", + "default_value": 0.0 + }, + { + "name": "custom_block_id", + "index": 11, + "type": "integer", + "default_value": 0 + }, + { + "name": "custom_block_offset", + "index": 12, + "type": "integer", + "default_value": 6 + }, + { + "name": "custom_block_present", + "index": 13, + "type": "boolean", + "default_value": false + } + ] + }, + "AbstractPiglinEntity": { + "parent": "HostileEntity", + "fields": [ + { + "name": "immune_to_zombification", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [] + }, + "AbstractSkeletonEntity": { + "parent": "HostileEntity", + "fields": [], + "attributes": [] + }, + "AllayEntity": { + "parent": "PathAwareEntity", + "type": "allay", + "translation_key": "entity.minecraft.allay", + "fields": [ + { + "name": "dancing", + "index": 16, + "type": "boolean", + "default_value": false + }, + { + "name": "can_duplicate", + "index": 17, + "type": "boolean", + "default_value": true + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 4, + "name": "generic.flying_speed", + "base_value": 0.10000000149011612 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 48.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.10000000149011612 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.3499999940395355, + "size_y": 0.6000000238418579, + "size_z": 0.3499999940395355 + } + }, + "AmbientEntity": { + "parent": "MobEntity", + "fields": [], + "attributes": [] + }, + "AnimalEntity": { + "parent": "PassiveEntity", + "fields": [], + "attributes": [] + }, + "AreaEffectCloudEntity": { + "parent": "Entity", + "type": "area_effect_cloud", + "translation_key": "entity.minecraft.area_effect_cloud", + "fields": [ + { + "name": "radius", + "index": 8, + "type": "float", + "default_value": 3.0 + }, + { + "name": "color", + "index": 9, + "type": "integer", + "default_value": 0 + }, + { + "name": "waiting", + "index": 10, + "type": "boolean", + "default_value": false + }, + { + "name": "particle_id", + "index": 11, + "type": "particle", + "default_value": "entity_effect" + } + ], + "default_bounding_box": { + "size_x": 6.0, + "size_y": 0.5, + "size_z": 6.0 + } + }, + "ArmorStandEntity": { + "parent": "LivingEntity", + "type": "armor_stand", + "translation_key": "entity.minecraft.armor_stand", + "fields": [ + { + "name": "armor_stand_flags", + "index": 15, + "type": "byte", + "default_value": 0 + }, + { + "name": "tracker_head_rotation", + "index": 16, + "type": "rotation", + "default_value": { + "pitch": 0.0, + "yaw": 0.0, + "roll": 0.0 + } + }, + { + "name": "tracker_body_rotation", + "index": 17, + "type": "rotation", + "default_value": { + "pitch": 0.0, + "yaw": 0.0, + "roll": 0.0 + } + }, + { + "name": "tracker_left_arm_rotation", + "index": 18, + "type": "rotation", + "default_value": { + "pitch": -10.0, + "yaw": 0.0, + "roll": -10.0 + } + }, + { + "name": "tracker_right_arm_rotation", + "index": 19, + "type": "rotation", + "default_value": { + "pitch": -15.0, + "yaw": 0.0, + "roll": 10.0 + } + }, + { + "name": "tracker_left_leg_rotation", + "index": 20, + "type": "rotation", + "default_value": { + "pitch": -1.0, + "yaw": 0.0, + "roll": -1.0 + } + }, + { + "name": "tracker_right_leg_rotation", + "index": 21, + "type": "rotation", + "default_value": { + "pitch": 1.0, + "yaw": 0.0, + "roll": 1.0 + } + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 1.975000023841858, + "size_z": 0.5 + } + }, + "ArrowEntity": { + "parent": "PersistentProjectileEntity", + "type": "arrow", + "translation_key": "entity.minecraft.arrow", + "fields": [ + { + "name": "color", + "index": 10, + "type": "integer", + "default_value": -1 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.5, + "size_z": 0.5 + } + }, + "AxolotlEntity": { + "parent": "AnimalEntity", + "type": "axolotl", + "translation_key": "entity.minecraft.axolotl", + "fields": [ + { + "name": "variant", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "playing_dead", + "index": 18, + "type": "boolean", + "default_value": false + }, + { + "name": "from_bucket", + "index": 19, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 1.0 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 14.0 + } + ], + "default_bounding_box": { + "size_x": 0.75, + "size_y": 0.41999998688697815, + "size_z": 0.75 + } + }, + "BatEntity": { + "parent": "AmbientEntity", + "type": "bat", + "translation_key": "entity.minecraft.bat", + "fields": [ + { + "name": "bat_flags", + "index": 16, + "type": "byte", + "default_value": 1 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 6.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.8999999761581421, + "size_z": 0.5 + } + }, + "BeeEntity": { + "parent": "AnimalEntity", + "type": "bee", + "translation_key": "entity.minecraft.bee", + "fields": [ + { + "name": "bee_flags", + "index": 17, + "type": "byte", + "default_value": 0 + }, + { + "name": "anger", + "index": 18, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 4, + "name": "generic.flying_speed", + "base_value": 0.6000000238418579 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 48.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.699999988079071, + "size_y": 0.6000000238418579, + "size_z": 0.699999988079071 + } + }, + "BlazeEntity": { + "parent": "HostileEntity", + "type": "blaze", + "translation_key": "entity.minecraft.blaze", + "fields": [ + { + "name": "blaze_flags", + "index": 16, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 48.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.7999999523162842, + "size_z": 0.6000000238418579 + } + }, + "BlockDisplayEntity": { + "parent": "DisplayEntity", + "type": "block_display", + "translation_key": "entity.minecraft.block_display", + "fields": [ + { + "name": "block_state", + "index": 22, + "type": "block_state", + "default_value": "Block{minecraft:air}" + } + ], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "BoatEntity": { + "parent": "Entity", + "type": "boat", + "translation_key": "entity.minecraft.boat", + "fields": [ + { + "name": "damage_wobble_ticks", + "index": 8, + "type": "integer", + "default_value": 0 + }, + { + "name": "damage_wobble_side", + "index": 9, + "type": "integer", + "default_value": 1 + }, + { + "name": "damage_wobble_strength", + "index": 10, + "type": "float", + "default_value": 0.0 + }, + { + "name": "boat_type", + "index": 11, + "type": "integer", + "default_value": 0 + }, + { + "name": "left_paddle_moving", + "index": 12, + "type": "boolean", + "default_value": false + }, + { + "name": "right_paddle_moving", + "index": 13, + "type": "boolean", + "default_value": false + }, + { + "name": "bubble_wobble_ticks", + "index": 14, + "type": "integer", + "default_value": 0 + } + ], + "default_bounding_box": { + "size_x": 1.375, + "size_y": 0.5625, + "size_z": 1.375 + } + }, + "CamelEntity": { + "parent": "AbstractHorseEntity", + "type": "camel", + "translation_key": "entity.minecraft.camel", + "fields": [ + { + "name": "dashing", + "index": 18, + "type": "boolean", + "default_value": false + }, + { + "name": "last_pose_tick", + "index": 19, + "type": "long", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.41999998688697815 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.09000000357627869 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 32.0 + } + ], + "default_bounding_box": { + "size_x": 1.7000000476837158, + "size_y": 2.375, + "size_z": 1.7000000476837158 + } + }, + "CatEntity": { + "parent": "TameableEntity", + "type": "cat", + "translation_key": "entity.minecraft.cat", + "fields": [ + { + "name": "cat_variant", + "index": 19, + "type": "cat_variant", + "default_value": "black" + }, + { + "name": "in_sleeping_pose", + "index": 20, + "type": "boolean", + "default_value": false + }, + { + "name": "head_down", + "index": 21, + "type": "boolean", + "default_value": false + }, + { + "name": "collar_color", + "index": 22, + "type": "integer", + "default_value": 14 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 0.699999988079071, + "size_z": 0.6000000238418579 + } + }, + "CaveSpiderEntity": { + "parent": "SpiderEntity", + "type": "cave_spider", + "translation_key": "entity.minecraft.cave_spider", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 12.0 + } + ], + "default_bounding_box": { + "size_x": 0.699999988079071, + "size_y": 0.5, + "size_z": 0.699999988079071 + } + }, + "ChestBoatEntity": { + "parent": "BoatEntity", + "type": "chest_boat", + "translation_key": "entity.minecraft.chest_boat", + "fields": [], + "default_bounding_box": { + "size_x": 1.375, + "size_y": 0.5625, + "size_z": 1.375 + } + }, + "ChestMinecartEntity": { + "parent": "StorageMinecartEntity", + "type": "chest_minecart", + "translation_key": "entity.minecraft.chest_minecart", + "fields": [], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "ChickenEntity": { + "parent": "AnimalEntity", + "type": "chicken", + "translation_key": "entity.minecraft.chicken", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 4.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.699999988079071, + "size_z": 0.4000000059604645 + } + }, + "CodEntity": { + "parent": "SchoolingFishEntity", + "type": "cod", + "translation_key": "entity.minecraft.cod", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 3.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.30000001192092896, + "size_z": 0.5 + } + }, + "CommandBlockMinecartEntity": { + "parent": "AbstractMinecartEntity", + "type": "command_block_minecart", + "translation_key": "entity.minecraft.command_block_minecart", + "fields": [ + { + "name": "command", + "index": 14, + "type": "string", + "default_value": "" + }, + { + "name": "last_output", + "index": 15, + "type": "text_component", + "default_value": "" + } + ], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "CowEntity": { + "parent": "AnimalEntity", + "type": "cow", + "translation_key": "entity.minecraft.cow", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.399999976158142, + "size_z": 0.8999999761581421 + } + }, + "CreeperEntity": { + "parent": "HostileEntity", + "type": "creeper", + "translation_key": "entity.minecraft.creeper", + "fields": [ + { + "name": "fuse_speed", + "index": 16, + "type": "integer", + "default_value": -1 + }, + { + "name": "charged", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "ignited", + "index": 18, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.7000000476837158, + "size_z": 0.6000000238418579 + } + }, + "DisplayEntity": { + "parent": "Entity", + "fields": [ + { + "name": "start_interpolation", + "index": 8, + "type": "integer", + "default_value": 0 + }, + { + "name": "interpolation_duration", + "index": 9, + "type": "integer", + "default_value": 0 + }, + { + "name": "translation", + "index": 10, + "type": "vector3f", + "default_value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + { + "name": "scale", + "index": 11, + "type": "vector3f", + "default_value": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + } + }, + { + "name": "left_rotation", + "index": 12, + "type": "quaternionf", + "default_value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + } + }, + { + "name": "right_rotation", + "index": 13, + "type": "quaternionf", + "default_value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 1.0 + } + }, + { + "name": "billboard", + "index": 14, + "type": "byte", + "default_value": 0 + }, + { + "name": "brightness", + "index": 15, + "type": "integer", + "default_value": -1 + }, + { + "name": "view_range", + "index": 16, + "type": "float", + "default_value": 1.0 + }, + { + "name": "shadow_radius", + "index": 17, + "type": "float", + "default_value": 0.0 + }, + { + "name": "shadow_strength", + "index": 18, + "type": "float", + "default_value": 1.0 + }, + { + "name": "width", + "index": 19, + "type": "float", + "default_value": 0.0 + }, + { + "name": "height", + "index": 20, + "type": "float", + "default_value": 0.0 + }, + { + "name": "glow_color_override", + "index": 21, + "type": "integer", + "default_value": -1 + } + ] + }, + "DolphinEntity": { + "parent": "WaterCreatureEntity", + "type": "dolphin", + "translation_key": "entity.minecraft.dolphin", + "fields": [ + { + "name": "treasure_pos", + "index": 16, + "type": "block_pos", + "default_value": { + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "name": "has_fish", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "moistness", + "index": 18, + "type": "integer", + "default_value": 2400 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 1.2000000476837158 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 0.6000000238418579, + "size_z": 0.8999999761581421 + } + }, + "DonkeyEntity": { + "parent": "AbstractDonkeyEntity", + "type": "donkey", + "translation_key": "entity.minecraft.donkey", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.5 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.17499999701976776 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 53.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.5, + "size_z": 1.396484375 + } + }, + "DragonFireballEntity": { + "parent": "ExplosiveProjectileEntity", + "type": "dragon_fireball", + "translation_key": "entity.minecraft.dragon_fireball", + "fields": [], + "default_bounding_box": { + "size_x": 1.0, + "size_y": 1.0, + "size_z": 1.0 + } + }, + "DrownedEntity": { + "parent": "ZombieEntity", + "type": "drowned", + "translation_key": "entity.minecraft.drowned", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 11, + "name": "zombie.spawn_reinforcements", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 2.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 35.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "EggEntity": { + "parent": "ThrownItemEntity", + "type": "egg", + "translation_key": "entity.minecraft.egg", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "ElderGuardianEntity": { + "parent": "GuardianEntity", + "type": "elder_guardian", + "translation_key": "entity.minecraft.elder_guardian", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 8.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 80.0 + } + ], + "default_bounding_box": { + "size_x": 1.997499942779541, + "size_y": 1.997499942779541, + "size_z": 1.997499942779541 + } + }, + "EndCrystalEntity": { + "parent": "Entity", + "type": "end_crystal", + "translation_key": "entity.minecraft.end_crystal", + "fields": [ + { + "name": "beam_target", + "index": 8, + "type": "optional_block_pos", + "default_value": null + }, + { + "name": "show_bottom", + "index": 9, + "type": "boolean", + "default_value": true + } + ], + "default_bounding_box": { + "size_x": 2.0, + "size_y": 2.0, + "size_z": 2.0 + } + }, + "EnderDragonEntity": { + "parent": "MobEntity", + "type": "ender_dragon", + "translation_key": "entity.minecraft.ender_dragon", + "fields": [ + { + "name": "phase_type", + "index": 16, + "type": "integer", + "default_value": 10 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 200.0 + } + ], + "default_bounding_box": { + "size_x": 16.0, + "size_y": 8.0, + "size_z": 16.0 + } + }, + "EnderPearlEntity": { + "parent": "ThrownItemEntity", + "type": "ender_pearl", + "translation_key": "entity.minecraft.ender_pearl", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "EndermanEntity": { + "parent": "HostileEntity", + "type": "enderman", + "translation_key": "entity.minecraft.enderman", + "fields": [ + { + "name": "carried_block", + "index": 16, + "type": "optional_block_state", + "default_value": null + }, + { + "name": "angry", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "provoked", + "index": 18, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 7.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 64.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 40.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 2.9000000953674316, + "size_z": 0.6000000238418579 + } + }, + "EndermiteEntity": { + "parent": "HostileEntity", + "type": "endermite", + "translation_key": "entity.minecraft.endermite", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 8.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.30000001192092896, + "size_z": 0.4000000059604645 + } + }, + "Entity": { + "fields": [ + { + "name": "flags", + "index": 0, + "type": "byte", + "default_value": 0 + }, + { + "name": "air", + "index": 1, + "type": "integer", + "default_value": 300 + }, + { + "name": "custom_name", + "index": 2, + "type": "optional_text_component", + "default_value": null + }, + { + "name": "name_visible", + "index": 3, + "type": "boolean", + "default_value": false + }, + { + "name": "silent", + "index": 4, + "type": "boolean", + "default_value": false + }, + { + "name": "no_gravity", + "index": 5, + "type": "boolean", + "default_value": false + }, + { + "name": "pose", + "index": 6, + "type": "entity_pose", + "default_value": "standing" + }, + { + "name": "frozen_ticks", + "index": 7, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [] + }, + "EvokerEntity": { + "parent": "SpellcastingIllagerEntity", + "type": "evoker", + "translation_key": "entity.minecraft.evoker", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 12.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.5 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 24.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "EvokerFangsEntity": { + "parent": "Entity", + "type": "evoker_fangs", + "translation_key": "entity.minecraft.evoker_fangs", + "fields": [], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.800000011920929, + "size_z": 0.5 + } + }, + "ExperienceBottleEntity": { + "parent": "ThrownItemEntity", + "type": "experience_bottle", + "translation_key": "entity.minecraft.experience_bottle", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "ExperienceOrbEntity": { + "parent": "Entity", + "type": "experience_orb", + "translation_key": "entity.minecraft.experience_orb", + "fields": [], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.5, + "size_z": 0.5 + } + }, + "ExplosiveProjectileEntity": { + "parent": "ProjectileEntity", + "fields": [] + }, + "EyeOfEnderEntity": { + "parent": "Entity", + "type": "eye_of_ender", + "translation_key": "entity.minecraft.eye_of_ender", + "fields": [ + { + "name": "item", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + } + ], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "FallingBlockEntity": { + "parent": "Entity", + "type": "falling_block", + "translation_key": "entity.minecraft.falling_block", + "fields": [ + { + "name": "block_pos", + "index": 8, + "type": "block_pos", + "default_value": { + "x": 0, + "y": 0, + "z": 0 + } + } + ], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.9800000190734863, + "size_z": 0.9800000190734863 + } + }, + "FireballEntity": { + "parent": "AbstractFireballEntity", + "type": "fireball", + "translation_key": "entity.minecraft.fireball", + "fields": [], + "default_bounding_box": { + "size_x": 1.0, + "size_y": 1.0, + "size_z": 1.0 + } + }, + "FireworkRocketEntity": { + "parent": "ProjectileEntity", + "type": "firework_rocket", + "translation_key": "entity.minecraft.firework_rocket", + "fields": [ + { + "name": "item", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + }, + { + "name": "shooter_entity_id", + "index": 9, + "type": "optional_int", + "default_value": null + }, + { + "name": "shot_at_angle", + "index": 10, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "FishEntity": { + "parent": "WaterCreatureEntity", + "fields": [ + { + "name": "from_bucket", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [] + }, + "FishingBobberEntity": { + "parent": "ProjectileEntity", + "type": "fishing_bobber", + "translation_key": "entity.minecraft.fishing_bobber", + "fields": [ + { + "name": "hook_entity_id", + "index": 8, + "type": "integer", + "default_value": 0 + }, + { + "name": "caught_fish", + "index": 9, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "FlyingEntity": { + "parent": "MobEntity", + "fields": [], + "attributes": [] + }, + "FoxEntity": { + "parent": "AnimalEntity", + "type": "fox", + "translation_key": "entity.minecraft.fox", + "fields": [ + { + "name": "type", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "fox_flags", + "index": 18, + "type": "byte", + "default_value": 0 + }, + { + "name": "owner", + "index": 19, + "type": "optional_uuid", + "default_value": null + }, + { + "name": "other_trusted", + "index": 20, + "type": "optional_uuid", + "default_value": null + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 32.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 0.699999988079071, + "size_z": 0.6000000238418579 + } + }, + "FrogEntity": { + "parent": "AnimalEntity", + "type": "frog", + "translation_key": "entity.minecraft.frog", + "fields": [ + { + "name": "variant", + "index": 17, + "type": "frog_variant", + "default_value": "temperate" + }, + { + "name": "target", + "index": 18, + "type": "optional_int", + "default_value": null + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 10.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 1.0 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.5, + "size_z": 0.5 + } + }, + "FurnaceMinecartEntity": { + "parent": "AbstractMinecartEntity", + "type": "furnace_minecart", + "translation_key": "entity.minecraft.furnace_minecart", + "fields": [ + { + "name": "lit", + "index": 14, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "GhastEntity": { + "parent": "FlyingEntity", + "type": "ghast", + "translation_key": "entity.minecraft.ghast", + "fields": [ + { + "name": "shooting", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 100.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 4.0, + "size_y": 4.0, + "size_z": 4.0 + } + }, + "GiantEntity": { + "parent": "HostileEntity", + "type": "giant", + "translation_key": "entity.minecraft.giant", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 50.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.5 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 100.0 + } + ], + "default_bounding_box": { + "size_x": 3.5999999046325684, + "size_y": 12.0, + "size_z": 3.5999999046325684 + } + }, + "GlowItemFrameEntity": { + "parent": "ItemFrameEntity", + "type": "glow_item_frame", + "translation_key": "entity.minecraft.glow_item_frame", + "fields": [], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "GlowSquidEntity": { + "parent": "SquidEntity", + "type": "glow_squid", + "translation_key": "entity.minecraft.glow_squid", + "fields": [ + { + "name": "dark_ticks_remaining", + "index": 16, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.800000011920929, + "size_y": 0.800000011920929, + "size_z": 0.800000011920929 + } + }, + "GoatEntity": { + "parent": "AnimalEntity", + "type": "goat", + "translation_key": "entity.minecraft.goat", + "fields": [ + { + "name": "screaming", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "left_horn", + "index": 18, + "type": "boolean", + "default_value": true + }, + { + "name": "right_horn", + "index": 19, + "type": "boolean", + "default_value": true + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.2999999523162842, + "size_z": 0.8999999761581421 + } + }, + "GolemEntity": { + "parent": "PathAwareEntity", + "fields": [], + "attributes": [] + }, + "GuardianEntity": { + "parent": "HostileEntity", + "type": "guardian", + "translation_key": "entity.minecraft.guardian", + "fields": [ + { + "name": "spikes_retracted", + "index": 16, + "type": "boolean", + "default_value": false + }, + { + "name": "beam_target_id", + "index": 17, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.5 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 30.0 + } + ], + "default_bounding_box": { + "size_x": 0.8500000238418579, + "size_y": 0.8500000238418579, + "size_z": 0.8500000238418579 + } + }, + "HoglinEntity": { + "parent": "AnimalEntity", + "type": "hoglin", + "translation_key": "entity.minecraft.hoglin", + "fields": [ + { + "name": "baby", + "index": 17, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 1.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.6000000238418579 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 40.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.399999976158142, + "size_z": 1.396484375 + } + }, + "HopperMinecartEntity": { + "parent": "StorageMinecartEntity", + "type": "hopper_minecart", + "translation_key": "entity.minecraft.hopper_minecart", + "fields": [], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "HorseEntity": { + "parent": "AbstractHorseEntity", + "type": "horse", + "translation_key": "entity.minecraft.horse", + "fields": [ + { + "name": "variant", + "index": 18, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.7 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.22499999403953552 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 53.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.600000023841858, + "size_z": 1.396484375 + } + }, + "HostileEntity": { + "parent": "PathAwareEntity", + "fields": [], + "attributes": [] + }, + "HuskEntity": { + "parent": "ZombieEntity", + "type": "husk", + "translation_key": "entity.minecraft.husk", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 11, + "name": "zombie.spawn_reinforcements", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 2.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 35.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "IllagerEntity": { + "parent": "RaiderEntity", + "fields": [], + "attributes": [] + }, + "IllusionerEntity": { + "parent": "SpellcastingIllagerEntity", + "type": "illusioner", + "translation_key": "entity.minecraft.illusioner", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 18.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.5 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 32.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "InteractionEntity": { + "parent": "Entity", + "type": "interaction", + "translation_key": "entity.minecraft.interaction", + "fields": [ + { + "name": "width", + "index": 8, + "type": "float", + "default_value": 1.0 + }, + { + "name": "height", + "index": 9, + "type": "float", + "default_value": 1.0 + }, + { + "name": "response", + "index": 10, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 1.0, + "size_y": 1.0, + "size_z": 1.0 + } + }, + "IronGolemEntity": { + "parent": "GolemEntity", + "type": "iron_golem", + "translation_key": "entity.minecraft.iron_golem", + "fields": [ + { + "name": "iron_golem_flags", + "index": 16, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 1.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 15.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 100.0 + } + ], + "default_bounding_box": { + "size_x": 1.399999976158142, + "size_y": 2.700000047683716, + "size_z": 1.399999976158142 + } + }, + "ItemDisplayEntity": { + "parent": "DisplayEntity", + "type": "item_display", + "translation_key": "entity.minecraft.item_display", + "fields": [ + { + "name": "item", + "index": 22, + "type": "item_stack", + "default_value": "0 air" + }, + { + "name": "item_display", + "index": 23, + "type": "byte", + "default_value": 0 + } + ], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "ItemEntity": { + "parent": "Entity", + "type": "item", + "translation_key": "entity.minecraft.item", + "fields": [ + { + "name": "stack", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + } + ], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "ItemFrameEntity": { + "parent": "AbstractDecorationEntity", + "type": "item_frame", + "translation_key": "entity.minecraft.item_frame", + "fields": [ + { + "name": "item_stack", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + }, + { + "name": "rotation", + "index": 9, + "type": "integer", + "default_value": 0 + } + ], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "LeashKnotEntity": { + "parent": "AbstractDecorationEntity", + "type": "leash_knot", + "translation_key": "entity.minecraft.leash_knot", + "fields": [], + "default_bounding_box": { + "size_x": 0.375, + "size_y": 0.5, + "size_z": 0.375 + } + }, + "LightningEntity": { + "parent": "Entity", + "type": "lightning_bolt", + "translation_key": "entity.minecraft.lightning_bolt", + "fields": [], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "LivingEntity": { + "parent": "Entity", + "fields": [ + { + "name": "living_flags", + "index": 8, + "type": "byte", + "default_value": 0 + }, + { + "name": "health", + "index": 9, + "type": "float", + "default_value": 14.0 + }, + { + "name": "potion_swirls_color", + "index": 10, + "type": "integer", + "default_value": 0 + }, + { + "name": "potion_swirls_ambient", + "index": 11, + "type": "boolean", + "default_value": false + }, + { + "name": "stuck_arrow_count", + "index": 12, + "type": "integer", + "default_value": 0 + }, + { + "name": "stinger_count", + "index": 13, + "type": "integer", + "default_value": 0 + }, + { + "name": "sleeping_position", + "index": 14, + "type": "optional_block_pos", + "default_value": null + } + ], + "attributes": [] + }, + "LlamaEntity": { + "parent": "AbstractDonkeyEntity", + "type": "llama", + "translation_key": "entity.minecraft.llama", + "fields": [ + { + "name": "strength", + "index": 19, + "type": "integer", + "default_value": 0 + }, + { + "name": "carpet_color", + "index": 20, + "type": "integer", + "default_value": -1 + }, + { + "name": "variant", + "index": 21, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 40.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.5 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.17499999701976776 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 53.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.8700000047683716, + "size_z": 0.8999999761581421 + } + }, + "LlamaSpitEntity": { + "parent": "ProjectileEntity", + "type": "llama_spit", + "translation_key": "entity.minecraft.llama_spit", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "MagmaCubeEntity": { + "parent": "SlimeEntity", + "type": "magma_cube", + "translation_key": "entity.minecraft.magma_cube", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 2.0399999618530273, + "size_y": 2.0399999618530273, + "size_z": 2.0399999618530273 + } + }, + "MarkerEntity": { + "parent": "Entity", + "type": "marker", + "translation_key": "entity.minecraft.marker", + "fields": [], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "MerchantEntity": { + "parent": "PassiveEntity", + "fields": [ + { + "name": "head_rolling_time_left", + "index": 17, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [] + }, + "MinecartEntity": { + "parent": "AbstractMinecartEntity", + "type": "minecart", + "translation_key": "entity.minecraft.minecart", + "fields": [], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "MobEntity": { + "parent": "LivingEntity", + "fields": [ + { + "name": "mob_flags", + "index": 15, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [] + }, + "MooshroomEntity": { + "parent": "CowEntity", + "type": "mooshroom", + "translation_key": "entity.minecraft.mooshroom", + "fields": [ + { + "name": "type", + "index": 17, + "type": "string", + "default_value": "red" + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.399999976158142, + "size_z": 0.8999999761581421 + } + }, + "MuleEntity": { + "parent": "AbstractDonkeyEntity", + "type": "mule", + "translation_key": "entity.minecraft.mule", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.5 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.17499999701976776 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 53.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.600000023841858, + "size_z": 1.396484375 + } + }, + "OcelotEntity": { + "parent": "AnimalEntity", + "type": "ocelot", + "translation_key": "entity.minecraft.ocelot", + "fields": [ + { + "name": "trusting", + "index": 17, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 0.699999988079071, + "size_z": 0.6000000238418579 + } + }, + "PaintingEntity": { + "parent": "AbstractDecorationEntity", + "type": "painting", + "translation_key": "entity.minecraft.painting", + "fields": [ + { + "name": "variant", + "index": 8, + "type": "painting_variant", + "default_value": "kebab" + } + ], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "PandaEntity": { + "parent": "AnimalEntity", + "type": "panda", + "translation_key": "entity.minecraft.panda", + "fields": [ + { + "name": "ask_for_bamboo_ticks", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "sneeze_progress", + "index": 18, + "type": "integer", + "default_value": 0 + }, + { + "name": "eating_ticks", + "index": 19, + "type": "integer", + "default_value": 0 + }, + { + "name": "main_gene", + "index": 20, + "type": "byte", + "default_value": 0 + }, + { + "name": "hidden_gene", + "index": 21, + "type": "byte", + "default_value": 0 + }, + { + "name": "panda_flags", + "index": 22, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.15000000596046448 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 1.2999999523162842, + "size_y": 1.25, + "size_z": 1.2999999523162842 + } + }, + "ParrotEntity": { + "parent": "TameableShoulderEntity", + "type": "parrot", + "translation_key": "entity.minecraft.parrot", + "fields": [ + { + "name": "variant", + "index": 19, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 4, + "name": "generic.flying_speed", + "base_value": 0.4000000059604645 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 6.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.8999999761581421, + "size_z": 0.5 + } + }, + "PassiveEntity": { + "parent": "PathAwareEntity", + "fields": [ + { + "name": "child", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [] + }, + "PathAwareEntity": { + "parent": "MobEntity", + "fields": [], + "attributes": [] + }, + "PatrolEntity": { + "parent": "HostileEntity", + "fields": [], + "attributes": [] + }, + "PersistentProjectileEntity": { + "parent": "ProjectileEntity", + "fields": [ + { + "name": "projectile_flags", + "index": 8, + "type": "byte", + "default_value": 0 + }, + { + "name": "pierce_level", + "index": 9, + "type": "byte", + "default_value": 0 + } + ] + }, + "PhantomEntity": { + "parent": "FlyingEntity", + "type": "phantom", + "translation_key": "entity.minecraft.phantom", + "fields": [ + { + "name": "size", + "index": 16, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 0.5, + "size_z": 0.8999999761581421 + } + }, + "PigEntity": { + "parent": "AnimalEntity", + "type": "pig", + "translation_key": "entity.minecraft.pig", + "fields": [ + { + "name": "saddled", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "boost_time", + "index": 18, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 0.8999999761581421, + "size_z": 0.8999999761581421 + } + }, + "PiglinBruteEntity": { + "parent": "AbstractPiglinEntity", + "type": "piglin_brute", + "translation_key": "entity.minecraft.piglin_brute", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 7.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.3499999940395355 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 50.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "PiglinEntity": { + "parent": "AbstractPiglinEntity", + "type": "piglin", + "translation_key": "entity.minecraft.piglin", + "fields": [ + { + "name": "baby", + "index": 17, + "type": "boolean", + "default_value": false + }, + { + "name": "charging", + "index": 18, + "type": "boolean", + "default_value": false + }, + { + "name": "dancing", + "index": 19, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 5.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.3499999940395355 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 16.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "PillagerEntity": { + "parent": "IllagerEntity", + "type": "pillager", + "translation_key": "entity.minecraft.pillager", + "fields": [ + { + "name": "charging", + "index": 17, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 5.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 32.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.3499999940395355 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 24.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "PlayerEntity": { + "parent": "LivingEntity", + "type": "player", + "translation_key": "entity.minecraft.player", + "fields": [ + { + "name": "absorption_amount", + "index": 15, + "type": "float", + "default_value": 0.0 + }, + { + "name": "score", + "index": 16, + "type": "integer", + "default_value": 0 + }, + { + "name": "player_model_parts", + "index": 17, + "type": "byte", + "default_value": 0 + }, + { + "name": "main_arm", + "index": 18, + "type": "byte", + "default_value": 1 + }, + { + "name": "left_shoulder_entity", + "index": 19, + "type": "nbt_compound", + "default_value": "{}" + }, + { + "name": "right_shoulder_entity", + "index": 20, + "type": "nbt_compound", + "default_value": "{}" + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 1.0 + }, + { + "id": 7, + "name": "generic.attack_speed", + "base_value": 4.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.10000000149011612 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + }, + { + "id": 10, + "name": "generic.luck", + "base_value": 0.0 + } + ] + }, + "PolarBearEntity": { + "parent": "AnimalEntity", + "type": "polar_bear", + "translation_key": "entity.minecraft.polar_bear", + "fields": [ + { + "name": "warning", + "index": 17, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 20.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 30.0 + } + ], + "default_bounding_box": { + "size_x": 1.399999976158142, + "size_y": 1.399999976158142, + "size_z": 1.399999976158142 + } + }, + "PotionEntity": { + "parent": "ThrownItemEntity", + "type": "potion", + "translation_key": "entity.minecraft.potion", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "ProjectileEntity": { + "parent": "Entity", + "fields": [] + }, + "PufferfishEntity": { + "parent": "FishEntity", + "type": "pufferfish", + "translation_key": "entity.minecraft.pufferfish", + "fields": [ + { + "name": "puff_state", + "index": 17, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 3.0 + } + ], + "default_bounding_box": { + "size_x": 0.3499999940395355, + "size_y": 0.3499999940395355, + "size_z": 0.3499999940395355 + } + }, + "RabbitEntity": { + "parent": "AnimalEntity", + "type": "rabbit", + "translation_key": "entity.minecraft.rabbit", + "fields": [ + { + "name": "rabbit_type", + "index": 17, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 3.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.5, + "size_z": 0.4000000059604645 + } + }, + "RaiderEntity": { + "parent": "PatrolEntity", + "fields": [ + { + "name": "celebrating", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [] + }, + "RavagerEntity": { + "parent": "RaiderEntity", + "type": "ravager", + "translation_key": "entity.minecraft.ravager", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 1.5 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.75 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 12.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 32.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.3 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 100.0 + } + ], + "default_bounding_box": { + "size_x": 1.9500000476837158, + "size_y": 2.200000047683716, + "size_z": 1.9500000476837158 + } + }, + "SalmonEntity": { + "parent": "SchoolingFishEntity", + "type": "salmon", + "translation_key": "entity.minecraft.salmon", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 3.0 + } + ], + "default_bounding_box": { + "size_x": 0.699999988079071, + "size_y": 0.4000000059604645, + "size_z": 0.699999988079071 + } + }, + "SchoolingFishEntity": { + "parent": "FishEntity", + "fields": [], + "attributes": [] + }, + "SheepEntity": { + "parent": "AnimalEntity", + "type": "sheep", + "translation_key": "entity.minecraft.sheep", + "fields": [ + { + "name": "color", + "index": 17, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 8.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.2999999523162842, + "size_z": 0.8999999761581421 + } + }, + "ShulkerBulletEntity": { + "parent": "ProjectileEntity", + "type": "shulker_bullet", + "translation_key": "entity.minecraft.shulker_bullet", + "fields": [], + "default_bounding_box": { + "size_x": 0.3125, + "size_y": 0.3125, + "size_z": 0.3125 + } + }, + "ShulkerEntity": { + "parent": "GolemEntity", + "type": "shulker", + "translation_key": "entity.minecraft.shulker", + "fields": [ + { + "name": "attached_face", + "index": 16, + "type": "facing", + "default_value": "down" + }, + { + "name": "peek_amount", + "index": 17, + "type": "byte", + "default_value": 0 + }, + { + "name": "color", + "index": 18, + "type": "byte", + "default_value": 16 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 30.0 + } + ], + "default_bounding_box": { + "size_x": 1.0, + "size_y": 1.0, + "size_z": 1.0 + } + }, + "SilverfishEntity": { + "parent": "HostileEntity", + "type": "silverfish", + "translation_key": "entity.minecraft.silverfish", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 1.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 8.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.30000001192092896, + "size_z": 0.4000000059604645 + } + }, + "SkeletonEntity": { + "parent": "AbstractSkeletonEntity", + "type": "skeleton", + "translation_key": "entity.minecraft.skeleton", + "fields": [ + { + "name": "converting", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9900000095367432, + "size_z": 0.6000000238418579 + } + }, + "SkeletonHorseEntity": { + "parent": "AbstractHorseEntity", + "type": "skeleton_horse", + "translation_key": "entity.minecraft.skeleton_horse", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.7 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 15.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.600000023841858, + "size_z": 1.396484375 + } + }, + "SlimeEntity": { + "parent": "MobEntity", + "type": "slime", + "translation_key": "entity.minecraft.slime", + "fields": [ + { + "name": "slime_size", + "index": 16, + "type": "integer", + "default_value": 1 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 2.0399999618530273, + "size_y": 2.0399999618530273, + "size_z": 2.0399999618530273 + } + }, + "SmallFireballEntity": { + "parent": "AbstractFireballEntity", + "type": "small_fireball", + "translation_key": "entity.minecraft.small_fireball", + "fields": [], + "default_bounding_box": { + "size_x": 0.3125, + "size_y": 0.3125, + "size_z": 0.3125 + } + }, + "SnifferEntity": { + "parent": "AnimalEntity", + "type": "sniffer", + "translation_key": "entity.minecraft.sniffer", + "fields": [ + { + "name": "state", + "index": 17, + "type": "sniffer_state", + "default_value": "idling" + }, + { + "name": "finish_dig_time", + "index": 18, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.10000000149011612 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 14.0 + } + ], + "default_bounding_box": { + "size_x": 1.899999976158142, + "size_y": 1.75, + "size_z": 1.899999976158142 + } + }, + "SnowGolemEntity": { + "parent": "GolemEntity", + "type": "snow_golem", + "translation_key": "entity.minecraft.snow_golem", + "fields": [ + { + "name": "snow_golem_flags", + "index": 16, + "type": "byte", + "default_value": 16 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 4.0 + } + ], + "default_bounding_box": { + "size_x": 0.699999988079071, + "size_y": 1.899999976158142, + "size_z": 0.699999988079071 + } + }, + "SnowballEntity": { + "parent": "ThrownItemEntity", + "type": "snowball", + "translation_key": "entity.minecraft.snowball", + "fields": [], + "default_bounding_box": { + "size_x": 0.25, + "size_y": 0.25, + "size_z": 0.25 + } + }, + "SpawnerMinecartEntity": { + "parent": "AbstractMinecartEntity", + "type": "spawner_minecart", + "translation_key": "entity.minecraft.spawner_minecart", + "fields": [], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "SpectralArrowEntity": { + "parent": "PersistentProjectileEntity", + "type": "spectral_arrow", + "translation_key": "entity.minecraft.spectral_arrow", + "fields": [], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.5, + "size_z": 0.5 + } + }, + "SpellcastingIllagerEntity": { + "parent": "IllagerEntity", + "fields": [ + { + "name": "spell", + "index": 17, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [] + }, + "SpiderEntity": { + "parent": "HostileEntity", + "type": "spider", + "translation_key": "entity.minecraft.spider", + "fields": [ + { + "name": "spider_flags", + "index": 16, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 16.0 + } + ], + "default_bounding_box": { + "size_x": 1.399999976158142, + "size_y": 0.8999999761581421, + "size_z": 1.399999976158142 + } + }, + "SquidEntity": { + "parent": "WaterCreatureEntity", + "type": "squid", + "translation_key": "entity.minecraft.squid", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 10.0 + } + ], + "default_bounding_box": { + "size_x": 0.800000011920929, + "size_y": 0.800000011920929, + "size_z": 0.800000011920929 + } + }, + "StorageMinecartEntity": { + "parent": "AbstractMinecartEntity", + "fields": [] + }, + "StrayEntity": { + "parent": "AbstractSkeletonEntity", + "type": "stray", + "translation_key": "entity.minecraft.stray", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9900000095367432, + "size_z": 0.6000000238418579 + } + }, + "StriderEntity": { + "parent": "AnimalEntity", + "type": "strider", + "translation_key": "entity.minecraft.strider", + "fields": [ + { + "name": "boost_time", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "cold", + "index": 18, + "type": "boolean", + "default_value": false + }, + { + "name": "saddled", + "index": 19, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.17499999701976776 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.7000000476837158, + "size_z": 0.8999999761581421 + } + }, + "TadpoleEntity": { + "parent": "FishEntity", + "type": "tadpole", + "translation_key": "entity.minecraft.tadpole", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 1.0 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 6.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.30000001192092896, + "size_z": 0.4000000059604645 + } + }, + "TameableEntity": { + "parent": "AnimalEntity", + "fields": [ + { + "name": "tameable_flags", + "index": 17, + "type": "byte", + "default_value": 0 + }, + { + "name": "owner_uuid", + "index": 18, + "type": "optional_uuid", + "default_value": null + } + ], + "attributes": [] + }, + "TameableShoulderEntity": { + "parent": "TameableEntity", + "fields": [], + "attributes": [] + }, + "TextDisplayEntity": { + "parent": "DisplayEntity", + "type": "text_display", + "translation_key": "entity.minecraft.text_display", + "fields": [ + { + "name": "text", + "index": 22, + "type": "text_component", + "default_value": "" + }, + { + "name": "line_width", + "index": 23, + "type": "integer", + "default_value": 200 + }, + { + "name": "background", + "index": 24, + "type": "integer", + "default_value": 1073741824 + }, + { + "name": "text_opacity", + "index": 25, + "type": "byte", + "default_value": -1 + }, + { + "name": "text_display_flags", + "index": 26, + "type": "byte", + "default_value": 0 + } + ], + "default_bounding_box": { + "size_x": 0.0, + "size_y": 0.0, + "size_z": 0.0 + } + }, + "ThrownEntity": { + "parent": "ProjectileEntity", + "fields": [] + }, + "ThrownItemEntity": { + "parent": "ThrownEntity", + "fields": [ + { + "name": "item", + "index": 8, + "type": "item_stack", + "default_value": "0 air" + } + ] + }, + "TntEntity": { + "parent": "Entity", + "type": "tnt", + "translation_key": "entity.minecraft.tnt", + "fields": [ + { + "name": "fuse", + "index": 8, + "type": "integer", + "default_value": 80 + } + ], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.9800000190734863, + "size_z": 0.9800000190734863 + } + }, + "TntMinecartEntity": { + "parent": "AbstractMinecartEntity", + "type": "tnt_minecart", + "translation_key": "entity.minecraft.tnt_minecart", + "fields": [], + "default_bounding_box": { + "size_x": 0.9800000190734863, + "size_y": 0.699999988079071, + "size_z": 0.9800000190734863 + } + }, + "TraderLlamaEntity": { + "parent": "LlamaEntity", + "type": "trader_llama", + "translation_key": "entity.minecraft.trader_llama", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 40.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.5 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.17499999701976776 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 53.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 1.8700000047683716, + "size_z": 0.8999999761581421 + } + }, + "TridentEntity": { + "parent": "PersistentProjectileEntity", + "type": "trident", + "translation_key": "entity.minecraft.trident", + "fields": [ + { + "name": "loyalty", + "index": 10, + "type": "byte", + "default_value": 0 + }, + { + "name": "enchanted", + "index": 11, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.5, + "size_z": 0.5 + } + }, + "TropicalFishEntity": { + "parent": "SchoolingFishEntity", + "type": "tropical_fish", + "translation_key": "entity.minecraft.tropical_fish", + "fields": [ + { + "name": "variant", + "index": 17, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 3.0 + } + ], + "default_bounding_box": { + "size_x": 0.5, + "size_y": 0.4000000059604645, + "size_z": 0.5 + } + }, + "TurtleEntity": { + "parent": "AnimalEntity", + "type": "turtle", + "translation_key": "entity.minecraft.turtle", + "fields": [ + { + "name": "home_pos", + "index": 17, + "type": "block_pos", + "default_value": { + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "name": "has_egg", + "index": 18, + "type": "boolean", + "default_value": false + }, + { + "name": "digging_sand", + "index": 19, + "type": "boolean", + "default_value": false + }, + { + "name": "travel_pos", + "index": 20, + "type": "block_pos", + "default_value": { + "x": 0, + "y": 0, + "z": 0 + } + }, + { + "name": "land_bound", + "index": 21, + "type": "boolean", + "default_value": false + }, + { + "name": "actively_traveling", + "index": 22, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 30.0 + } + ], + "default_bounding_box": { + "size_x": 1.2000000476837158, + "size_y": 0.4000000059604645, + "size_z": 1.2000000476837158 + } + }, + "VexEntity": { + "parent": "HostileEntity", + "type": "vex", + "translation_key": "entity.minecraft.vex", + "fields": [ + { + "name": "vex_flags", + "index": 16, + "type": "byte", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 4.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 14.0 + } + ], + "default_bounding_box": { + "size_x": 0.4000000059604645, + "size_y": 0.800000011920929, + "size_z": 0.4000000059604645 + } + }, + "VillagerEntity": { + "parent": "MerchantEntity", + "type": "villager", + "translation_key": "entity.minecraft.villager", + "fields": [ + { + "name": "villager_data", + "index": 18, + "type": "villager_data", + "default_value": { + "type": "plains", + "profession": "none", + "level": 1 + } + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 48.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.5 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "VindicatorEntity": { + "parent": "IllagerEntity", + "type": "vindicator", + "translation_key": "entity.minecraft.vindicator", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 5.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 12.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.3499999940395355 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 24.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "WanderingTraderEntity": { + "parent": "MerchantEntity", + "type": "wandering_trader", + "translation_key": "entity.minecraft.wandering_trader", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.699999988079071 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "WardenEntity": { + "parent": "HostileEntity", + "type": "warden", + "translation_key": "entity.minecraft.warden", + "fields": [ + { + "name": "anger", + "index": 16, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 1.5 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 1.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 30.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 500.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 2.9000000953674316, + "size_z": 0.8999999761581421 + } + }, + "WaterCreatureEntity": { + "parent": "PathAwareEntity", + "fields": [], + "attributes": [] + }, + "WitchEntity": { + "parent": "RaiderEntity", + "type": "witch", + "translation_key": "entity.minecraft.witch", + "fields": [ + { + "name": "drinking", + "index": 17, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 26.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "WitherEntity": { + "parent": "HostileEntity", + "type": "wither", + "translation_key": "entity.minecraft.wither", + "fields": [ + { + "name": "tracked_entity_id_1", + "index": 16, + "type": "integer", + "default_value": 0 + }, + { + "name": "tracked_entity_id_2", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "tracked_entity_id_3", + "index": 18, + "type": "integer", + "default_value": 0 + }, + { + "name": "invul_timer", + "index": 19, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 4, + "name": "generic.flying_speed", + "base_value": 0.6000000238418579 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 4.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 40.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.6000000238418579 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 300.0 + } + ], + "default_bounding_box": { + "size_x": 0.8999999761581421, + "size_y": 3.5, + "size_z": 0.8999999761581421 + } + }, + "WitherSkeletonEntity": { + "parent": "AbstractSkeletonEntity", + "type": "wither_skeleton", + "translation_key": "entity.minecraft.wither_skeleton", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.25 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.699999988079071, + "size_y": 2.4000000953674316, + "size_z": 0.699999988079071 + } + }, + "WitherSkullEntity": { + "parent": "ExplosiveProjectileEntity", + "type": "wither_skull", + "translation_key": "entity.minecraft.wither_skull", + "fields": [ + { + "name": "charged", + "index": 8, + "type": "boolean", + "default_value": false + } + ], + "default_bounding_box": { + "size_x": 0.3125, + "size_y": 0.3125, + "size_z": 0.3125 + } + }, + "WolfEntity": { + "parent": "TameableEntity", + "type": "wolf", + "translation_key": "entity.minecraft.wolf", + "fields": [ + { + "name": "begging", + "index": 19, + "type": "boolean", + "default_value": false + }, + { + "name": "collar_color", + "index": 20, + "type": "integer", + "default_value": 14 + }, + { + "name": "anger_time", + "index": 21, + "type": "integer", + "default_value": 0 + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 2.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 8.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 0.8500000238418579, + "size_z": 0.6000000238418579 + } + }, + "ZoglinEntity": { + "parent": "HostileEntity", + "type": "zoglin", + "translation_key": "entity.minecraft.zoglin", + "fields": [ + { + "name": "baby", + "index": 16, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 1.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.6000000238418579 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 6.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.30000001192092896 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 40.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.399999976158142, + "size_z": 1.396484375 + } + }, + "ZombieEntity": { + "parent": "HostileEntity", + "type": "zombie", + "translation_key": "entity.minecraft.zombie", + "fields": [ + { + "name": "baby", + "index": 16, + "type": "boolean", + "default_value": false + }, + { + "name": "zombie_type", + "index": 17, + "type": "integer", + "default_value": 0 + }, + { + "name": "converting_in_water", + "index": 18, + "type": "boolean", + "default_value": false + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 11, + "name": "zombie.spawn_reinforcements", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 2.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 35.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "ZombieHorseEntity": { + "parent": "AbstractHorseEntity", + "type": "zombie_horse", + "translation_key": "entity.minecraft.zombie_horse", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 0.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 16.0 + }, + { + "id": 12, + "name": "horse.jump_strength", + "base_value": 0.7 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.20000000298023224 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 15.0 + } + ], + "default_bounding_box": { + "size_x": 1.396484375, + "size_y": 1.600000023841858, + "size_z": 1.396484375 + } + }, + "ZombieVillagerEntity": { + "parent": "ZombieEntity", + "type": "zombie_villager", + "translation_key": "entity.minecraft.zombie_villager", + "fields": [ + { + "name": "converting", + "index": 19, + "type": "boolean", + "default_value": false + }, + { + "name": "villager_data", + "index": 20, + "type": "villager_data", + "default_value": { + "type": "plains", + "profession": "none", + "level": 1 + } + } + ], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 11, + "name": "zombie.spawn_reinforcements", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 2.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 3.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 35.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + }, + "ZombifiedPiglinEntity": { + "parent": "ZombieEntity", + "type": "zombified_piglin", + "translation_key": "entity.minecraft.zombified_piglin", + "fields": [], + "attributes": [ + { + "id": 9, + "name": "generic.armor_toughness", + "base_value": 0.0 + }, + { + "id": 6, + "name": "generic.attack_knockback", + "base_value": 0.0 + }, + { + "id": 2, + "name": "generic.knockback_resistance", + "base_value": 0.0 + }, + { + "id": 11, + "name": "zombie.spawn_reinforcements", + "base_value": 0.0 + }, + { + "id": 8, + "name": "generic.armor", + "base_value": 2.0 + }, + { + "id": 5, + "name": "generic.attack_damage", + "base_value": 5.0 + }, + { + "id": 1, + "name": "generic.follow_range", + "base_value": 35.0 + }, + { + "id": 3, + "name": "generic.movement_speed", + "base_value": 0.23000000417232513 + }, + { + "id": 0, + "name": "generic.max_health", + "base_value": 20.0 + } + ], + "default_bounding_box": { + "size_x": 0.6000000238418579, + "size_y": 1.9500000476837158, + "size_z": 0.6000000238418579 + } + } +} \ No newline at end of file diff --git a/vendor/valence/crates/valence_entity/extracted/misc.json b/vendor/valence/crates/valence_entity/extracted/misc.json new file mode 100644 index 00000000..2ed38ea6 --- /dev/null +++ b/vendor/valence/crates/valence_entity/extracted/misc.json @@ -0,0 +1,551 @@ +{ + "entity_type": { + "allay": 0, + "area_effect_cloud": 1, + "armor_stand": 2, + "arrow": 3, + "axolotl": 4, + "bat": 5, + "bee": 6, + "blaze": 7, + "block_display": 8, + "boat": 9, + "camel": 10, + "cat": 11, + "cave_spider": 12, + "chest_boat": 13, + "chest_minecart": 14, + "chicken": 15, + "cod": 16, + "command_block_minecart": 17, + "cow": 18, + "creeper": 19, + "dolphin": 20, + "donkey": 21, + "dragon_fireball": 22, + "drowned": 23, + "egg": 24, + "elder_guardian": 25, + "end_crystal": 26, + "ender_dragon": 27, + "ender_pearl": 28, + "enderman": 29, + "endermite": 30, + "evoker": 31, + "evoker_fangs": 32, + "experience_bottle": 33, + "experience_orb": 34, + "eye_of_ender": 35, + "falling_block": 36, + "firework_rocket": 37, + "fox": 38, + "frog": 39, + "furnace_minecart": 40, + "ghast": 41, + "giant": 42, + "glow_item_frame": 43, + "glow_squid": 44, + "goat": 45, + "guardian": 46, + "hoglin": 47, + "hopper_minecart": 48, + "horse": 49, + "husk": 50, + "illusioner": 51, + "interaction": 52, + "iron_golem": 53, + "item": 54, + "item_display": 55, + "item_frame": 56, + "fireball": 57, + "leash_knot": 58, + "lightning_bolt": 59, + "llama": 60, + "llama_spit": 61, + "magma_cube": 62, + "marker": 63, + "minecart": 64, + "mooshroom": 65, + "mule": 66, + "ocelot": 67, + "painting": 68, + "panda": 69, + "parrot": 70, + "phantom": 71, + "pig": 72, + "piglin": 73, + "piglin_brute": 74, + "pillager": 75, + "polar_bear": 76, + "potion": 77, + "pufferfish": 78, + "rabbit": 79, + "ravager": 80, + "salmon": 81, + "sheep": 82, + "shulker": 83, + "shulker_bullet": 84, + "silverfish": 85, + "skeleton": 86, + "skeleton_horse": 87, + "slime": 88, + "small_fireball": 89, + "sniffer": 90, + "snow_golem": 91, + "snowball": 92, + "spawner_minecart": 93, + "spectral_arrow": 94, + "spider": 95, + "squid": 96, + "stray": 97, + "strider": 98, + "tadpole": 99, + "text_display": 100, + "tnt": 101, + "tnt_minecart": 102, + "trader_llama": 103, + "trident": 104, + "tropical_fish": 105, + "turtle": 106, + "vex": 107, + "villager": 108, + "vindicator": 109, + "wandering_trader": 110, + "warden": 111, + "witch": 112, + "wither": 113, + "wither_skeleton": 114, + "wither_skull": 115, + "wolf": 116, + "zoglin": 117, + "zombie": 118, + "zombie_horse": 119, + "zombie_villager": 120, + "zombified_piglin": 121, + "player": 122, + "fishing_bobber": 123 + }, + "entity_status": { + "add_sprinting_particles_or_reset_spawner_minecart_spawn_delay": 1, + "play_death_sound_or_add_projectile_hit_particles": 3, + "play_attack_sound": 4, + "stop_attack": 5, + "add_negative_player_reaction_particles": 6, + "add_positive_player_reaction_particles": 7, + "shake_off_water": 8, + "consume_item": 9, + "set_sheep_eat_grass_timer_or_prime_tnt_minecart": 10, + "look_at_villager": 11, + "add_villager_heart_particles": 12, + "add_villager_angry_particles": 13, + "add_villager_happy_particles": 14, + "add_witch_particles": 15, + "play_cure_zombie_villager_sound": 16, + "explode_firework_client": 17, + "add_breeding_particles": 18, + "reset_squid_thrust_timer": 19, + "play_spawn_effects": 20, + "play_guardian_attack_sound": 21, + "use_reduced_debug_info": 22, + "use_full_debug_info": 23, + "set_op_level_0": 24, + "set_op_level_1": 25, + "set_op_level_2": 26, + "set_op_level_3": 27, + "set_op_level_4": 28, + "block_with_shield": 29, + "break_shield": 30, + "pull_hooked_entity": 31, + "hit_armor_stand": 32, + "stop_looking_at_villager": 34, + "use_totem_of_undying": 35, + "add_dolphin_happy_villager_particles": 38, + "stun_ravager": 39, + "tame_ocelot_failed": 40, + "tame_ocelot_success": 41, + "add_splash_particles": 42, + "add_cloud_particles": 43, + "create_eating_particles": 45, + "add_portal_particles": 46, + "break_mainhand": 47, + "break_offhand": 48, + "break_head": 49, + "break_chest": 50, + "break_legs": 51, + "break_feet": 52, + "drip_honey": 53, + "drip_rich_honey": 54, + "swap_hands": 55, + "reset_wolf_shake": 56, + "prepare_ram": 58, + "finish_ram": 59, + "add_death_particles": 60, + "ears_twitch": 61, + "sonic_boom": 62, + "start_digging": 63 + }, + "entity_animation": { + "swing_main_hand": 0, + "wake_up": 2, + "swing_off_hand": 3, + "crit": 4, + "enchanted_hit": 5 + }, + "villager_type": { + "desert": 0, + "jungle": 1, + "plains": 2, + "savanna": 3, + "snow": 4, + "swamp": 5, + "taiga": 6 + }, + "villager_profession": { + "none": 0, + "armorer": 1, + "butcher": 2, + "cartographer": 3, + "cleric": 4, + "farmer": 5, + "fisherman": 6, + "fletcher": 7, + "leatherworker": 8, + "librarian": 9, + "mason": 10, + "nitwit": 11, + "shepherd": 12, + "toolsmith": 13, + "weaponsmith": 14 + }, + "cat_variant": { + "tabby": 0, + "black": 1, + "red": 2, + "siamese": 3, + "british_shorthair": 4, + "calico": 5, + "persian": 6, + "ragdoll": 7, + "white": 8, + "jellie": 9, + "all_black": 10 + }, + "frog_variant": { + "temperate": 0, + "warm": 1, + "cold": 2 + }, + "painting_variant": { + "kebab": { + "id": 0, + "width": 16, + "height": 16 + }, + "aztec": { + "id": 1, + "width": 16, + "height": 16 + }, + "alban": { + "id": 2, + "width": 16, + "height": 16 + }, + "aztec2": { + "id": 3, + "width": 16, + "height": 16 + }, + "bomb": { + "id": 4, + "width": 16, + "height": 16 + }, + "plant": { + "id": 5, + "width": 16, + "height": 16 + }, + "wasteland": { + "id": 6, + "width": 16, + "height": 16 + }, + "pool": { + "id": 7, + "width": 32, + "height": 16 + }, + "courbet": { + "id": 8, + "width": 32, + "height": 16 + }, + "sea": { + "id": 9, + "width": 32, + "height": 16 + }, + "sunset": { + "id": 10, + "width": 32, + "height": 16 + }, + "creebet": { + "id": 11, + "width": 32, + "height": 16 + }, + "wanderer": { + "id": 12, + "width": 16, + "height": 32 + }, + "graham": { + "id": 13, + "width": 16, + "height": 32 + }, + "match": { + "id": 14, + "width": 32, + "height": 32 + }, + "bust": { + "id": 15, + "width": 32, + "height": 32 + }, + "stage": { + "id": 16, + "width": 32, + "height": 32 + }, + "void": { + "id": 17, + "width": 32, + "height": 32 + }, + "skull_and_roses": { + "id": 18, + "width": 32, + "height": 32 + }, + "wither": { + "id": 19, + "width": 32, + "height": 32 + }, + "fighters": { + "id": 20, + "width": 64, + "height": 32 + }, + "pointer": { + "id": 21, + "width": 64, + "height": 64 + }, + "pigscene": { + "id": 22, + "width": 64, + "height": 64 + }, + "burning_skull": { + "id": 23, + "width": 64, + "height": 64 + }, + "skeleton": { + "id": 24, + "width": 64, + "height": 48 + }, + "earth": { + "id": 25, + "width": 32, + "height": 32 + }, + "wind": { + "id": 26, + "width": 32, + "height": 32 + }, + "water": { + "id": 27, + "width": 32, + "height": 32 + }, + "fire": { + "id": 28, + "width": 32, + "height": 32 + }, + "donkey_kong": { + "id": 29, + "width": 64, + "height": 48 + } + }, + "direction": { + "down": 0, + "up": 1, + "north": 2, + "south": 3, + "west": 4, + "east": 5 + }, + "entity_pose": { + "standing": 0, + "fall_flying": 1, + "sleeping": 2, + "swimming": 3, + "spin_attack": 4, + "crouching": 5, + "long_jumping": 6, + "dying": 7, + "croaking": 8, + "using_tongue": 9, + "sitting": 10, + "roaring": 11, + "sniffing": 12, + "emerging": 13, + "digging": 14 + }, + "particle_type": { + "ambient_entity_effect": 0, + "angry_villager": 1, + "block": 2, + "block_marker": 3, + "bubble": 4, + "cloud": 5, + "crit": 6, + "damage_indicator": 7, + "dragon_breath": 8, + "dripping_lava": 9, + "falling_lava": 10, + "landing_lava": 11, + "dripping_water": 12, + "falling_water": 13, + "dust": 14, + "dust_color_transition": 15, + "effect": 16, + "elder_guardian": 17, + "enchanted_hit": 18, + "enchant": 19, + "end_rod": 20, + "entity_effect": 21, + "explosion_emitter": 22, + "explosion": 23, + "sonic_boom": 24, + "falling_dust": 25, + "firework": 26, + "fishing": 27, + "flame": 28, + "cherry_leaves": 29, + "sculk_soul": 30, + "sculk_charge": 31, + "sculk_charge_pop": 32, + "soul_fire_flame": 33, + "soul": 34, + "flash": 35, + "happy_villager": 36, + "composter": 37, + "heart": 38, + "instant_effect": 39, + "item": 40, + "vibration": 41, + "item_slime": 42, + "item_snowball": 43, + "large_smoke": 44, + "lava": 45, + "mycelium": 46, + "note": 47, + "poof": 48, + "portal": 49, + "rain": 50, + "smoke": 51, + "sneeze": 52, + "spit": 53, + "squid_ink": 54, + "sweep_attack": 55, + "totem_of_undying": 56, + "underwater": 57, + "splash": 58, + "witch": 59, + "bubble_pop": 60, + "current_down": 61, + "bubble_column_up": 62, + "nautilus": 63, + "dolphin": 64, + "campfire_cosy_smoke": 65, + "campfire_signal_smoke": 66, + "dripping_honey": 67, + "falling_honey": 68, + "landing_honey": 69, + "falling_nectar": 70, + "falling_spore_blossom": 71, + "ash": 72, + "crimson_spore": 73, + "warped_spore": 74, + "spore_blossom_air": 75, + "dripping_obsidian_tear": 76, + "falling_obsidian_tear": 77, + "landing_obsidian_tear": 78, + "reverse_portal": 79, + "white_ash": 80, + "small_flame": 81, + "snowflake": 82, + "dripping_dripstone_lava": 83, + "falling_dripstone_lava": 84, + "dripping_dripstone_water": 85, + "falling_dripstone_water": 86, + "glow_squid_ink": 87, + "glow": 88, + "wax_on": 89, + "wax_off": 90, + "electric_spark": 91, + "scrape": 92, + "shriek": 93, + "egg_crack": 94 + }, + "sniffer_state": { + "idling": 0, + "feeling_happy": 1, + "scenting": 2, + "sniffing": 3, + "searching": 4, + "digging": 5, + "rising": 6 + }, + "tracked_data_handler": { + "byte": 0, + "integer": 1, + "long": 2, + "float": 3, + "string": 4, + "text_component": 5, + "optional_text_component": 6, + "item_stack": 7, + "block_state": 14, + "optional_block_state": 15, + "boolean": 8, + "particle": 17, + "rotation": 9, + "block_pos": 10, + "optional_block_pos": 11, + "facing": 12, + "optional_uuid": 13, + "optional_global_pos": 23, + "nbt_compound": 16, + "villager_data": 18, + "optional_int": 19, + "entity_pose": 20, + "cat_variant": 21, + "frog_variant": 22, + "painting_variant": 24, + "sniffer_state": 25, + "vector3f": 26, + "quaternionf": 27 + } +} \ No newline at end of file diff --git a/vendor/valence/crates/valence_entity/src/active_status_effects.rs b/vendor/valence/crates/valence_entity/src/active_status_effects.rs new file mode 100644 index 00000000..2bb5507f --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/active_status_effects.rs @@ -0,0 +1,525 @@ +use bevy_ecs::prelude::*; +use indexmap::IndexMap; +use valence_protocol::status_effects::StatusEffect; + +/// Represents a change in the [`ActiveStatusEffects`] of an [`Entity`]. +#[derive(Debug)] +enum StatusEffectChange { + Apply(ActiveStatusEffect), + Replace(ActiveStatusEffect), + Remove(StatusEffect), + RemoveAll, + /// **For internal use only.** + #[doc(hidden)] + Expire(StatusEffect), +} + +/// The result of a duration calculation for a status effect. +pub enum DurationResult { + /// There are no effects of the given type. + NoEffects, + /// The effect has an infinite duration. + Infinite, + /// The effect has a finite duration, represented as an integer number of + /// ticks. + Finite(i32), +} + +/// [`Component`] that stores the [`ActiveStatusEffect`]s of an [`Entity`]. +#[derive(Component, Default, Debug)] +pub struct ActiveStatusEffects { + /// vec is always sorted in descending order of amplifier and ascending + /// order of duration. + current_effects: IndexMap>, + changes: Vec, +} + +// public API +impl ActiveStatusEffects { + /// Applies a new [`ActiveStatusEffect`]. + /// + /// If the [`ActiveStatusEffect`] is already active: + /// 1. if the new effect is the same as the old one and its duration is + /// longer, it replaces the old effect. Otherwise, it does nothing. + /// 2. if the new effect is stronger than the old one: + /// a. if the new effect's duration is longer, it replaces the old effect. + /// b. if the new effect's duration is shorter, it overrides the old + /// 3. if the new effect is weaker than the old one and if the new effect's + /// duration is longer, it will be overridden by the old effect until the + /// old effect's duration is over. + pub fn apply(&mut self, effect: ActiveStatusEffect) { + self.changes.push(StatusEffectChange::Apply(effect)); + } + + /// Replace an existing [`ActiveStatusEffect`]. + pub fn replace(&mut self, effect: ActiveStatusEffect) { + self.changes.push(StatusEffectChange::Replace(effect)); + } + + /// Removes an [`ActiveStatusEffect`]. + pub fn remove(&mut self, effect: StatusEffect) { + self.changes.push(StatusEffectChange::Remove(effect)); + } + + /// Removes all [`ActiveStatusEffect`]s. + pub fn remove_all(&mut self) { + self.changes.push(StatusEffectChange::RemoveAll); + } + + /// Returns true if there are no effects of the given type. + pub fn no_effect(&self, effect: StatusEffect) -> bool { + self.current_effects + .get(&effect) + .is_none_or(|effects| effects.is_empty()) + } + + /// Returns true if there is an effect of the given type. + pub fn has_effect(&self, effect: StatusEffect) -> bool { + self.current_effects + .get(&effect) + .is_some_and(|effects| !effects.is_empty()) + } + + /// Returns true if there are no effects. + pub fn no_effects(&self) -> bool { + self.current_effects.is_empty() + } + + /// Returns true if there are any effects. + pub fn has_effects(&self) -> bool { + !self.current_effects.is_empty() + } + + /// Returns the maximum duration of the given effect. + pub fn max_duration(&self, effect: StatusEffect) -> DurationResult { + let effects = self.current_effects.get(&effect); + + match effects { + None => DurationResult::NoEffects, + Some(effects) => { + if let Some(effect) = effects.last() { + match effect.remaining_duration() { + None => DurationResult::Infinite, + Some(duration) => DurationResult::Finite(duration), + } + } else { + DurationResult::NoEffects + } + } + } + } + + /// Gets the current effect of the given type. + pub fn get_current_effect(&self, effect: StatusEffect) -> Option<&ActiveStatusEffect> { + self.current_effects + .get(&effect) + .and_then(|effects| effects.first()) + } + + /// Gets all the effects of the given type. + pub fn get_all_effect(&self, effect: StatusEffect) -> Option<&Vec> { + self.current_effects.get(&effect) + } + + /// Gets all the current effects. + pub fn get_current_effects(&self) -> Vec<&ActiveStatusEffect> { + self.current_effects + .values() + .filter_map(|effects| effects.first()) + .collect() + } + + /// Gets all the effects. + pub fn get_all_effects(&self) -> &IndexMap> { + &self.current_effects + } +} + +// internal methods +impl ActiveStatusEffects { + /// Applies an effect. + /// + /// The vec must always be sorted in descending order of amplifier and + /// ascending order of duration. + /// + /// Returns true if the effect was applied. + fn apply_effect(&mut self, effect: ActiveStatusEffect) -> bool { + let effects = self + .current_effects + .entry(effect.status_effect()) + .or_default(); + + let duration = effect.remaining_duration(); + let amplifier = effect.amplifier(); + + if let Some(index) = effects.iter().position(|e| e.amplifier() <= amplifier) { + // Found an effect with the same or a lower amplifier. + + let active_status_effect = &effects[index]; + + if active_status_effect.remaining_duration() < duration + || active_status_effect.amplifier() < amplifier + { + // if its duration is shorter or its amplifier is lower, override it. + effects[index] = effect; + + // Remove effects after the current one that have a lower + // duration. + let mut remaining_effects = effects.split_off(index + 1); + remaining_effects.retain(|e| e.remaining_duration() >= duration); + effects.append(&mut remaining_effects); + true + } else if active_status_effect.remaining_duration() > duration + && active_status_effect.amplifier() < amplifier + { + // if its duration is longer and its amplifier is lower, insert + // the new effect before it. + effects.insert(index, effect); + true + } else { + // if its duration is longer and its amplifier is higher, do + // nothing. + false + } + } else { + // Found no effect with an equal or lower amplifier. + // This means all effects have a higher amplifier or the vec is + // empty. + + if let Some(last) = effects.last() { + // There is at least one effect with a higher amplifier. + if last.remaining_duration() < effect.remaining_duration() { + // if its duration is shorter, we can insert it at the end. + effects.push(effect); + true + } else { + // if its duration is longer, do nothing. + false + } + } else { + // The vec is empty. + effects.push(effect); + true + } + } + } + + /// Replaces an effect. + fn replace_effect(&mut self, effect: ActiveStatusEffect) { + self.current_effects + .insert(effect.status_effect(), vec![effect]); + } + + /// Removes an effect. + fn remove_effect(&mut self, effect: StatusEffect) { + self.current_effects.swap_remove(&effect); + } + + /// Removes all effects. + fn remove_all_effects(&mut self) { + self.current_effects.clear(); + } + + /// Removes the strongest effect of the given type, i.e., the first effect + fn remove_strongest_effect(&mut self, effect: StatusEffect) { + if let Some(effects) = self.current_effects.get_mut(&effect) { + effects.remove(0); + } + } + + /// **For internal use only.** + /// + /// Increments the active tick of all effects by a tick. + #[doc(hidden)] + pub fn increment_active_ticks(&mut self) { + for effects in self.current_effects.values_mut() { + for effect in effects.iter_mut() { + effect.increment_active_ticks(); + + if effect.expired() { + self.changes + .push(StatusEffectChange::Expire(effect.status_effect())); + } + } + } + } + + /// **For internal use only.** + /// + /// Applies all the changes. + /// + /// Returns a [`IndexMap`] of [`StatusEffect`]s that were updated or removed + /// and their previous values. + #[doc(hidden)] + pub fn apply_changes(&mut self) -> IndexMap> { + let current = self.current_effects.clone(); + let find_current = |effect: StatusEffect| { + current + .iter() + .find(|e| *e.0 == effect) + .map(|e| e.1.first().cloned())? + }; + let mut updated_effects = IndexMap::new(); + + for change in std::mem::take(&mut self.changes) { + match change { + StatusEffectChange::Apply(effect) => { + let value = effect.status_effect(); + if self.apply_effect(effect) { + updated_effects + .entry(value) + .or_insert_with(|| find_current(value)); + } + } + StatusEffectChange::Replace(effect) => { + let value = effect.status_effect(); + updated_effects + .entry(value) + .or_insert_with(|| find_current(value)); + self.replace_effect(effect); + } + StatusEffectChange::Remove(effect) => { + self.remove_effect(effect); + updated_effects.insert(effect, find_current(effect)); + } + StatusEffectChange::RemoveAll => { + self.remove_all_effects(); + for (status, effects) in current.iter() { + if let Some(effect) = effects.first() { + updated_effects.insert(*status, Some(effect.clone())); + } + } + } + StatusEffectChange::Expire(effect) => { + self.remove_strongest_effect(effect); + updated_effects.insert(effect, find_current(effect)); + } + } + } + + updated_effects + } +} + +/// Represents an active status effect. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] +pub struct ActiveStatusEffect { + effect: StatusEffect, + /// # Default Value + /// 0 + amplifier: u8, + /// The initial duration of the effect in ticks. + /// If `None`, the effect is infinite. + /// + /// # Default Value + /// Some(600) (30 seconds) + initial_duration: Option, + /// The amount of ticks the effect has been active. + /// + /// # Default Value + /// 0 + active_ticks: i32, + /// # Default Value + /// false + ambient: bool, + /// # Default Value + /// true + show_particles: bool, + /// # Default Value + /// true + show_icon: bool, +} + +impl ActiveStatusEffect { + /// Creates a new [`ActiveStatusEffect`]. + pub fn from_effect(effect: StatusEffect) -> Self { + Self { + effect, + amplifier: 0, + initial_duration: Some(600), + active_ticks: 0, + ambient: false, + show_particles: true, + show_icon: true, + } + } + + /// Sets the amplifier of the [`ActiveStatusEffect`]. + pub fn with_amplifier(mut self, amplifier: u8) -> Self { + self.amplifier = amplifier; + self + } + + /// Sets the duration of the [`ActiveStatusEffect`] in ticks. + pub fn with_duration(mut self, duration: i32) -> Self { + self.initial_duration = Some(duration); + self + } + + /// Sets the duration of the [`ActiveStatusEffect`] in seconds. + pub fn with_duration_seconds(mut self, duration: f32) -> Self { + self.initial_duration = Some((duration * 20.0).round() as i32); + self + } + + /// Sets the duration of the [`ActiveStatusEffect`] to infinite. + pub fn with_infinite(mut self) -> Self { + self.initial_duration = None; + self + } + + /// Sets whether the [`ActiveStatusEffect`] is ambient. + pub fn with_ambient(mut self, ambient: bool) -> Self { + self.ambient = ambient; + self + } + + /// Sets whether the [`ActiveStatusEffect`] shows particles. + pub fn with_show_particles(mut self, show_particles: bool) -> Self { + self.show_particles = show_particles; + self + } + + /// Sets whether the [`ActiveStatusEffect`] shows an icon. + pub fn with_show_icon(mut self, show_icon: bool) -> Self { + self.show_icon = show_icon; + self + } + + /// Increments the active ticks of the [`ActiveStatusEffect`] by one. + pub fn increment_active_ticks(&mut self) { + self.active_ticks += 1; + } + + /// Returns the [`StatusEffect`] of the [`ActiveStatusEffect`]. + pub fn status_effect(&self) -> StatusEffect { + self.effect + } + + /// Returns the amplifier of the [`ActiveStatusEffect`]. + pub fn amplifier(&self) -> u8 { + self.amplifier + } + + /// Returns the initial duration of the [`ActiveStatusEffect`] in ticks. + /// Returns `None` if the [`ActiveStatusEffect`] is infinite. + pub fn initial_duration(&self) -> Option { + self.initial_duration + } + + /// Returns the remaining duration of the [`ActiveStatusEffect`] in ticks. + /// Returns `None` if the [`ActiveStatusEffect`] is infinite. + pub fn remaining_duration(&self) -> Option { + self.initial_duration + .map(|duration| duration - self.active_ticks) + } + + /// Returns the active ticks of the [`ActiveStatusEffect`]. + pub fn active_ticks(&self) -> i32 { + self.active_ticks + } + + /// Returns true if the [`ActiveStatusEffect`] is ambient. + pub fn ambient(&self) -> bool { + self.ambient + } + + /// Returns true if the [`ActiveStatusEffect`] shows particles. + pub fn show_particles(&self) -> bool { + self.show_particles + } + + /// Returns true if the [`ActiveStatusEffect`] shows an icon. + pub fn show_icon(&self) -> bool { + self.show_icon + } + + /// Returns true if the [`ActiveStatusEffect`] has expired or if it is + /// instant. + pub fn expired(&self) -> bool { + self.status_effect().instant() + || self + .remaining_duration() + .is_some_and(|duration| duration <= 0) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_apply_effect() { + let mut effects = ActiveStatusEffects::default(); + + let effect = ActiveStatusEffect::from_effect(StatusEffect::Speed).with_amplifier(1); + let effect2 = ActiveStatusEffect::from_effect(StatusEffect::Speed).with_amplifier(2); + + let effect3 = ActiveStatusEffect::from_effect(StatusEffect::Strength).with_amplifier(1); + let effect4 = ActiveStatusEffect::from_effect(StatusEffect::Strength).with_amplifier(2); + + effects.apply(effect.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Speed), + Some(&vec![effect.clone()]) + ); + + effects.apply(effect2.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Speed), + Some(&vec![effect2.clone()]) + ); + + effects.apply(effect3.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Strength), + Some(&vec![effect3.clone()]) + ); + + effects.apply(effect4.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Strength), + Some(&vec![effect4.clone()]) + ); + } + + #[test] + fn test_apply_effect_duration() { + let mut effects = ActiveStatusEffects::default(); + + let effect = ActiveStatusEffect::from_effect(StatusEffect::Speed) + .with_amplifier(1) + .with_duration(100); + let effect2 = ActiveStatusEffect::from_effect(StatusEffect::Speed) + .with_amplifier(1) + .with_duration(200); + let effect3 = ActiveStatusEffect::from_effect(StatusEffect::Speed) + .with_amplifier(0) + .with_duration(300); + + effects.apply(effect.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Speed), + Some(&vec![effect.clone()]) + ); + + effects.apply(effect2.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Speed), + Some(&vec![effect2.clone()]) + ); + + effects.apply(effect3.clone()); + effects.apply_changes(); + assert_eq!( + effects.get_all_effect(StatusEffect::Speed), + Some(&vec![effect2.clone(), effect3.clone()]) + ); + } +} diff --git a/vendor/valence/crates/valence_entity/src/attributes.rs b/vendor/valence/crates/valence_entity/src/attributes.rs new file mode 100644 index 00000000..0feece3d --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/attributes.rs @@ -0,0 +1,475 @@ +use std::collections::HashMap; + +use bevy_ecs::prelude::*; +use indexmap::IndexMap; +use uuid::Uuid; +pub use valence_generated::attributes::{EntityAttribute, EntityAttributeOperation}; +use valence_protocol::Ident; +use valence_protocol::packets::play::entity_attributes_s2c::*; + +/// An instance of an Entity Attribute. +#[derive(Component, Clone, PartialEq, Debug)] +pub struct EntityAttributeInstance { + /// The attribute. + attribute: EntityAttribute, + /// The base value of the attribute. + base_value: f64, + /// The add modifiers of the attribute. + add_modifiers: IndexMap, + /// The multiply base modifiers of the attribute. + multiply_base_modifiers: IndexMap, + /// The multiply total modifiers of the attribute. + multiply_total_modifiers: IndexMap, +} + +impl EntityAttributeInstance { + /// Creates a new instance of an Entity Attribute. + pub fn new(attribute: EntityAttribute) -> Self { + Self { + attribute, + base_value: attribute.default_value(), + add_modifiers: IndexMap::new(), + multiply_base_modifiers: IndexMap::new(), + multiply_total_modifiers: IndexMap::new(), + } + } + + /// Creates a new instance of an Entity Attribute with a value. + pub fn new_with_value(attribute: EntityAttribute, base_value: f64) -> Self { + Self { + attribute, + base_value, + add_modifiers: IndexMap::new(), + multiply_base_modifiers: IndexMap::new(), + multiply_total_modifiers: IndexMap::new(), + } + } + + /// Gets the attribute. + pub fn attribute(&self) -> EntityAttribute { + self.attribute + } + + /// Gets the base value of the attribute. + pub fn base_value(&self) -> f64 { + self.base_value + } + + /// Gets the computed value of the attribute. + pub fn compute_value(&self) -> f64 { + let mut value = self.base_value; + + // Increment value by modifier + for (_, modifier) in self.add_modifiers.iter() { + value += modifier; + } + + let v = value; + + // Increment value by modifier * v + for (_, modifier) in self.multiply_base_modifiers.iter() { + value += v * modifier; + } + + // Increment value by modifier * value + for (_, modifier) in self.multiply_total_modifiers.iter() { + value += value * modifier; + } + + value.clamp(self.attribute.min_value(), self.attribute.max_value()) + } + + /// Sets an add modifier. + /// + /// If the modifier already exists, it will be overwritten. + /// + /// Returns a mutable reference to self. + pub fn with_add_modifier(&mut self, uuid: Uuid, modifier: f64) -> &mut Self { + self.add_modifiers.insert(uuid, modifier); + self + } + + /// Sets a multiply base modifier. + /// + /// If the modifier already exists, it will be overwritten. + /// + /// Returns a mutable reference to self. + pub fn with_multiply_base_modifier(&mut self, uuid: Uuid, modifier: f64) -> &mut Self { + self.multiply_base_modifiers.insert(uuid, modifier); + self + } + + /// Sets a multiply total modifier. + /// + /// If the modifier already exists, it will be overwritten. + /// + /// Returns a mutable reference to self. + pub fn with_multiply_total_modifier(&mut self, uuid: Uuid, modifier: f64) -> &mut Self { + self.multiply_total_modifiers.insert(uuid, modifier); + self + } + + /// Sets a value modifier based on the operation. + /// + /// If the modifier already exists, it will be overwritten. + /// + /// Returns a mutable reference to self. + pub fn with_modifier( + &mut self, + uuid: Uuid, + modifier: f64, + operation: EntityAttributeOperation, + ) -> &mut Self { + match operation { + EntityAttributeOperation::Add => self.with_add_modifier(uuid, modifier), + EntityAttributeOperation::MultiplyBase => { + self.with_multiply_base_modifier(uuid, modifier) + } + EntityAttributeOperation::MultiplyTotal => { + self.with_multiply_total_modifier(uuid, modifier) + } + } + } + + /// Removes a modifier. + pub fn remove_modifier(&mut self, uuid: Uuid) { + self.add_modifiers.swap_remove(&uuid); + self.multiply_base_modifiers.swap_remove(&uuid); + self.multiply_total_modifiers.swap_remove(&uuid); + } + + /// Clears all modifiers. + pub fn clear_modifiers(&mut self) { + self.add_modifiers.clear(); + self.multiply_base_modifiers.clear(); + self.multiply_total_modifiers.clear(); + } + + /// Checks if a modifier exists. + pub fn has_modifier(&self, uuid: Uuid) -> bool { + self.add_modifiers.contains_key(&uuid) + || self.multiply_base_modifiers.contains_key(&uuid) + || self.multiply_total_modifiers.contains_key(&uuid) + } + + /// Converts to a `TrackedEntityProperty` for use in the + /// `EntityAttributesS2c` packet. + pub(crate) fn to_property(&self) -> TrackedEntityProperty { + TrackedEntityProperty { + key: self.attribute.name().into(), + value: self.base_value(), + modifiers: self + .add_modifiers + .iter() + .map(|(&uuid, &amount)| TrackedAttributeModifier { + uuid, + amount, + operation: 0, + }) + .chain(self.multiply_base_modifiers.iter().map(|(&uuid, &amount)| { + TrackedAttributeModifier { + uuid, + amount, + operation: 1, + } + })) + .chain( + self.multiply_total_modifiers + .iter() + .map(|(&uuid, &amount)| TrackedAttributeModifier { + uuid, + amount, + operation: 2, + }), + ) + .collect(), + } + } +} + +/// The attributes of a Living Entity. +#[derive(Component, Clone, PartialEq, Debug, Default)] +pub struct EntityAttributes { + attributes: HashMap, + recently_changed: Vec, +} + +impl EntityAttributes { + /// Gets and clears the recently changed attributes. + pub(crate) fn take_recently_changed(&mut self) -> Vec { + std::mem::take(&mut self.recently_changed) + } + + /// Marks an attribute as recently changed. + pub(crate) fn mark_recently_changed(&mut self, attribute: EntityAttribute) { + if attribute.tracked() && !self.recently_changed.contains(&attribute) { + self.recently_changed.push(attribute); + } + } +} + +impl EntityAttributes { + /// Creates a new instance of EntityAttributes. + pub fn new() -> Self { + Self { + attributes: HashMap::new(), + recently_changed: Vec::new(), + } + } + + /// Gets the instance of an attribute. + pub fn get(&self, attribute: EntityAttribute) -> Option<&EntityAttributeInstance> { + self.attributes.get(&attribute) + } + + /// Gets the base value of an attribute. + /// + /// Returns [`None`] if the attribute does not exist. + pub fn get_base_value(&self, attribute: EntityAttribute) -> Option { + self.get(attribute).map(|instance| instance.base_value()) + } + + /// Gets the computed value of an attribute. + /// + /// Returns [`None`] if the attribute does not exist. + pub fn get_compute_value(&self, attribute: EntityAttribute) -> Option { + self.get(attribute).map(|instance| instance.compute_value()) + } + + /// Checks if an attribute exists. + pub fn has_attribute(&self, attribute: EntityAttribute) -> bool { + self.attributes.contains_key(&attribute) + } + + /// Creates an attribute if it does not exist. + pub fn create_attribute(&mut self, attribute: EntityAttribute) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)); + } + + /// Creates an attribute if it does not exist and sets its base value. + /// + /// Returns self. + /// + /// ## Note + /// + /// Only to be used in builder-like patterns. + pub(crate) fn with_attribute_and_value( + mut self, + attribute: EntityAttribute, + base_value: f64, + ) -> Self { + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new_with_value(attribute, base_value)) + .base_value = base_value; + self + } + + /// Sets the base value of an attribute. + pub fn set_base_value(&mut self, attribute: EntityAttribute, value: f64) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)) + .base_value = value; + } + + /// Sets an add modifier of an attribute. + pub fn set_add_modifier(&mut self, attribute: EntityAttribute, uuid: Uuid, modifier: f64) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)) + .with_add_modifier(uuid, modifier); + } + + /// Sets a multiply base modifier of an attribute. + pub fn set_multiply_base_modifier( + &mut self, + attribute: EntityAttribute, + uuid: Uuid, + modifier: f64, + ) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)) + .with_multiply_base_modifier(uuid, modifier); + } + + /// Sets a multiply total modifier of an attribute. + pub fn set_multiply_total_modifier( + &mut self, + attribute: EntityAttribute, + uuid: Uuid, + modifier: f64, + ) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)) + .with_multiply_total_modifier(uuid, modifier); + } + + /// Sets a value modifier of an attribute based on the operation. + pub fn set_modifier( + &mut self, + attribute: EntityAttribute, + uuid: Uuid, + modifier: f64, + operation: EntityAttributeOperation, + ) { + self.mark_recently_changed(attribute); + self.attributes + .entry(attribute) + .or_insert_with(|| EntityAttributeInstance::new(attribute)) + .with_modifier(uuid, modifier, operation); + } + + /// Removes a modifier of an attribute. + pub fn remove_modifier(&mut self, attribute: EntityAttribute, uuid: Uuid) { + self.mark_recently_changed(attribute); + if let Some(instance) = self.attributes.get_mut(&attribute) { + instance.remove_modifier(uuid); + } + } + + /// Clears all modifiers of an attribute. + pub fn clear_modifiers(&mut self, attribute: EntityAttribute) { + self.mark_recently_changed(attribute); + if let Some(instance) = self.attributes.get_mut(&attribute) { + instance.clear_modifiers(); + } + } + + /// Checks if a modifier exists on an attribute. + pub fn has_modifier(&self, attribute: EntityAttribute, uuid: Uuid) -> bool { + self.attributes + .get(&attribute) + .map(|instance| instance.has_modifier(uuid)) + .unwrap_or(false) + } + + /// **For internal use only.** + /// + /// Converts to a [`Vec`] of [`AttributeProperty`]s. + pub fn to_properties(&self) -> Vec { + self.attributes + .iter() + .filter(|(_, instance)| instance.attribute().tracked()) + .map(|(_, instance)| instance.to_property().to_property()) + .collect() + } +} + +/// Tracks the attributes of a Living Entity. +#[derive(Component, Clone, Debug, Default)] +pub struct TrackedEntityAttributes { + /// The attributes that have been modified. + modified: IndexMap, +} + +#[derive(Clone, Debug)] +pub(crate) struct TrackedEntityProperty { + key: String, + value: f64, + modifiers: Vec, +} + +#[derive(Clone, Debug)] +pub(crate) struct TrackedAttributeModifier { + uuid: Uuid, + amount: f64, + operation: u8, +} + +impl TrackedEntityProperty { + /// Converts to an [`AttributeProperty`]s. + fn to_property(&self) -> AttributeProperty { + AttributeProperty { + key: Ident::new(self.key.clone()).unwrap(), + value: self.value, + modifiers: self + .modifiers + .iter() + .map(|modifier| AttributeModifier { + uuid: modifier.uuid, + amount: modifier.amount, + operation: modifier.operation, + }) + .collect(), + } + } +} + +impl TrackedEntityAttributes { + /// Creates a new instance of TrackedEntityAttributes. + pub fn new() -> Self { + Self { + modified: IndexMap::new(), + } + } + + /// Marks an attribute as modified. + pub fn mark_modified(&mut self, attributes: &EntityAttributes, attribute: EntityAttribute) { + if let Some(instance) = attributes.get(attribute) { + self.modified.insert(attribute, instance.to_property()); + } + } + + /// Returns the properties turned into a [`Vec`] of [`AttributeProperty`]s. + pub fn get_properties(&self) -> Vec { + self.modified + .iter() + .map(|(_, property)| property.to_property()) + .collect() + } + + /// Clears the modified attributes. + pub fn clear(&mut self) { + self.modified.clear(); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_compute_value() { + let add_uuid = Uuid::new_v4(); + let mut attributes = EntityAttributes::new(); + attributes.set_base_value(EntityAttribute::GenericMaxHealth, 20.0); + attributes.set_add_modifier(EntityAttribute::GenericMaxHealth, add_uuid, 10.0); + attributes.set_multiply_base_modifier( + EntityAttribute::GenericMaxHealth, + Uuid::new_v4(), + 0.2, + ); + attributes.set_multiply_base_modifier( + EntityAttribute::GenericMaxHealth, + Uuid::new_v4(), + 0.2, + ); + attributes.set_multiply_total_modifier( + EntityAttribute::GenericMaxHealth, + Uuid::new_v4(), + 0.5, + ); + + assert_eq!( + attributes.get_compute_value(EntityAttribute::GenericMaxHealth), + Some(63.0) // ((20 + 10) * (1 + 0.2 + 0.2)) * (1 + 0.5) + ); + + attributes.remove_modifier(EntityAttribute::GenericMaxHealth, add_uuid); + + assert_eq!( + attributes.get_compute_value(EntityAttribute::GenericMaxHealth), + Some(42.0) // ((20) * (1 + 0.2 + 0.2)) * (1 + 0.5) + ); + } +} diff --git a/vendor/valence/crates/valence_entity/src/flags.rs b/vendor/valence/crates/valence_entity/src/flags.rs new file mode 100644 index 00000000..cb09e9ed --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/flags.rs @@ -0,0 +1,144 @@ +use super::*; + +// TODO: should `set_if_neq` behavior be the default behavior for setters? +macro_rules! flags { + ( + $( + $component:path { + $($flag:ident: $offset:literal),* $(,)? + } + )* + + ) => { + $( + impl $component { + $( + #[doc = "Gets the bit at offset "] + #[doc = stringify!($offset)] + #[doc = "."] + #[inline] + pub const fn $flag(&self) -> bool { + (self.0 >> $offset) & 1 == 1 + } + + paste! { + #[doc = "Sets the bit at offset "] + #[doc = stringify!($offset)] + #[doc = "."] + #[inline] + pub fn [< set_$flag >] (&mut self, $flag: bool) { + self.0 = (self.0 & !(1 << $offset)) | (($flag as i8) << $offset); + } + } + )* + } + )* + } +} + +flags! { + entity::Flags { + on_fire: 0, + sneaking: 1, + sprinting: 3, + swimming: 4, + invisible: 5, + glowing: 6, + fall_flying: 7, + } + persistent_projectile::ProjectileFlags { + critical: 0, + no_clip: 1, + } + living::LivingFlags { + using_item: 0, + off_hand_active: 1, + using_riptide: 2, + } + player::PlayerModelParts { + cape: 0, + jacket: 1, + left_sleeve: 2, + right_sleeve: 3, + left_pants_leg: 4, + right_pants_leg: 5, + hat: 6, + } + player::MainArm { + right: 0, + } + armor_stand::ArmorStandFlags { + small: 0, + show_arms: 1, + hide_base_plate: 2, + marker: 3, + } + mob::MobFlags { + ai_disabled: 0, + left_handed: 1, + attacking: 2, + } + bat::BatFlags { + hanging: 0, + } + abstract_horse::HorseFlags { + tamed: 1, + saddled: 2, + bred: 3, + eating_grass: 4, + angry: 5, + eating: 6, + } + fox::FoxFlags { + sitting: 0, + crouching: 2, + rolling_head: 3, + chasing: 4, + sleeping: 5, + walking: 6, + aggressive: 7, + } + panda::PandaFlags { + sneezing: 1, + playing: 2, + sitting: 3, + lying_on_back: 4, + } + tameable::TameableFlags { + sitting_pose: 0, + tamed: 2, + } + iron_golem::IronGolemFlags { + player_created: 0, + } + snow_golem::SnowGolemFlags { + has_pumpkin: 4, + } + blaze::BlazeFlags { + fire_active: 0, + } + vex::VexFlags { + charging: 0, + } + spider::SpiderFlags { + climbing_wall: 0, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn get_set_flags() { + let mut flags = entity::Flags(0); + + flags.set_on_fire(true); + let before = flags.clone(); + assert_ne!(flags.0, 0); + flags.set_on_fire(true); + assert_eq!(before, flags); + flags.set_on_fire(false); + assert_eq!(flags.0, 0); + } +} diff --git a/vendor/valence/crates/valence_entity/src/hitbox.rs b/vendor/valence/crates/valence_entity/src/hitbox.rs new file mode 100644 index 00000000..bbf9d54d --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/hitbox.rs @@ -0,0 +1,545 @@ +#![allow(clippy::type_complexity)] + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::Deref; +use valence_math::{Aabb, UVec3, Vec3Swizzles}; +use valence_protocol::Direction; + +use crate::*; + +#[derive(SystemSet, Clone, Copy, Debug, Hash, PartialEq, Eq)] +pub struct HitboxShapeUpdateSet; + +#[derive(SystemSet, Clone, Copy, Debug, Hash, PartialEq, Eq)] +pub struct HitboxComponentsAddSet; + +#[derive(SystemSet, Clone, Copy, Debug, Hash, PartialEq, Eq)] +pub struct HitboxUpdateSet; + +pub struct HitboxPlugin; + +#[derive(Resource)] +/// Settings for hitbox plugin +pub struct EntityHitboxSettings { + /// Controls if a plugin should add hitbox component on each created entity. + /// Otherwise you should add hitbox component by yourself in order to use + /// it. + pub add_hitbox_component: bool, +} + +impl Default for EntityHitboxSettings { + fn default() -> Self { + Self { + add_hitbox_component: true, + } + } +} + +impl Plugin for HitboxPlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .configure_sets(PreUpdate, HitboxShapeUpdateSet) + .add_systems( + PreUpdate, + ( + update_constant_hitbox, + update_warden_hitbox, + update_area_effect_cloud_hitbox, + update_armor_stand_hitbox, + update_passive_child_hitbox, + update_zombie_hitbox, + update_piglin_hitbox, + update_zoglin_hitbox, + update_player_hitbox, + update_item_frame_hitbox, + update_slime_hitbox, + update_painting_hitbox, + update_shulker_hitbox, + ), + ) + .configure_sets(PostUpdate, HitboxComponentsAddSet) + .add_systems( + PostUpdate, + add_hitbox_component.in_set(HitboxComponentsAddSet), + ) + .configure_sets(PreUpdate, HitboxUpdateSet.after(HitboxShapeUpdateSet)) + .add_systems(PreUpdate, update_hitbox.in_set(HitboxUpdateSet)); + } +} + +/// Size of hitbox. The only way to manipulate it without losing it on the next +/// tick is using a marker entity. Marker entity's hitbox is never updated. +#[derive(Component, Debug, PartialEq, Deref)] +pub struct HitboxShape(pub Aabb); + +/// Hitbox, aabb of which is calculated each tick using its position and +/// [`Hitbox`]. In order to change size of this hitbox you need to change +/// [`Hitbox`]. +#[derive(Component, Debug, Deref)] +pub struct Hitbox(Aabb); + +impl HitboxShape { + pub const ZERO: HitboxShape = HitboxShape(Aabb::ZERO); + + pub fn get(&self) -> Aabb { + self.0 + } + + pub(crate) fn centered(&mut self, size: DVec3) { + self.0 = Aabb::from_bottom_size(DVec3::ZERO, size); + } + + pub(crate) fn in_world(&self, pos: DVec3) -> Aabb { + self.0 + pos + } +} + +impl Hitbox { + pub fn get(&self) -> Aabb { + self.0 + } +} + +fn add_hitbox_component( + settings: Res, + mut commands: Commands, + query: Query<(Entity, &Position), Added>, + alt_query: Query<(Entity, &Position, &HitboxShape), Added>, +) { + if settings.add_hitbox_component { + for (entity, pos) in query.iter() { + commands + .entity(entity) + .insert(HitboxShape::ZERO) + .insert(Hitbox(HitboxShape::ZERO.in_world(pos.0))); + } + } else { + for (entity, pos, hitbox) in alt_query.iter() { + commands + .entity(entity) + .insert(Hitbox(hitbox.in_world(pos.0))); + } + } +} + +fn update_hitbox( + mut hitbox_query: Query< + (&mut Hitbox, &HitboxShape, &Position), + Or<(Changed, Changed)>, + >, +) { + for (mut in_world, hitbox, pos) in hitbox_query.iter_mut() { + in_world.0 = hitbox.in_world(pos.0); + } +} + +fn update_constant_hitbox( + mut hitbox_query: Query< + (&mut HitboxShape, &EntityKind), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, entity_kind) in hitbox_query.iter_mut() { + let size = match *entity_kind { + EntityKind::ALLAY => [0.6, 0.35, 0.6], + EntityKind::CHEST_BOAT | EntityKind::BOAT => [1.375, 0.5625, 1.375], + EntityKind::FROG => [0.5, 0.5, 0.5], + EntityKind::TADPOLE => [0.4, 0.3, 0.4], + EntityKind::SPECTRAL_ARROW | EntityKind::ARROW => [0.5, 0.5, 0.5], + EntityKind::AXOLOTL => [1.3, 0.6, 1.3], + EntityKind::BAT => [0.5, 0.9, 0.5], + EntityKind::BLAZE => [0.6, 1.8, 0.6], + EntityKind::CAT => [0.6, 0.7, 0.6], + EntityKind::CAVE_SPIDER => [0.7, 0.5, 0.7], + EntityKind::COD => [0.5, 0.3, 0.5], + EntityKind::CREEPER => [0.6, 1.7, 0.6], + EntityKind::DOLPHIN => [0.9, 0.6, 0.9], + EntityKind::DRAGON_FIREBALL => [1.0, 1.0, 1.0], + EntityKind::ELDER_GUARDIAN => [1.9975, 1.9975, 1.9975], + EntityKind::END_CRYSTAL => [2.0, 2.0, 2.0], + EntityKind::ENDER_DRAGON => [16.0, 8.0, 16.0], + EntityKind::ENDERMAN => [0.6, 2.9, 0.6], + EntityKind::ENDERMITE => [0.4, 0.3, 0.4], + EntityKind::EVOKER => [0.6, 1.95, 0.6], + EntityKind::EVOKER_FANGS => [0.5, 0.8, 0.5], + EntityKind::EXPERIENCE_ORB => [0.5, 0.5, 0.5], + EntityKind::EYE_OF_ENDER => [0.25, 0.25, 0.25], + EntityKind::FALLING_BLOCK => [0.98, 0.98, 0.98], + EntityKind::FIREWORK_ROCKET => [0.25, 0.25, 0.25], + EntityKind::GHAST => [4.0, 4.0, 4.0], + EntityKind::GIANT => [3.6, 12.0, 3.6], + EntityKind::GLOW_SQUID | EntityKind::SQUID => [0.8, 0.8, 0.8], + EntityKind::GUARDIAN => [0.85, 0.85, 0.85], + EntityKind::ILLUSIONER => [0.6, 1.95, 0.6], + EntityKind::IRON_GOLEM => [1.4, 2.7, 1.4], + EntityKind::ITEM => [0.25, 0.25, 0.25], + EntityKind::FIREBALL => [1.0, 1.0, 1.0], + EntityKind::LEASH_KNOT => [0.375, 0.5, 0.375], + EntityKind::LIGHTNING /* | EntityKind::MARKER - marker hitbox */ => [0.0; 3], + EntityKind::LLAMA_SPIT => [0.25, 0.25, 0.25], + EntityKind::MINECART + | EntityKind::CHEST_MINECART + | EntityKind::TNT_MINECART + | EntityKind::HOPPER_MINECART + | EntityKind::FURNACE_MINECART + | EntityKind::SPAWNER_MINECART + | EntityKind::COMMAND_BLOCK_MINECART => [0.98, 0.7, 0.98], + EntityKind::PARROT => [0.5, 0.9, 0.5], + EntityKind::PHANTOM => [0.9, 0.5, 0.9], + EntityKind::PIGLIN_BRUTE => [0.6, 1.95, 0.6], + EntityKind::PILLAGER => [0.6, 1.95, 0.6], + EntityKind::TNT => [0.98, 0.98, 0.98], + EntityKind::PUFFERFISH => [0.7, 0.7, 0.7], + EntityKind::RAVAGER => [1.95, 2.2, 1.95], + EntityKind::SALMON => [0.7, 0.4, 0.7], + EntityKind::SHULKER_BULLET => [0.3125, 0.3125, 0.3125], + EntityKind::SILVERFISH => [0.4, 0.3, 0.4], + EntityKind::SMALL_FIREBALL => [0.3125, 0.3125, 0.3125], + EntityKind::SNOW_GOLEM => [0.7, 1.9, 0.7], + EntityKind::SPIDER => [1.4, 0.9, 1.4], + EntityKind::STRAY => [0.6, 1.99, 0.6], + EntityKind::EGG => [0.25, 0.25, 0.25], + EntityKind::ENDER_PEARL => [0.25, 0.25, 0.25], + EntityKind::EXPERIENCE_BOTTLE => [0.25, 0.25, 0.25], + EntityKind::POTION => [0.25, 0.25, 0.25], + EntityKind::TRIDENT => [0.5, 0.5, 0.5], + EntityKind::TRADER_LLAMA => [0.9, 1.87, 0.9], + EntityKind::TROPICAL_FISH => [0.5, 0.4, 0.5], + EntityKind::VEX => [0.4, 0.8, 0.4], + EntityKind::VINDICATOR => [0.6, 1.95, 0.6], + EntityKind::WITHER => [0.9, 3.5, 0.9], + EntityKind::WITHER_SKELETON => [0.7, 2.4, 0.7], + EntityKind::WITHER_SKULL => [0.3125, 0.3125, 0.3125], + EntityKind::FISHING_BOBBER => [0.25, 0.25, 0.25], + _ => { + continue; + } + } + .into(); + hitbox.centered(size); + } +} + +fn update_warden_hitbox( + mut query: Query< + (&mut HitboxShape, &entity::Pose), + ( + Or<(Changed, Added)>, + With, + ), + >, +) { + for (mut hitbox, entity_pose) in query.iter_mut() { + hitbox.centered( + match entity_pose.0 { + Pose::Emerging | Pose::Digging => [0.9, 1.0, 0.9], + _ => [0.9, 2.9, 0.9], + } + .into(), + ); + } +} + +fn update_area_effect_cloud_hitbox( + mut query: Query< + (&mut HitboxShape, &area_effect_cloud::Radius), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, cloud_radius) in query.iter_mut() { + let diameter = cloud_radius.0 as f64 * 2.0; + hitbox.centered([diameter, 0.5, diameter].into()); + } +} + +fn update_armor_stand_hitbox( + mut query: Query< + (&mut HitboxShape, &armor_stand::ArmorStandFlags), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, stand_flags) in query.iter_mut() { + hitbox.centered( + if stand_flags.0 & 16 != 0 { + // Marker armor stand + [0.0; 3] + } else if stand_flags.0 & 1 != 0 { + // Small armor stand + [0.5, 0.9875, 0.5] + } else { + [0.5, 1.975, 0.5] + } + .into(), + ); + } +} + +fn child_hitbox(child: bool, v: DVec3) -> DVec3 { + if child { v / 2.0 } else { v } +} + +fn update_passive_child_hitbox( + mut query: Query< + (Entity, &mut HitboxShape, &EntityKind, &passive::Child), + Or<(Changed, Added)>, + >, + pose_query: Query<&entity::Pose>, +) { + for (entity, mut hitbox, entity_kind, child) in query.iter_mut() { + let big_s = match *entity_kind { + EntityKind::BEE => [0.7, 0.6, 0.7], + EntityKind::CAMEL => [1.7, 2.375, 1.7], + EntityKind::CHICKEN => [0.4, 0.7, 0.4], + EntityKind::DONKEY => [1.5, 1.39648, 1.5], + EntityKind::FOX => [0.6, 0.7, 0.6], + EntityKind::GOAT => { + if pose_query + .get(entity) + .is_ok_and(|v| v.0 == Pose::LongJumping) + { + [0.63, 0.91, 0.63] + } else { + [0.9, 1.3, 0.9] + } + } + EntityKind::HOGLIN => [1.39648, 1.4, 1.39648], + EntityKind::HORSE | EntityKind::SKELETON_HORSE | EntityKind::ZOMBIE_HORSE => { + [1.39648, 1.6, 1.39648] + } + EntityKind::LLAMA => [0.9, 1.87, 0.9], + EntityKind::MULE => [1.39648, 1.6, 1.39648], + EntityKind::MOOSHROOM => [0.9, 1.4, 0.9], + EntityKind::OCELOT => [0.6, 0.7, 0.6], + EntityKind::PANDA => [1.3, 1.25, 1.3], + EntityKind::PIG => [0.9, 0.9, 0.9], + EntityKind::POLAR_BEAR => [1.4, 1.4, 1.4], + EntityKind::RABBIT => [0.4, 0.5, 0.4], + EntityKind::SHEEP => [0.9, 1.3, 0.9], + EntityKind::TURTLE => { + hitbox.centered( + if child.0 { + [0.36, 0.12, 0.36] + } else { + [1.2, 0.4, 1.2] + } + .into(), + ); + continue; + } + EntityKind::VILLAGER => [0.6, 1.95, 0.6], + EntityKind::WOLF => [0.6, 0.85, 0.6], + _ => { + continue; + } + }; + hitbox.centered(child_hitbox(child.0, big_s.into())); + } +} + +fn update_zombie_hitbox( + mut query: Query< + (&mut HitboxShape, &zombie::Baby), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, baby) in query.iter_mut() { + hitbox.centered(child_hitbox(baby.0, [0.6, 1.95, 0.6].into())); + } +} + +fn update_piglin_hitbox( + mut query: Query< + (&mut HitboxShape, &piglin::Baby), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, baby) in query.iter_mut() { + hitbox.centered(child_hitbox(baby.0, [0.6, 1.95, 0.6].into())); + } +} + +fn update_zoglin_hitbox( + mut query: Query< + (&mut HitboxShape, &zoglin::Baby), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, baby) in query.iter_mut() { + hitbox.centered(child_hitbox(baby.0, [1.39648, 1.4, 1.39648].into())); + } +} + +fn update_player_hitbox( + mut query: Query< + (&mut HitboxShape, &entity::Pose), + ( + Or<(Changed, Added)>, + With, + ), + >, +) { + for (mut hitbox, pose) in query.iter_mut() { + hitbox.centered( + match pose.0 { + Pose::Sleeping | Pose::Dying => [0.2, 0.2, 0.2], + Pose::FallFlying | Pose::Swimming | Pose::SpinAttack => [0.6, 0.6, 0.6], + Pose::Sneaking => [0.6, 1.5, 0.6], + _ => [0.6, 1.8, 0.6], + } + .into(), + ); + } +} + +fn update_item_frame_hitbox( + mut query: Query< + (&mut HitboxShape, &item_frame::Rotation), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, rotation) in query.iter_mut() { + let mut center_pos = DVec3::splat(0.5); + + const A: f64 = 0.46875; + + match rotation.0 { + 0 => center_pos.y += A, + 1 => center_pos.y -= A, + 2 => center_pos.z += A, + 3 => center_pos.z -= A, + 4 => center_pos.x += A, + 5 => center_pos.x -= A, + _ => center_pos.y -= A, + } + + const BOUNDS23: DVec3 = DVec3::new(0.375, 0.375, 0.03125); + + let bounds = match rotation.0 { + 2 | 3 => BOUNDS23, + 4 | 5 => BOUNDS23.zxy(), + _ => BOUNDS23.zxy(), + }; + + hitbox.0 = Aabb::new(center_pos - bounds, center_pos + bounds); + } +} + +fn update_slime_hitbox( + mut query: Query< + (&mut HitboxShape, &slime::SlimeSize), + Or<(Changed, Added)>, + >, +) { + for (mut hitbox, slime_size) in query.iter_mut() { + let s = 0.5202 * slime_size.0 as f64; + hitbox.centered([s, s, s].into()); + } +} + +fn update_painting_hitbox( + mut query: Query< + (&mut HitboxShape, &painting::Variant, &Look), + Or<( + Changed, + Changed, + Added, + )>, + >, +) { + for (mut hitbox, painting_variant, look) in query.iter_mut() { + let bounds: UVec3 = match painting_variant.0 { + PaintingKind::Kebab => [1, 1, 1], + PaintingKind::Aztec => [1, 1, 1], + PaintingKind::Alban => [1, 1, 1], + PaintingKind::Aztec2 => [1, 1, 1], + PaintingKind::Bomb => [1, 1, 1], + PaintingKind::Plant => [1, 1, 1], + PaintingKind::Wasteland => [1, 1, 1], + PaintingKind::Pool => [2, 1, 2], + PaintingKind::Courbet => [2, 1, 2], + PaintingKind::Sea => [2, 1, 2], + PaintingKind::Sunset => [2, 1, 2], + PaintingKind::Creebet => [2, 1, 2], + PaintingKind::Wanderer => [1, 2, 1], + PaintingKind::Graham => [1, 2, 1], + PaintingKind::Match => [2, 2, 2], + PaintingKind::Bust => [2, 2, 2], + PaintingKind::Stage => [2, 2, 2], + PaintingKind::Void => [2, 2, 2], + PaintingKind::SkullAndRoses => [2, 2, 2], + PaintingKind::Wither => [2, 2, 2], + PaintingKind::Fighters => [4, 2, 4], + PaintingKind::Pointer => [4, 4, 4], + PaintingKind::Pigscene => [4, 4, 4], + PaintingKind::BurningSkull => [4, 4, 4], + PaintingKind::Skeleton => [4, 3, 4], + PaintingKind::Earth => [2, 2, 2], + PaintingKind::Wind => [2, 2, 2], + PaintingKind::Water => [2, 2, 2], + PaintingKind::Fire => [2, 2, 2], + PaintingKind::DonkeyKong => [4, 3, 4], + } + .into(); + + let mut center_pos = DVec3::splat(0.5); + + let (facing_x, facing_z, cc_facing_x, cc_facing_z) = + match ((look.yaw + 45.0).rem_euclid(360.0) / 90.0) as u8 { + 0 => (0, 1, 1, 0), // South + 1 => (-1, 0, 0, 1), // West + 2 => (0, -1, -1, 0), // North + _ => (1, 0, 0, -1), // East + }; + + center_pos.x -= facing_x as f64 * 0.46875; + center_pos.z -= facing_z as f64 * 0.46875; + + center_pos.x += cc_facing_x as f64 * if bounds.x % 2 == 0 { 0.5 } else { 0.0 }; + center_pos.y += if bounds.y % 2 == 0 { 0.5 } else { 0.0 }; + center_pos.z += cc_facing_z as f64 * if bounds.z % 2 == 0 { 0.5 } else { 0.0 }; + + let bounds = match (facing_x, facing_z) { + (1, 0) | (-1, 0) => DVec3::new(0.0625, bounds.y as f64, bounds.z as f64), + _ => DVec3::new(bounds.x as f64, bounds.y as f64, 0.0625), + }; + + hitbox.0 = Aabb::new(center_pos - bounds / 2.0, center_pos + bounds / 2.0); + } +} + +fn update_shulker_hitbox( + mut query: Query< + ( + &mut HitboxShape, + &shulker::PeekAmount, + &shulker::AttachedFace, + ), + Or<( + Changed, + Changed, + Added, + )>, + >, +) { + use std::f64::consts::PI; + + for (mut hitbox, peek_amount, attached_face) in query.iter_mut() { + let pos = DVec3::splat(0.5); + let mut min = pos - 0.5; + let mut max = pos + 0.5; + + let peek = 0.5 - f64::cos(peek_amount.0 as f64 * 0.01 * PI) * 0.5; + + match attached_face.0 { + Direction::Down => max.y += peek, + Direction::Up => min.y -= peek, + Direction::North => max.z += peek, + Direction::South => min.z -= peek, + Direction::West => max.x += peek, + Direction::East => min.x -= peek, + } + + hitbox.0 = Aabb::new(min, max); + } +} diff --git a/vendor/valence/crates/valence_entity/src/lib.rs b/vendor/valence/crates/valence_entity/src/lib.rs new file mode 100644 index 00000000..733649d9 --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/lib.rs @@ -0,0 +1,712 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::type_complexity)] + +pub mod active_status_effects; +pub mod attributes; +mod flags; +pub mod hitbox; +pub mod manager; +pub mod query; +pub mod tracked_data; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +pub use manager::EntityManager; +use paste::paste; +use tracing::warn; +use tracked_data::TrackedData; +use valence_math::{DVec3, Vec3}; +use valence_protocol::{Decode, DecodeBytesAuto, Encode, VarInt}; +use valence_server_common::{Despawned, UniqueId}; + +use crate::attributes::TrackedEntityAttributes; + +include!(concat!(env!("OUT_DIR"), "/entity.rs")); + +pub struct EntityPlugin; + +/// When new Minecraft entities are initialized and added to +/// [`EntityManager`]. +/// +/// Systems that need Minecraft entities to be in a valid state should run +/// _after_ this set. +/// +/// This set lives in [`PostUpdate`]. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct InitEntitiesSet; + +/// When tracked data is written to the entity's [`TrackedData`] component. +/// Systems that modify tracked data should run _before_ this. +/// +/// This set lives in [`PostUpdate`]. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct UpdateTrackedDataSet; + +/// When entities are updated and changes from the current tick are cleared. +/// Systems that need to observe changes to entities (Such as the difference +/// between [`Position`] and [`OldPosition`]) should run _before_ this set (and +/// probably after [`InitEntitiesSet`]). +/// +/// This set lives in [`PostUpdate`]. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct ClearEntityChangesSet; + +impl Plugin for EntityPlugin { + fn build(&self, app: &mut App) { + app.insert_resource(EntityManager::new()) + .configure_sets( + PostUpdate, + ( + InitEntitiesSet, + UpdateTrackedDataSet, + ClearEntityChangesSet + .after(InitEntitiesSet) + .after(UpdateTrackedDataSet), + ), + ) + .add_systems( + PostUpdate, + (remove_despawned_from_manager, init_entities) + .chain() + .in_set(InitEntitiesSet), + ) + .add_systems( + PostUpdate, + ( + clear_status_changes, + clear_animation_changes, + clear_tracked_data_changes, + clear_tracked_attributes_changes, + update_old_position, + update_old_layer_id, + ) + .in_set(ClearEntityChangesSet), + ); + + add_tracked_data_systems(app); + } +} + +fn update_old_position(mut query: Query<(&Position, &mut OldPosition)>) { + for (pos, mut old_pos) in &mut query { + old_pos.0 = pos.0; + } +} + +fn update_old_layer_id(mut query: Query<(&EntityLayerId, &mut OldEntityLayerId)>) { + for (loc, mut old_loc) in &mut query { + old_loc.0 = loc.0; + } +} + +fn remove_despawned_from_manager( + entities: Query<&EntityId, (With, With)>, + mut manager: ResMut, +) { + for id in &entities { + manager.id_to_entity.remove(&id.0); + } +} + +fn init_entities( + mut entities: Query< + (Entity, &mut EntityId, &Position, &mut OldPosition), + (Added, Without), + >, + mut manager: ResMut, +) { + for (entity, mut id, pos, mut old_pos) in &mut entities { + *old_pos = OldPosition::new(pos.0); + + if *id == EntityId::default() { + *id = manager.next_id(); + } + + if let Some(conflict) = manager.id_to_entity.insert(id.0, entity) { + warn!( + "entity {entity:?} has conflicting entity ID of {} with entity {conflict:?}", + id.0 + ); + } + } +} + +fn clear_status_changes(mut statuses: Query<&mut EntityStatuses, Changed>) { + for mut statuses in &mut statuses { + statuses.0 = 0; + } +} + +fn clear_animation_changes( + mut animations: Query<&mut EntityAnimations, Changed>, +) { + for mut animations in &mut animations { + animations.0 = 0; + } +} + +fn clear_tracked_data_changes(mut tracked_data: Query<&mut TrackedData, Changed>) { + for mut tracked_data in &mut tracked_data { + tracked_data.clear_update_values(); + } +} + +fn clear_tracked_attributes_changes( + mut attributes: Query<&mut TrackedEntityAttributes, Changed>, +) { + for mut attributes in &mut attributes { + attributes.clear(); + } +} + +/// Contains the entity layer an entity is on. +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, Deref)] +pub struct EntityLayerId(pub Entity); + +impl Default for EntityLayerId { + fn default() -> Self { + Self(Entity::PLACEHOLDER) + } +} + +impl PartialEq for EntityLayerId { + fn eq(&self, other: &OldEntityLayerId) -> bool { + self.0 == other.0 + } +} + +/// The value of [`EntityLayerId`] from the end of the previous tick. +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, Deref)] +pub struct OldEntityLayerId(Entity); + +impl OldEntityLayerId { + pub fn get(&self) -> Entity { + self.0 + } +} + +impl Default for OldEntityLayerId { + fn default() -> Self { + Self(Entity::PLACEHOLDER) + } +} + +impl PartialEq for OldEntityLayerId { + fn eq(&self, other: &EntityLayerId) -> bool { + self.0 == other.0 + } +} + +#[derive(Component, Copy, Clone, PartialEq, Default, Debug, Deref, DerefMut)] +pub struct Position(pub DVec3); + +impl Position { + pub fn new(pos: impl Into) -> Self { + Self(pos.into()) + } + + pub fn get(self) -> DVec3 { + self.0 + } + + pub fn set(&mut self, pos: impl Into) { + self.0 = pos.into(); + } +} + +impl PartialEq for Position { + fn eq(&self, other: &OldPosition) -> bool { + self.0 == other.0 + } +} + +/// The value of [`Position`] from the end of the previous tick. +/// +/// **NOTE**: You should not modify this component after the entity is spawned. +#[derive(Component, Clone, PartialEq, Default, Debug, Deref)] +pub struct OldPosition(DVec3); + +impl OldPosition { + pub fn new(pos: impl Into) -> Self { + Self(pos.into()) + } + + pub fn get(&self) -> DVec3 { + self.0 + } +} + +impl PartialEq for OldPosition { + fn eq(&self, other: &Position) -> bool { + self.0 == other.0 + } +} + +/// Describes the direction an entity is looking using pitch and yaw angles. +#[derive(Component, Copy, Clone, PartialEq, Default, Debug)] +pub struct Look { + /// The yaw angle in degrees, where: + /// - `-90` is looking east (towards positive x). + /// - `0` is looking south (towards positive z). + /// - `90` is looking west (towards negative x). + /// - `180` is looking north (towards negative z). + /// + /// Values -180 to 180 are also valid. + pub yaw: f32, + /// The pitch angle in degrees, where: + /// - `-90` is looking straight up. + /// - `0` is looking straight ahead. + /// - `90` is looking straight down. + pub pitch: f32, +} + +impl Look { + pub const fn new(yaw: f32, pitch: f32) -> Self { + Self { yaw, pitch } + } + + /// Gets a normalized direction vector from the yaw and pitch. + pub fn vec(self) -> Vec3 { + let (yaw_sin, yaw_cos) = (self.yaw + 90.0).to_radians().sin_cos(); + let (pitch_sin, pitch_cos) = (-self.pitch).to_radians().sin_cos(); + + Vec3::new(yaw_cos * pitch_cos, pitch_sin, yaw_sin * pitch_cos) + } + + /// Sets the yaw and pitch using a normalized direction vector. + pub fn set_vec(&mut self, dir: Vec3) { + debug_assert!( + dir.is_normalized(), + "the direction vector should be normalized" + ); + + // Preserve the current yaw if we're looking straight up or down. + if dir.x != 0.0 || dir.z != 0.0 { + self.yaw = f32::atan2(dir.z, dir.x).to_degrees() - 90.0; + } + + self.pitch = -(dir.y).asin().to_degrees(); + } +} + +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct OnGround(pub bool); + +/// A Minecraft entity's ID according to the protocol. +/// +/// IDs should be _unique_ for the duration of the server and _constant_ for +/// the lifetime of the entity. IDs of -1 (the default) will be assigned to +/// something else on the tick the entity is added. If you need to know the ID +/// ahead of time, set this component to the value returned by +/// [`EntityManager::next_id`] before spawning. +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Deref)] +pub struct EntityId(i32); + +impl EntityId { + /// Returns the underlying entity ID as an integer. + pub fn get(self) -> i32 { + self.0 + } +} + +/// Returns an entity ID of -1. +impl Default for EntityId { + fn default() -> Self { + Self(-1) + } +} + +#[derive(Component, Copy, Clone, PartialEq, Default, Debug, Deref, DerefMut)] +pub struct HeadYaw(pub f32); + +/// Entity velocity in m/s. +#[derive(Component, Copy, Clone, Default, Debug, Deref, DerefMut)] +pub struct Velocity(pub Vec3); + +impl Velocity { + pub fn to_packet_units(self) -> valence_protocol::Velocity { + valence_protocol::Velocity::from_ms_f32(self.0.into()) + } +} + +// TODO: don't make statuses and animations components. + +#[derive(Component, Copy, Clone, Default, Debug, Deref, DerefMut)] +pub struct EntityStatuses(pub u64); + +impl EntityStatuses { + pub fn trigger(&mut self, status: EntityStatus) { + self.set(status, true); + } + + pub fn set(&mut self, status: EntityStatus, triggered: bool) { + self.0 |= (triggered as u64) << status as u64; + } + + pub fn get(&self, status: EntityStatus) -> bool { + (self.0 >> status as u64) & 1 == 1 + } +} + +#[derive(Component, Default, Debug, Copy, Clone, Deref, DerefMut)] +pub struct EntityAnimations(pub u8); + +impl EntityAnimations { + pub fn trigger(&mut self, anim: EntityAnimation) { + self.set(anim, true); + } + + pub fn set(&mut self, anim: EntityAnimation, triggered: bool) { + self.0 |= (triggered as u8) << anim as u8; + } + + pub fn get(&self, anim: EntityAnimation) -> bool { + (self.0 >> anim as u8) & 1 == 1 + } +} + +/// Extra integer data passed to the entity spawn packet. The meaning depends on +/// the type of entity being spawned. +/// +/// Some examples: +/// - **Experience Orb**: Experience count +/// - **(Glowing) Item Frame**: Rotation +/// - **Painting**: Rotation +/// - **Falling Block**: Block state +/// - **Fishing Bobber**: Hook entity ID +/// - **Warden**: Initial pose +#[derive(Component, Default, Debug, Deref, DerefMut)] +pub struct ObjectData(pub i32); + +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DecodeBytesAuto)] +pub struct VillagerData { + pub kind: VillagerKind, + pub profession: VillagerProfession, + pub level: i32, +} + +impl VillagerData { + pub const fn new(kind: VillagerKind, profession: VillagerProfession, level: i32) -> Self { + Self { + kind, + profession, + level, + } + } +} + +impl Default for VillagerData { + fn default() -> Self { + Self { + kind: Default::default(), + profession: Default::default(), + level: 1, + } + } +} + +impl Encode for VillagerData { + fn encode(&self, mut w: impl std::io::Write) -> anyhow::Result<()> { + self.kind.encode(&mut w)?; + self.profession.encode(&mut w)?; + VarInt(self.level).encode(w) + } +} + +impl Decode for VillagerData { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + kind: VillagerKind::decode(r)?, + profession: VillagerProfession::decode(r)?, + level: VarInt::decode(r)?.0, + }) + } +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum VillagerKind { + Desert, + Jungle, + #[default] + Plains, + Savanna, + Snow, + Swamp, + Taiga, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum VillagerProfession { + #[default] + None, + Armorer, + Butcher, + Cartographer, + Cleric, + Farmer, + Fisherman, + Fletcher, + Leatherworker, + Librarian, + Mason, + Nitwit, + Shepherd, + Toolsmith, + Weaponsmith, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum Pose { + #[default] + Standing, + FallFlying, + Sleeping, + Swimming, + SpinAttack, + Sneaking, + LongJumping, + Dying, + Croaking, + UsingTongue, + Roaring, + Sniffing, + Emerging, + Digging, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum BoatKind { + #[default] + Oak, + Spruce, + Birch, + Jungle, + Acacia, + DarkOak, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum CatKind { + Tabby, + #[default] + Black, + Red, + Siamese, + BritishShorthair, + Calico, + Persian, + Ragdoll, + White, + Jellie, + AllBlack, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum FrogKind { + #[default] + Temperate, + Warm, + Cold, +} + +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum PaintingKind { + #[default] + Kebab, + Aztec, + Alban, + Aztec2, + Bomb, + Plant, + Wasteland, + Pool, + Courbet, + Sea, + Sunset, + Creebet, + Wanderer, + Graham, + Match, + Bust, + Stage, + Void, + SkullAndRoses, + Wither, + Fighters, + Pointer, + Pigscene, + BurningSkull, + Skeleton, + Earth, + Wind, + Water, + Fire, + DonkeyKong, +} + +#[derive( + Copy, + Clone, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Default, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub enum SnifferState { + #[default] + Idling, + FeelingHappy, + Scenting, + Sniffing, + Searching, + Digging, + Rising, +} + +#[derive(Clone, Copy, PartialEq, PartialOrd, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct EulerAngle { + pub pitch: f32, + pub yaw: f32, + pub roll: f32, +} + +#[derive(Copy, Clone, DecodeBytesAuto)] +struct OptionalInt(Option); + +impl Encode for OptionalInt { + fn encode(&self, w: impl std::io::Write) -> anyhow::Result<()> { + if let Some(n) = self.0 { + VarInt(n.wrapping_add(1)) + } else { + VarInt(0) + } + .encode(w) + } +} + +impl Decode for OptionalInt { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let n = VarInt::decode(r)?.0; + + Ok(Self(if n == 0 { + None + } else { + Some(n.wrapping_sub(1)) + })) + } +} diff --git a/vendor/valence/crates/valence_entity/src/manager.rs b/vendor/valence/crates/valence_entity/src/manager.rs new file mode 100644 index 00000000..c79cd62c --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/manager.rs @@ -0,0 +1,45 @@ +use std::num::Wrapping; + +use bevy_ecs::prelude::*; +use rustc_hash::FxHashMap; +use tracing::warn; + +use super::EntityId; + +/// A [`Resource`] which maintains information about all spawned Minecraft +/// entities. +#[derive(Resource, Debug)] +pub struct EntityManager { + /// Maps protocol IDs to ECS entities. + pub(super) id_to_entity: FxHashMap, + next_id: Wrapping, +} + +impl EntityManager { + pub(super) fn new() -> Self { + Self { + id_to_entity: FxHashMap::default(), + next_id: Wrapping(1), // Skip 0. + } + } + + /// Returns the next unique entity ID and increments the counter. + pub fn next_id(&mut self) -> EntityId { + if self.next_id.0 == 0 { + warn!("entity ID overflow!"); + // ID 0 is reserved for clients, so skip over it. + self.next_id.0 = 1; + } + + let id = EntityId(self.next_id.0); + + self.next_id += 1; + + id + } + + /// Gets the entity with the given entity ID. + pub fn get_by_id(&self, entity_id: i32) -> Option { + self.id_to_entity.get(&entity_id).cloned() + } +} diff --git a/vendor/valence/crates/valence_entity/src/query.rs b/vendor/valence/crates/valence_entity/src/query.rs new file mode 100644 index 00000000..a9ee7f7c --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/query.rs @@ -0,0 +1,209 @@ +use std::mem; + +use bevy_ecs::prelude::DetectChanges; +use bevy_ecs::query::WorldQuery; +use bevy_ecs::world::Ref; +use valence_math::DVec3; +use valence_protocol::ByteAngle; +use valence_protocol::encode::WritePacket; +use valence_protocol::packets::play::{ + EntityAnimationS2c, EntityAttributesS2c, EntityPositionS2c, EntitySetHeadYawS2c, + EntitySpawnS2c, EntityStatusS2c, EntityVelocityUpdateS2c, ExperienceOrbSpawnS2c, + MoveRelativeS2c, PlayerSpawnS2c, RotateAndMoveRelativeS2c, RotateS2c, +}; +use valence_protocol::var_int::VarInt; +use valence_server_common::UniqueId; + +use crate::attributes::TrackedEntityAttributes; +use crate::tracked_data::TrackedData; +use crate::{ + EntityAnimations, EntityId, EntityKind, EntityLayerId, EntityStatuses, HeadYaw, Look, + ObjectData, OldEntityLayerId, OldPosition, OnGround, Position, Velocity, +}; + +#[derive(WorldQuery)] +pub struct EntityInitQuery { + pub entity_id: &'static EntityId, + pub uuid: &'static UniqueId, + pub kind: &'static EntityKind, + pub look: &'static Look, + pub head_yaw: &'static HeadYaw, + pub on_ground: &'static OnGround, + pub object_data: &'static ObjectData, + pub velocity: &'static Velocity, + pub tracked_data: &'static TrackedData, +} + +impl EntityInitQueryItem<'_> { + /// Writes the appropriate packets to initialize an entity. This will spawn + /// the entity and initialize tracked data. `pos` is the initial position of + /// the entity. + pub fn write_init_packets(&self, pos: DVec3, mut writer: impl WritePacket) { + match *self.kind { + EntityKind::MARKER => {} + EntityKind::EXPERIENCE_ORB => { + writer.write_packet(&ExperienceOrbSpawnS2c { + entity_id: self.entity_id.get().into(), + position: pos, + count: self.object_data.0 as i16, + }); + } + EntityKind::PLAYER => { + writer.write_packet(&PlayerSpawnS2c { + entity_id: self.entity_id.get().into(), + player_uuid: self.uuid.0, + position: pos, + yaw: ByteAngle::from_degrees(self.look.yaw), + pitch: ByteAngle::from_degrees(self.look.pitch), + }); + + // Player spawn packet doesn't include head yaw for some reason. + writer.write_packet(&EntitySetHeadYawS2c { + entity_id: self.entity_id.get().into(), + head_yaw: ByteAngle::from_degrees(self.head_yaw.0), + }); + } + _ => writer.write_packet(&EntitySpawnS2c { + entity_id: self.entity_id.get().into(), + object_uuid: self.uuid.0, + kind: self.kind.get().into(), + position: pos, + pitch: ByteAngle::from_degrees(self.look.pitch), + yaw: ByteAngle::from_degrees(self.look.yaw), + head_yaw: ByteAngle::from_degrees(self.head_yaw.0), + data: self.object_data.0.into(), + velocity: self.velocity.to_packet_units(), + }), + } + + if let Some(_init_data) = self.tracked_data.init_data() { + todo!() + // writer.write_packet(&EntityTrackerUpdateS2c { + // entity_id: self.entity_id.get().into(), + // tracked_values: init_data.into(), + // }); + } + } +} + +#[derive(WorldQuery)] +pub struct UpdateEntityQuery { + pub id: &'static EntityId, + pub pos: &'static Position, + pub old_pos: &'static OldPosition, + pub loc: &'static EntityLayerId, + pub old_loc: &'static OldEntityLayerId, + pub look: Ref<'static, Look>, + pub head_yaw: Ref<'static, HeadYaw>, + pub on_ground: &'static OnGround, + pub velocity: Ref<'static, Velocity>, + pub tracked_data: &'static TrackedData, + pub statuses: &'static EntityStatuses, + pub animations: &'static EntityAnimations, + // Option because not all entities have attributes, only LivingEntity. + pub tracked_attributes: Option<&'static TrackedEntityAttributes>, +} + +impl UpdateEntityQueryItem<'_> { + pub fn write_update_packets(&self, mut writer: impl WritePacket) { + // TODO: @RJ I saw you're using UpdateEntityPosition and UpdateEntityRotation sometimes. These two packets are actually broken on the client and will erase previous position/rotation https://bugs.mojang.com/browse/MC-255263 -Moulberry + + let entity_id = VarInt(self.id.get()); + + let position_delta = self.pos.0 - self.old_pos.get(); + let needs_teleport = position_delta.abs().max_element() >= 8.0; + let changed_position = self.pos.0 != self.old_pos.get(); + + if changed_position && !needs_teleport && self.look.is_changed() { + writer.write_packet(&RotateAndMoveRelativeS2c { + entity_id, + delta: (position_delta * 4096.0).to_array().map(|v| v as i16), + yaw: ByteAngle::from_degrees(self.look.yaw), + pitch: ByteAngle::from_degrees(self.look.pitch), + on_ground: self.on_ground.0, + }); + } else { + if changed_position && !needs_teleport { + writer.write_packet(&MoveRelativeS2c { + entity_id, + delta: (position_delta * 4096.0).to_array().map(|v| v as i16), + on_ground: self.on_ground.0, + }); + } + + if self.look.is_changed() { + writer.write_packet(&RotateS2c { + entity_id, + yaw: ByteAngle::from_degrees(self.look.yaw), + pitch: ByteAngle::from_degrees(self.look.pitch), + on_ground: self.on_ground.0, + }); + } + } + + if needs_teleport { + writer.write_packet(&EntityPositionS2c { + entity_id, + position: self.pos.0, + yaw: ByteAngle::from_degrees(self.look.yaw), + pitch: ByteAngle::from_degrees(self.look.pitch), + on_ground: self.on_ground.0, + }); + } + + if self.velocity.is_changed() { + writer.write_packet(&EntityVelocityUpdateS2c { + entity_id, + velocity: self.velocity.to_packet_units(), + }); + } + + if self.head_yaw.is_changed() { + writer.write_packet(&EntitySetHeadYawS2c { + entity_id, + head_yaw: ByteAngle::from_degrees(self.head_yaw.0), + }); + } + + if let Some(_update_data) = self.tracked_data.update_data() { + todo!(); + // writer.write_packet(&EntityTrackerUpdateS2c { + // entity_id, + // tracked_values: update_data.into(), + // }); + } + + if self.statuses.0 != 0 { + for i in 0..mem::size_of_val(self.statuses) { + if (self.statuses.0 >> i) & 1 == 1 { + writer.write_packet(&EntityStatusS2c { + entity_id: entity_id.0, + entity_status: i as u8, + }); + } + } + } + + if self.animations.0 != 0 { + for i in 0..mem::size_of_val(self.animations) { + if (self.animations.0 >> i) & 1 == 1 { + writer.write_packet(&EntityAnimationS2c { + entity_id, + animation: i as u8, + }); + } + } + } + + if let Some(attributes) = self.tracked_attributes { + let properties = attributes.get_properties(); + + if !properties.is_empty() { + writer.write_packet(&EntityAttributesS2c { + entity_id, + properties, + }); + } + } + } +} diff --git a/vendor/valence/crates/valence_entity/src/tracked_data.rs b/vendor/valence/crates/valence_entity/src/tracked_data.rs new file mode 100644 index 00000000..bbdb8492 --- /dev/null +++ b/vendor/valence/crates/valence_entity/src/tracked_data.rs @@ -0,0 +1,136 @@ +use bevy_ecs::prelude::*; +use tracing::warn; +use valence_protocol::Encode; + +/// Cache for all the tracked data of an entity. Used for the +/// [`EntityTrackerUpdateS2c`][packet] packet. +/// +/// [packet]: valence_protocol::packets::play::EntityTrackerUpdateS2c +#[derive(Component, Default, Debug)] +pub struct TrackedData { + init_data: Vec, + /// A map of tracked data indices to the byte length of the entry in + /// `init_data`. + init_entries: Vec<(u8, u32)>, + update_data: Vec, +} + +impl TrackedData { + /// Returns initial tracked data for the entity, ready to be sent in the + /// [`EntityTrackerUpdateS2c`][packet] packet. This is used when the entity + /// enters the view of a client. + /// + /// [packet]: valence_protocol::packets::play::EntityTrackerUpdateS2c + pub fn init_data(&self) -> Option<&[u8]> { + if self.init_data.len() > 1 { + Some(&self.init_data) + } else { + None + } + } + + /// Contains updated tracked data for the entity, ready to be sent in the + /// [`EntityTrackerUpdateS2c`][packet] packet. This is used when tracked + /// data is changed and the client is already in view of the entity. + /// + /// [packet]: valence_protocol::packets::play::EntityTrackerUpdateS2c + pub fn update_data(&self) -> Option<&[u8]> { + if self.update_data.len() > 1 { + Some(&self.update_data) + } else { + None + } + } + + pub fn insert_init_value(&mut self, index: u8, type_id: u8, value: impl Encode) { + debug_assert!( + index != 0xff, + "index of 0xff is reserved for the terminator" + ); + + self.remove_init_value(index); + + self.init_data.pop(); // Remove terminator. + + // Append the new value to the end. + let len_before = self.init_data.len(); + + self.init_data.extend_from_slice(&[index, type_id]); + if let Err(e) = value.encode(&mut self.init_data) { + warn!("failed to encode initial tracked data: {e:#}"); + } + + let len = self.init_data.len() - len_before; + + self.init_entries.push((index, len as u32)); + + self.init_data.push(0xff); // Add terminator. + } + + pub fn remove_init_value(&mut self, index: u8) -> bool { + let mut start = 0; + + for (pos, &(idx, len)) in self.init_entries.iter().enumerate() { + if idx == index { + let end = start + len as usize; + + self.init_data.drain(start..end); + self.init_entries.remove(pos); + + return true; + } + + start += len as usize; + } + + false + } + + pub fn append_update_value(&mut self, index: u8, type_id: u8, value: impl Encode) { + debug_assert!( + index != 0xff, + "index of 0xff is reserved for the terminator" + ); + + self.update_data.pop(); // Remove terminator. + + self.update_data.extend_from_slice(&[index, type_id]); + if let Err(e) = value.encode(&mut self.update_data) { + warn!("failed to encode updated tracked data: {e:#}"); + } + + self.update_data.push(0xff); // Add terminator. + } + + pub fn clear_update_values(&mut self) { + self.update_data.clear(); + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn insert_remove_init_tracked_data() { + let mut td = TrackedData::default(); + + td.insert_init_value(0, 3, "foo"); + td.insert_init_value(10, 6, "bar"); + td.insert_init_value(5, 9, "baz"); + + assert!(td.remove_init_value(10)); + assert!(!td.remove_init_value(10)); + + // Insertion overwrites value at index 0. + td.insert_init_value(0, 64, "quux"); + + assert!(td.remove_init_value(0)); + assert!(td.remove_init_value(5)); + + assert!(td.init_data.as_slice().is_empty() || td.init_data.as_slice() == [0xff]); + assert!(td.init_data().is_none()); + + assert!(td.update_data.is_empty()); + } +} diff --git a/vendor/valence/crates/valence_generated/Cargo.toml b/vendor/valence/crates/valence_generated/Cargo.toml new file mode 100644 index 00000000..86fb6493 --- /dev/null +++ b/vendor/valence/crates/valence_generated/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "valence_generated" +description = "Generated code for valence and valence_protocol" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true +build = "build/main.rs" + +[dependencies] +valence_math.workspace = true +valence_ident.workspace = true +uuid.workspace = true + +[build-dependencies] +anyhow.workspace = true +heck.workspace = true +proc-macro2.workspace = true +quote.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +valence_build_utils.workspace = true diff --git a/vendor/valence/crates/valence_generated/README.md b/vendor/valence/crates/valence_generated/README.md new file mode 100644 index 00000000..741c9354 --- /dev/null +++ b/vendor/valence/crates/valence_generated/README.md @@ -0,0 +1,4 @@ +# valence_generated + +Contains the majority of Valence's generated Rust code for use with Minecraft's protocol and entity data. +This is currently meant to be an implementation detail of `valence_protocol` and `valence_entity`. diff --git a/vendor/valence/crates/valence_generated/build/attributes.rs b/vendor/valence/crates/valence_generated/build/attributes.rs new file mode 100644 index 00000000..4879d195 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/attributes.rs @@ -0,0 +1,170 @@ +use std::collections::BTreeMap; + +use heck::ToPascalCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize)] +struct EntityAttribute { + id: u8, + default_value: f64, + translation_key: String, + tracked: bool, + min_value: f64, + max_value: f64, +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/attributes.json"]); + + let entity_attributes: BTreeMap = + serde_json::from_str(include_str!("../extracted/attributes.json"))?; + + let mut entity_attribute_enum = TokenStream::new(); + let mut entity_attribute_get_id = TokenStream::new(); + let mut entity_attribute_from_id = TokenStream::new(); + let mut entity_attribute_name = TokenStream::new(); + let mut entity_attribute_default_value = TokenStream::new(); + let mut entity_attribute_translation_key = TokenStream::new(); + let mut entity_attribute_tracked = TokenStream::new(); + let mut entity_attribute_min_value = TokenStream::new(); + let mut entity_attribute_max_value = TokenStream::new(); + + for (name, attribute) in entity_attributes { + let key = ident(name.to_pascal_case()); + let id = attribute.id; + let default_value = attribute.default_value; + let translation_key = attribute.translation_key; + let tracked = attribute.tracked; + let min_value = attribute.min_value; + let max_value = attribute.max_value; + + entity_attribute_enum.extend([quote! { + #key, + }]); + + entity_attribute_get_id.extend([quote! { + EntityAttribute::#key => #id, + }]); + + entity_attribute_from_id.extend([quote! { + #id => Some(EntityAttribute::#key), + }]); + + entity_attribute_name.extend([quote! { + EntityAttribute::#key => #name, + }]); + + entity_attribute_default_value.extend([quote! { + EntityAttribute::#key => #default_value, + }]); + + entity_attribute_translation_key.extend([quote! { + EntityAttribute::#key => #translation_key, + }]); + + entity_attribute_tracked.extend([quote! { + EntityAttribute::#key => #tracked, + }]); + + entity_attribute_min_value.extend([quote! { + EntityAttribute::#key => #min_value, + }]); + + entity_attribute_max_value.extend([quote! { + EntityAttribute::#key => #max_value, + }]); + } + + Ok(quote!( + /// An attribute modifier operation. + #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] + pub enum EntityAttributeOperation { + /// Adds the modifier to the base value. + Add, + /// Multiplies the modifier with the base value. + MultiplyBase, + /// Multiplies the modifier with the total value. + MultiplyTotal, + } + + impl EntityAttributeOperation { + /// Converts from a raw [`u8`]. + pub fn from_raw(raw: u8) -> Option { + match raw { + 0 => Some(Self::Add), + 1 => Some(Self::MultiplyBase), + 2 => Some(Self::MultiplyTotal), + _ => None, + } + } + + /// Converts to a raw [`u8`]. + pub fn to_raw(self) -> u8 { + match self { + Self::Add => 0, + Self::MultiplyBase => 1, + Self::MultiplyTotal => 2, + } + } + } + + #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)] + pub enum EntityAttribute { + #entity_attribute_enum + } + + impl EntityAttribute { + pub fn get_id(self) -> u8 { + match self { + #entity_attribute_get_id + } + } + + pub fn from_id(id: u8) -> Option { + match id { + #entity_attribute_from_id + _ => None, + } + } + + pub fn name(self) -> &'static str { + match self { + #entity_attribute_name + } + } + + pub fn default_value(self) -> f64 { + match self { + #entity_attribute_default_value + } + } + + pub fn translation_key(self) -> &'static str { + match self { + #entity_attribute_translation_key + } + } + + pub fn tracked(self) -> bool { + match self { + #entity_attribute_tracked + } + } + + pub fn min_value(self) -> f64 { + match self { + #entity_attribute_min_value + } + } + + pub fn max_value(self) -> f64 { + match self { + #entity_attribute_max_value + } + } + } + )) +} diff --git a/vendor/valence/crates/valence_generated/build/block.rs b/vendor/valence/crates/valence_generated/build/block.rs new file mode 100644 index 00000000..785f1b86 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/block.rs @@ -0,0 +1,1064 @@ +use std::collections::BTreeSet; + +use heck::{ToPascalCase, ToShoutySnakeCase}; +use proc_macro2::TokenStream; +use quote::{ToTokens, quote}; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize, Clone, Debug)] +struct TopLevel { + blocks: Vec, + shapes: Vec, + block_entity_types: Vec, +} + +#[derive(Deserialize, Clone, Debug)] +struct Block { + id: u16, + item_id: u16, + wall_variant_id: Option, + translation_key: String, + name: String, + properties: Vec, + default_state_id: u16, + states: Vec, + hardness: f32, + blast_resistance: f32, + slipperiness: f32, + speed_factor: f32, + jump_factor: f32, +} + +impl Block { + pub fn min_state_id(&self) -> u16 { + self.states.iter().map(|s| s.id).min().unwrap() + } + + pub fn max_state_id(&self) -> u16 { + self.states.iter().map(|s| s.id).max().unwrap() + } +} + +#[derive(Deserialize, Clone, Debug)] +struct BlockEntityKind { + id: u32, + ident: String, + name: String, +} + +#[derive(Deserialize, Clone, Debug)] +struct Property { + name: String, + values: Vec, +} + +#[derive(Deserialize, Clone, Debug)] +struct State { + id: u16, + luminance: u8, + opaque: bool, + replaceable: bool, + blocks_motion: bool, + collision_shapes: Vec, + block_entity_type: Option, +} + +#[derive(Deserialize, Clone, Debug)] +struct Shape { + min_x: f64, + min_y: f64, + min_z: f64, + max_x: f64, + max_y: f64, + max_z: f64, +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/blocks.json"]); + + let TopLevel { + blocks, + shapes, + block_entity_types, + } = serde_json::from_str(include_str!("../extracted/blocks.json"))?; + + let max_state_id = blocks.iter().map(|b| b.max_state_id()).max().unwrap(); + + let kind_to_translation_key_arms = blocks + .iter() + .map(|b| { + let kind = ident(b.name.to_pascal_case()); + let translation_key = &b.translation_key; + quote! { + Self::#kind => #translation_key, + } + }) + .collect::(); + + let state_to_kind_arms = blocks + .iter() + .map(|b| { + let name = ident(b.name.to_pascal_case()); + let mut token_stream = TokenStream::new(); + + let min_id = b.min_state_id(); + let max_id = b.max_state_id(); + + if min_id == max_id { + quote!(#min_id).to_tokens(&mut token_stream); + } else { + for id in min_id..max_id { + quote!(#id | ).to_tokens(&mut token_stream); + } + quote!(#max_id).to_tokens(&mut token_stream); + } + quote!(=> BlockKind::#name,).to_tokens(&mut token_stream); + token_stream + }) + .collect::(); + + let state_to_luminance_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().filter(|s| s.luminance != 0).map(|s| { + let id = s.id; + let luminance = s.luminance; + quote! { + #id => #luminance, + } + }) + }) + .collect::(); + + let state_to_opaque_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().filter(|s| !s.opaque).map(|s| { + let id = s.id; + quote! { + #id => false, + } + }) + }) + .collect::(); + + let state_to_replaceable_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().filter(|s| s.replaceable).map(|s| { + let id = s.id; + quote! { + #id => true, + } + }) + }) + .collect::(); + + let state_to_blocks_motion_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().filter(|s| s.blocks_motion).map(|s| { + let id = s.id; + quote! { + #id => true, + } + }) + }) + .collect::(); + + let shapes = shapes.iter().map(|s| { + let min_x = s.min_x; + let min_y = s.min_y; + let min_z = s.min_z; + let max_x = s.max_x; + let max_y = s.max_y; + let max_z = s.max_z; + quote! { + Aabb::new_unchecked( + DVec3::new(#min_x, #min_y, #min_z), + DVec3::new(#max_x, #max_y, #max_z), + ) + } + }); + + let shape_count = shapes.len(); + + let state_to_collision_shapes_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().map(|s| { + let id = s.id; + let collision_shapes = &s.collision_shapes; + quote! { + #id => &[#(#collision_shapes),*], + } + }) + }) + .collect::(); + + let get_arms = blocks + .iter() + .filter(|&b| !b.properties.is_empty()) + .map(|b| { + let block_kind_name = ident(b.name.to_pascal_case()); + + let arms = b + .properties + .iter() + .map(|p| { + let prop_name = ident(p.name.to_pascal_case()); + let min_state_id = b.min_state_id(); + let product: u16 = b + .properties + .iter() + .rev() + .take_while(|&other| p.name != other.name) + .map(|p| p.values.len() as u16) + .product(); + + let values_count = p.values.len() as u16; + + let arms = p.values.iter().enumerate().map(|(i, v)| { + let value_idx = i as u16; + let value_name = ident(v.to_pascal_case()); + quote! { + #value_idx => Some(PropValue::#value_name), + } + }).collect::(); + + quote! { + PropName::#prop_name => match (self.0 - #min_state_id) / #product % #values_count { + #arms + _ => unreachable!(), + }, + } + }) + .collect::(); + + quote! { + BlockKind::#block_kind_name => match name { + #arms + _ => None, + }, + } + }) + .collect::(); + + let set_arms = blocks + .iter() + .filter(|&b| !b.properties.is_empty()) + .map(|b| { + let block_kind_name = ident(b.name.to_pascal_case()); + + let arms = b + .properties + .iter() + .map(|p| { + let prop_name = ident(p.name.to_pascal_case()); + let min_state_id = b.min_state_id(); + let product: u16 = b + .properties + .iter() + .rev() + .take_while(|&other| p.name != other.name) + .map(|p| p.values.len() as u16) + .product(); + + let values_count = p.values.len() as u16; + + let arms = p + .values + .iter() + .enumerate() + .map(|(i, v)| { + let val_idx = i as u16; + let val_name = ident(v.to_pascal_case()); + quote! { + PropValue::#val_name => + Self(self.0 - (self.0 - #min_state_id) / #product % #values_count * #product + + #val_idx * #product), + } + }) + .collect::(); + + quote! { + PropName::#prop_name => match val { + #arms + _ => self, + }, + } + }) + .collect::(); + + quote! { + BlockKind::#block_kind_name => match name { + #arms + _ => self, + }, + } + }) + .collect::(); + + let default_block_states = blocks + .iter() + .map(|b| { + let name = ident(b.name.to_shouty_snake_case()); + let state = b.default_state_id; + let doc = format!("The default block state for `{}`.", b.name); + quote! { + #[doc = #doc] + pub const #name: BlockState = BlockState(#state); + } + }) + .collect::(); + + let state_to_wall_variant_arms = blocks + .iter() + .filter(|b| b.wall_variant_id.is_some()) + .map(|b| { + let block_name = ident(b.name.to_shouty_snake_case()); + let wall_block_name = ident( + blocks[b.wall_variant_id.unwrap() as usize] + .name + .to_shouty_snake_case(), + ); + quote! { + BlockState::#block_name => Some(BlockState::#wall_block_name), + } + }) + .collect::(); + + let state_to_block_entity_type_arms = blocks + .iter() + .flat_map(|b| { + b.states.iter().filter_map(|s| { + let id = s.id; + let block_entity_type = s.block_entity_type?; + Some(quote! { + #id => Some(#block_entity_type), + }) + }) + }) + .collect::(); + + let kind_to_state_arms = blocks + .iter() + .map(|b| { + let kind = ident(b.name.to_pascal_case()); + let state = ident(b.name.to_shouty_snake_case()); + quote! { + BlockKind::#kind => BlockState::#state, + } + }) + .collect::(); + + let block_kind_variants = blocks + .iter() + .map(|b| ident(b.name.to_pascal_case())) + .collect::>(); + + let block_kind_from_str_arms = blocks + .iter() + .map(|b| { + let name = &b.name; + let name_ident = ident(name.to_pascal_case()); + quote! { + #name => Some(BlockKind::#name_ident), + } + }) + .collect::(); + + let block_kind_to_str_arms = blocks + .iter() + .map(|b| { + let name = &b.name; + let name_ident = ident(name.to_pascal_case()); + quote! { + BlockKind::#name_ident => #name, + } + }) + .collect::(); + + let block_kind_props_arms = blocks + .iter() + .filter(|&b| !b.properties.is_empty()) + .map(|b| { + let name = ident(b.name.to_pascal_case()); + let prop_names = b.properties.iter().map(|p| ident(p.name.to_pascal_case())); + + quote! { + Self::#name => &[#(PropName::#prop_names,)*], + } + }) + .collect::(); + + let block_kind_to_item_kind_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let item_id = block.item_id; + + quote! { + BlockKind::#name => #item_id, + } + }) + .collect::(); + + let block_kind_from_item_kind_arms = blocks + .iter() + .filter(|block| block.item_id != 0) + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let item_id = block.item_id; + + quote! { + #item_id => Some(BlockKind::#name), + } + }) + .collect::(); + + let block_kind_to_hardness_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let hardness = block.hardness; + + quote! { + BlockKind::#name => #hardness, + } + }) + .collect::(); + + let block_kind_to_blast_resistance_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let blast_resistance = block.blast_resistance; + + quote! { + BlockKind::#name => #blast_resistance, + } + }) + .collect::(); + + let block_kind_to_slipperiness_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let slipperiness = block.slipperiness; + + quote! { + BlockKind::#name => #slipperiness, + } + }) + .collect::(); + + let block_kind_to_speed_factor_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let speed_factor = block.speed_factor; + + quote! { + BlockKind::#name => #speed_factor, + } + }) + .collect::(); + + let block_kind_to_jump_factor_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let jump_factor = block.jump_factor; + + quote! { + BlockKind::#name => #jump_factor, + } + }) + .collect::(); + + let block_kind_from_raw_arms = blocks + .iter() + .map(|block| { + let name = ident(block.name.to_pascal_case()); + let id = block.id; + + quote! { + #id => Some(BlockKind::#name), + } + }) + .collect::(); + + let block_entity_kind_variants = block_entity_types + .iter() + .map(|block_entity| { + let name = ident(block_entity.name.to_pascal_case()); + let doc = format!( + "The block entity type `{}` (ID {}).", + block_entity.name, block_entity.id + ); + quote! { + #[doc = #doc] + #name, + } + }) + .collect::(); + + let block_entity_kind_from_id_arms = block_entity_types + .iter() + .map(|block_entity| { + let id = block_entity.id; + let name = ident(block_entity.name.to_pascal_case()); + + quote! { + #id => Some(Self::#name), + } + }) + .collect::(); + + let block_entity_kind_to_id_arms = block_entity_types + .iter() + .map(|block_entity| { + let id = block_entity.id; + let name = ident(block_entity.name.to_pascal_case()); + + quote! { + Self::#name => #id, + } + }) + .collect::(); + + let block_entity_kind_from_ident_arms = block_entity_types + .iter() + .map(|block_entity| { + let name = ident(block_entity.name.to_pascal_case()); + let ident = &block_entity.ident; + + quote! { + #ident => Some(Self::#name), + } + }) + .collect::(); + + let block_entity_kind_to_ident_arms = block_entity_types + .iter() + .map(|block_entity| { + let name = ident(block_entity.name.to_pascal_case()); + let ident = &block_entity.ident; + + quote! { + Self::#name => ident!(#ident), + } + }) + .collect::(); + + let block_kind_count = blocks.len(); + + let prop_names = blocks + .iter() + .flat_map(|b| b.properties.iter().map(|p| p.name.as_str())) + .collect::>(); + + let prop_name_variants = prop_names + .iter() + .map(|&name| ident(name.to_pascal_case())) + .collect::>(); + + let prop_name_from_str_arms = prop_names + .iter() + .map(|&name| { + let ident = ident(name.to_pascal_case()); + quote! { + #name => Some(PropName::#ident), + } + }) + .collect::(); + + let prop_name_to_str_arms = prop_names + .iter() + .map(|&name| { + let ident = ident(name.to_pascal_case()); + quote! { + PropName::#ident => #name, + } + }) + .collect::(); + + let prop_name_count = prop_names.len(); + + let prop_values = blocks + .iter() + .flat_map(|b| b.properties.iter().flat_map(|p| &p.values)) + .map(|s| s.as_str()) + .collect::>(); + + let prop_value_variants = prop_values + .iter() + .map(|val| ident(val.to_pascal_case())) + .collect::>(); + + let prop_value_from_str_arms = prop_values + .iter() + .map(|val| { + let ident = ident(val.to_pascal_case()); + quote! { + #val => Some(PropValue::#ident), + } + }) + .collect::(); + + let prop_value_to_str_arms = prop_values + .iter() + .map(|val| { + let ident = ident(val.to_pascal_case()); + quote! { + PropValue::#ident => #val, + } + }) + .collect::(); + + let prop_value_from_u16_arms = prop_values + .iter() + .filter_map(|v| v.parse::().ok()) + .map(|n| { + let ident = ident(n.to_string()); + quote! { + #n => Some(PropValue::#ident), + } + }) + .collect::(); + + let prop_value_to_u16_arms = prop_values + .iter() + .filter_map(|v| v.parse::().ok()) + .map(|n| { + let ident = ident(n.to_string()); + quote! { + PropValue::#ident => Some(#n), + } + }) + .collect::(); + + let prop_value_count = prop_values.len(); + + Ok(quote! { + use valence_math::{Aabb, DVec3}; + + /// Represents the state of a block. This does not include block entity data such as + /// the text on a sign, the design on a banner, or the content of a spawner. + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Default, Hash)] + pub struct BlockState(u16); + + impl BlockState { + /// Returns the default block state for a given block type. + pub const fn from_kind(kind: BlockKind) -> Self { + match kind { + #kind_to_state_arms + } + } + + /// Constructs a block state from a raw block state ID. + /// + /// If the given ID is invalid, `None` is returned. + pub const fn from_raw(id: u16) -> Option { + if id <= #max_state_id { + Some(Self(id)) + } else { + None + } + } + + /// Returns the [`BlockKind`] of this block state. + pub const fn to_kind(self) -> BlockKind { + match self.0 { + #state_to_kind_arms + _ => unreachable!(), + } + } + + /// Converts this block state to its underlying raw block state ID. + /// + /// The original block state can be recovered with [`BlockState::from_raw`]. + pub const fn to_raw(self) -> u16 { + self.0 + } + + /// Returns the maximum block state ID. + pub const fn max_raw() -> u16 { + #max_state_id + } + + /// Returns the wall variant of the block state. + /// + /// If the given block state doesn't have a wall variant, `None` is returned. + pub const fn wall_block_id(self) -> Option { + match self { + #state_to_wall_variant_arms + _ => None + } + } + + /// Gets the value of the property with the given name from this block. + /// + /// If this block does not have the property, then `None` is returned. + pub const fn get(self, name: PropName) -> Option { + match self.to_kind() { + #get_arms + _ => None + } + } + + /// Sets the value of a property on this block, returning the modified block. + /// + /// If this block does not have the given property or the property value is invalid, + /// then the original block is returned unchanged. + #[must_use] + pub const fn set(self, name: PropName, val: PropValue) -> Self { + match self.to_kind() { + #set_arms + _ => self, + } + } + + /// If this block is `air`, `cave_air` or `void_air`. + pub const fn is_air(self) -> bool { + matches!( + self, + BlockState::AIR | BlockState::CAVE_AIR | BlockState::VOID_AIR + ) + } + + // TODO: is_solid + + /// If this block is water or lava. + pub const fn is_liquid(self) -> bool { + matches!(self.to_kind(), BlockKind::Water | BlockKind::Lava) + } + + pub const fn is_opaque(self) -> bool { + match self.0 { + #state_to_opaque_arms + _ => true, + } + } + + pub const fn is_replaceable(self) -> bool { + match self.0 { + #state_to_replaceable_arms + _ => false, + } + } + + pub const fn blocks_motion(self) -> bool { + match self.0 { + #state_to_blocks_motion_arms + _ => false, + } + } + + const SHAPES: [Aabb; #shape_count] = [ + #(#shapes,)* + ]; + + pub fn collision_shapes(self) -> impl ExactSizeIterator + FusedIterator + Clone { + let shape_idxs: &'static [u16] = match self.0 { + #state_to_collision_shapes_arms + _ => &[], + }; + + shape_idxs.into_iter().map(|idx| Self::SHAPES[*idx as usize]) + } + + pub const fn luminance(self) -> u8 { + match self.0 { + #state_to_luminance_arms + _ => 0, + } + } + + pub const fn block_entity_kind(self) -> Option { + let kind = match self.0 { + #state_to_block_entity_type_arms + _ => None + }; + + match kind { + Some(id) => BlockEntityKind::from_id(id), + None => None, + } + } + + #default_block_states + } + + /// An enumeration of all block kinds. + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum BlockKind { + #(#block_kind_variants,)* + } + + impl BlockKind { + /// Construct a block kind from its snake_case name. + /// + /// Returns `None` if the name is invalid. + pub fn from_str(name: &str) -> Option { + match name { + #block_kind_from_str_arms + _ => None + } + } + + /// Get the snake_case name of this block kind. + pub const fn to_str(self) -> &'static str { + match self { + #block_kind_to_str_arms + } + } + + /// Returns the default block state for a given block kind. + pub const fn to_state(self) -> BlockState { + BlockState::from_kind(self) + } + + /// Returns a slice of all properties this block kind has. + pub const fn props(self) -> &'static [PropName] { + match self { + #block_kind_props_arms + _ => &[], + } + } + + pub const fn translation_key(self) -> &'static str { + match self { + #kind_to_translation_key_arms + } + } + + pub const fn hardness(self) -> f32 { + match self { + #block_kind_to_hardness_arms + } + } + + pub const fn blast_resistance(self) -> f32 { + match self { + #block_kind_to_blast_resistance_arms + } + } + + pub const fn slipperiness(self) -> f32 { + match self { + #block_kind_to_slipperiness_arms + } + } + + pub const fn speed_factor(self) -> f32 { + match self { + #block_kind_to_speed_factor_arms + } + } + + pub const fn jump_factor(self) -> f32 { + match self { + #block_kind_to_jump_factor_arms + } + } + + /// Converts a block kind to its corresponding item kind. + /// + /// [`ItemKind::Air`] is used to indicate the absence of an item. + pub const fn to_item_kind(self) -> ItemKind { + let id = match self { + #block_kind_to_item_kind_arms + }; + + // TODO: unwrap() is not const yet. + match ItemKind::from_raw(id) { + Some(k) => k, + None => unreachable!(), + } + } + + /// Constructs a block kind from an item kind. + /// + /// If the given item does not have a corresponding block, `None` is returned. + pub const fn from_item_kind(item: ItemKind) -> Option { + // The "default" blocks are ordered before the other variants. + // For instance, `torch` comes before `wall_torch` so this match + // should do the correct thing. + #[allow(unreachable_patterns)] + match item.to_raw() { + #block_kind_from_item_kind_arms + _ => None, + } + } + + /// Constructs a block kind from a raw block kind ID. + /// + /// If the given ID is invalid, `None` is returned. + pub const fn from_raw(id: u16) -> Option { + match id { + #block_kind_from_raw_arms + _ => None, + } + } + + /// Converts this block kind to its underlying raw block state ID. + /// + /// The original block kind can be recovered with [`BlockKind::from_raw`]. + pub const fn to_raw(self) -> u16 { + self as u16 + } + + /// An array of all block kinds. + pub const ALL: [Self; #block_kind_count] = [#(Self::#block_kind_variants,)*]; + } + + /// The default block kind is `air`. + impl Default for BlockKind { + fn default() -> Self { + Self::Air + } + } + + /// Contains all possible block state property names. + /// + /// For example, `waterlogged`, `facing`, and `half` are all property names. + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum PropName { + #(#prop_name_variants,)* + } + + impl PropName { + /// Construct a property name from its snake_case name. + /// + /// Returns `None` if the given name is not valid. + pub fn from_str(name: &str) -> Option { + // TODO: match on str in const fn. + match name { + #prop_name_from_str_arms + _ => None, + } + } + + /// Get the snake_case name of this property name. + pub const fn to_str(self) -> &'static str { + match self { + #prop_name_to_str_arms + } + } + + /// An array of all property names. + pub const ALL: [Self; #prop_name_count] = [#(Self::#prop_name_variants,)*]; + } + + /// Contains all possible values that a block property might have. + /// + /// For example, `upper`, `true`, and `2` are all property values. + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum PropValue { + #(#prop_value_variants,)* + } + + impl PropValue { + /// Construct a property value from its snake_case name. + /// + /// Returns `None` if the given name is not valid. + pub fn from_str(name: &str) -> Option { + match name { + #prop_value_from_str_arms + _ => None, + } + } + + /// Get the snake_case name of this property value. + pub const fn to_str(self) -> &'static str { + match self { + #prop_value_to_str_arms + } + } + + /// Converts a `u16` into a numeric property value. + /// Returns `None` if the given number does not have a + /// corresponding property value. + pub const fn from_u16(n: u16) -> Option { + match n { + #prop_value_from_u16_arms + _ => None, + } + } + + /// Converts this property value into a `u16` if it is numeric. + /// Returns `None` otherwise. + pub const fn to_u16(self) -> Option { + match self { + #prop_value_to_u16_arms + _ => None, + } + } + + /// Converts a `bool` to a `True` or `False` property value. + pub const fn from_bool(b: bool) -> Self { + if b { + Self::True + } else { + Self::False + } + } + + /// Converts a `True` or `False` property value to a `bool`. + /// + /// Returns `None` if this property value is not `True` or `False` + pub const fn to_bool(self) -> Option { + match self { + Self::True => Some(true), + Self::False => Some(false), + _ => None, + } + } + + /// An array of all property values. + pub const ALL: [Self; #prop_value_count] = [#(Self::#prop_value_variants,)*]; + } + + impl From for PropValue { + fn from(b: bool) -> Self { + Self::from_bool(b) + } + } + + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum BlockEntityKind { + #block_entity_kind_variants + } + + impl BlockEntityKind { + pub const fn from_id(num: u32) -> Option { + match num { + #block_entity_kind_from_id_arms + _ => None + } + } + + pub const fn id(self) -> u32 { + match self { + #block_entity_kind_to_id_arms + } + } + + pub fn from_ident(ident: Ident) -> Option { + match ident.as_str() { + #block_entity_kind_from_ident_arms + _ => None + } + } + + pub fn ident(self) -> Ident { + match self { + #block_entity_kind_to_ident_arms + } + } + } + }) +} diff --git a/vendor/valence/crates/valence_generated/build/chunk_view.rs b/vendor/valence/crates/valence_generated/build/chunk_view.rs new file mode 100644 index 00000000..ebf80d8c --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/chunk_view.rs @@ -0,0 +1,40 @@ +use proc_macro2::TokenStream; +use quote::quote; + +const MAX_VIEW_DIST: u8 = 32; +const EXTRA_VIEW_RADIUS: i32 = 2; + +pub fn build() -> TokenStream { + let entries = (0..=MAX_VIEW_DIST).map(|dist| { + let dist = dist as i32 + EXTRA_VIEW_RADIUS; + + let mut positions = vec![]; + + for z in -dist..=dist { + for x in -dist..=dist { + if x * x + z * z <= dist * dist { + positions.push((x as i8, z as i8)); + } + } + } + + positions.sort_by_key(|&(x, z)| (x as i32).pow(2) + (z as i32).pow(2)); + + let array_elems = positions.into_iter().map(|(x, z)| quote!((#x, #z))); + + quote! { + &[ #(#array_elems),* ] + } + }); + + let array_len = MAX_VIEW_DIST as usize + 1; + + quote! { + /// The maximum view distance for a `ChunkView`. + pub const MAX_VIEW_DIST: u8 = #MAX_VIEW_DIST; + + pub const EXTRA_VIEW_RADIUS: i32 = #EXTRA_VIEW_RADIUS; + + pub static CHUNK_VIEW_LUT: [&[(i8, i8)]; #array_len] = [ #(#entries),* ]; + } +} diff --git a/vendor/valence/crates/valence_generated/build/item.rs b/vendor/valence/crates/valence_generated/build/item.rs new file mode 100644 index 00000000..d818a612 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/item.rs @@ -0,0 +1,338 @@ +use anyhow::Ok; +use heck::ToPascalCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize, Clone, Debug)] +struct Item { + id: u16, + name: String, + translation_key: String, + max_stack: i8, + max_durability: u16, + enchantability: u8, + fireproof: bool, + food: Option, + equippable: Option, +} + +#[derive(Deserialize, Clone, Debug)] +struct FoodComponent { + hunger: u16, + saturation: f32, + always_edible: bool, + meat: bool, + snack: bool, + // TODO: effects +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/items.json"]); + + let items = serde_json::from_str::>(include_str!("../extracted/items.json"))?; + + let item_kind_count = items.len(); + + let item_kind_from_raw_id_arms = items + .iter() + .map(|item| { + let id = &item.id; + let name = ident(item.name.to_pascal_case()); + + quote! { + #id => Some(Self::#name), + } + }) + .collect::(); + + let item_kind_to_raw_id_arms = items + .iter() + .map(|item| { + let id = &item.id; + let name = ident(item.name.to_pascal_case()); + + quote! { + Self::#name => #id, + } + }) + .collect::(); + + let item_kind_from_str_arms = items + .iter() + .map(|item| { + let str_name = &item.name; + let name = ident(str_name.to_pascal_case()); + quote! { + #str_name => Some(Self::#name), + } + }) + .collect::(); + + let item_kind_to_str_arms = items + .iter() + .map(|item| { + let str_name = &item.name; + let name = ident(str_name.to_pascal_case()); + quote! { + Self::#name => #str_name, + } + }) + .collect::(); + + let item_kind_to_translation_key_arms = items + .iter() + .map(|item| { + let name = ident(item.name.to_pascal_case()); + let translation_key = &item.translation_key; + quote! { + Self::#name => #translation_key, + } + }) + .collect::(); + + let item_kind_variants = items + .iter() + .map(|item| ident(item.name.to_pascal_case())) + .collect::>(); + + let item_kind_to_max_stack_arms = items + .iter() + .map(|item| { + let name = ident(item.name.to_pascal_case()); + let max_stack = item.max_stack; + + quote! { + Self::#name => #max_stack, + } + }) + .collect::(); + + let item_kind_to_food_component_arms = items + .iter() + .map(|item| match &item.food { + Some(food_component) => { + let name = ident(item.name.to_pascal_case()); + let hunger = food_component.hunger; + let saturation = food_component.saturation; + let always_edible = food_component.always_edible; + let meat = food_component.meat; + let snack = food_component.snack; + + quote! { + Self::#name => Some(FoodComponent { + hunger: #hunger, + saturation: #saturation, + always_edible: #always_edible, + meat: #meat, + snack: #snack, + } + ), + } + } + None => quote! {}, + }) + .collect::(); + + let item_kind_to_equippable_arms = items + .iter() + .map(|item| match &item.equippable { + Some(slot) => { + let name = ident(item.name.to_pascal_case()); + let slot = match slot.as_str() { + "boots" => quote! { EquipmentSlot::Boots }, + "leggings" => quote! { EquipmentSlot::Leggings }, + "chestplate" => quote! { EquipmentSlot::Chestplate }, + "helmet" => quote! { EquipmentSlot::Helmet }, + _ => quote! { EquipmentSlot::Helmet }, + }; + quote! { + Self::#name => Some(#slot), + } + } + None => quote! {}, + }) + .collect::(); + + let item_kind_to_max_durability_arms = items + .iter() + .filter(|item| item.max_durability != 0) + .map(|item| { + let name = ident(item.name.to_pascal_case()); + let max_durability = item.max_durability; + + quote! { + Self::#name => #max_durability, + } + }) + .collect::(); + + let item_kind_to_enchantability_arms = items + .iter() + .filter(|item| item.enchantability != 0) + .map(|item| { + let name = ident(item.name.to_pascal_case()); + let ench = item.enchantability; + + quote! { + Self::#name => #ench, + } + }) + .collect::(); + + let item_kind_to_fireproof_arms = items + .iter() + .filter(|item| item.fireproof) + .map(|item| { + let name = ident(item.name.to_pascal_case()); + + quote! { + Self::#name => true, + } + }) + .collect::(); + + Ok(quote! { + /// Represents an item from the game + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Default)] + #[repr(u16)] + pub enum ItemKind { + #[default] + #(#item_kind_variants,)* + } + + /// Contains food information about an item. + /// + /// Only food items have a food component. + #[derive(Clone, Copy, PartialEq, PartialOrd, Debug)] + pub struct FoodComponent { + pub hunger: u16, + pub saturation: f32, + pub always_edible: bool, + pub meat: bool, + pub snack: bool, + } + + #[derive(Clone, Copy, PartialEq, PartialOrd, Debug)] + pub enum EquipmentSlot { + Boots, Leggings, Chestplate, Helmet + } + + impl ItemKind { + /// Constructs a item kind from a raw item ID. + /// + /// If the given ID is invalid, `None` is returned. + pub const fn from_raw(id: u16) -> Option { + match id { + #item_kind_from_raw_id_arms + _ => None + } + } + + /// Gets the raw item ID from the item kind + pub const fn to_raw(self) -> u16 { + match self { + #item_kind_to_raw_id_arms + } + } + + /// Construct an item kind for its snake_case name. + /// + /// Returns `None` if the name is invalid. + #[allow(clippy::should_implement_trait)] + pub fn from_str(name: &str) -> Option { + match name { + #item_kind_from_str_arms + _ => None + } + } + + /// Gets the snake_case name of this item kind. + pub const fn to_str(self) -> &'static str { + match self { + #item_kind_to_str_arms + } + } + + /// Gets the translation key of this item kind. + pub const fn translation_key(self) -> &'static str { + match self { + #item_kind_to_translation_key_arms + } + } + + /// Returns the maximum stack count. + pub const fn max_stack(self) -> i8 { + match self { + #item_kind_to_max_stack_arms + } + } + + /// Returns a food component which stores hunger, saturation etc. + /// + /// If the item kind can't be eaten, `None` will be returned. + pub const fn food_component(self) -> Option { + match self { + #item_kind_to_food_component_arms + _ => None + } + } + + /// Returns the maximum durability before the item will break. + /// + /// If the item doesn't have durability, `0` is returned. + pub const fn max_durability(self) -> u16 { + match self { + #item_kind_to_max_durability_arms + _ => 0, + } + } + + /// Returns the enchantability of the item kind. + /// + /// If the item doesn't have durability, `0` is returned. + pub const fn enchantability(self) -> u8 { + match self { + #item_kind_to_enchantability_arms + _ => 0, + } + } + + /// Returns if the item can survive in fire/lava. + pub const fn fireproof(self) -> bool { + #[allow(clippy::match_like_matches_macro)] + match self { + #item_kind_to_fireproof_arms + _ => false + } + } + + /// Returns the slot this ItemKind can be equipped on + pub const fn equippable(self) -> Option { + match self { + #item_kind_to_equippable_arms + _ => None + } + } + + /* + /// Constructs an item kind from a block kind. + /// + /// [`ItemKind::Air`] is used to indicate the absence of an item. + pub const fn from_block_kind(kind: BlockKind) -> Self { + kind.to_item_kind() + } + + /// Constructs a block kind from an item kind. + /// + /// If the given item kind doesn't have a corresponding block kind, `None` is returned. + pub const fn to_block_kind(self) -> Option { + BlockKind::from_item_kind(self) + }*/ + + /// An array of all item kinds. + pub const ALL: [Self; #item_kind_count] = [#(Self::#item_kind_variants,)*]; + } + }) +} diff --git a/vendor/valence/crates/valence_generated/build/main.rs b/vendor/valence/crates/valence_generated/build/main.rs new file mode 100644 index 00000000..f63827bc --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/main.rs @@ -0,0 +1,21 @@ +use valence_build_utils::write_generated_file; + +mod attributes; +mod block; +mod chunk_view; +mod item; +mod packet_id; +mod sound; +mod status_effects; + +pub fn main() -> anyhow::Result<()> { + write_generated_file(attributes::build()?, "attributes.rs")?; + write_generated_file(block::build()?, "block.rs")?; + write_generated_file(item::build()?, "item.rs")?; + write_generated_file(sound::build()?, "sound.rs")?; + write_generated_file(packet_id::build()?, "packet_id.rs")?; + write_generated_file(chunk_view::build(), "chunk_view.rs")?; + write_generated_file(status_effects::build()?, "status_effects.rs")?; + + Ok(()) +} diff --git a/vendor/valence/crates/valence_generated/build/packet_id.rs b/vendor/valence/crates/valence_generated/build/packet_id.rs new file mode 100644 index 00000000..90b25617 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/packet_id.rs @@ -0,0 +1,37 @@ +use heck::ToShoutySnakeCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize)] +struct Packet { + name: String, + side: String, + state: String, + id: i32, +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/packets.json"]); + + let packets: Vec = serde_json::from_str(include_str!("../extracted/packets.json"))?; + + let mut consts = TokenStream::new(); + + for packet in packets { + let stripped_name = packet.name.strip_suffix("Packet").unwrap_or(&packet.name); + + let name_ident = ident(stripped_name.to_shouty_snake_case()); + let id = packet.id; + + let doc = format!("Side: {}\n\nState: {}", packet.side, packet.state); + + consts.extend([quote! { + #[doc = #doc] + pub const #name_ident: i32 = #id; + }]); + } + + Ok(consts) +} diff --git a/vendor/valence/crates/valence_generated/build/sound.rs b/vendor/valence/crates/valence_generated/build/sound.rs new file mode 100644 index 00000000..b1766526 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/sound.rs @@ -0,0 +1,122 @@ +use heck::ToPascalCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize, Debug)] +pub struct Sound { + id: u16, + name: String, +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/sounds.json"]); + + let sounds = serde_json::from_str::>(include_str!("../extracted/sounds.json"))?; + + let sound_count = sounds.len(); + + let sound_from_raw_id_arms = sounds + .iter() + .map(|sound| { + let id = &sound.id; + let name = ident(sound.name.to_pascal_case()); + + quote! { + #id => Some(Self::#name), + } + }) + .collect::(); + + let sound_to_raw_id_arms = sounds + .iter() + .map(|sound| { + let id = &sound.id; + let name = ident(sound.name.to_pascal_case()); + + quote! { + Self::#name => #id, + } + }) + .collect::(); + + let sound_from_ident_arms = sounds + .iter() + .map(|sound| { + // TODO: put the full resource identifier in the extracted JSON. + let path_name = &sound.name; + let ident_name = format!("minecraft:{}", &sound.name); + + let name = ident(path_name.to_pascal_case()); + quote! { + #ident_name => Some(Self::#name), + } + }) + .collect::(); + + let sound_to_ident_arms = sounds + .iter() + .map(|sound| { + let str_name = &sound.name; + let name = ident(str_name.to_pascal_case()); + quote! { + Self::#name => ident!(#str_name), + } + }) + .collect::(); + + let sound_variants = sounds + .iter() + .map(|sound| ident(sound.name.to_pascal_case())) + .collect::>(); + + Ok(quote! { + use valence_ident::{Ident, ident}; + + /// Represents a sound from the game + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum Sound { + #(#sound_variants,)* + } + + impl Sound { + /// Constructs a sound from a raw item ID. + /// + /// If the given ID is invalid, `None` is returned. + pub const fn from_raw(id: u16) -> Option { + match id { + #sound_from_raw_id_arms + _ => None + } + } + + /// Gets the raw sound ID from the sound + pub const fn to_raw(self) -> u16 { + match self { + #sound_to_raw_id_arms + } + } + + /// Construct a sound from its snake_case name. + /// + /// Returns `None` if the name is invalid. + pub fn from_ident(id: Ident) -> Option { + match id.as_str() { + #sound_from_ident_arms + _ => None + } + } + + /// Gets the identifier of this sound. + pub const fn to_ident(self) -> Ident { + match self { + #sound_to_ident_arms + } + } + + /// An array of all sounds. + pub const ALL: [Self; #sound_count] = [#(Self::#sound_variants,)*]; + } + }) +} diff --git a/vendor/valence/crates/valence_generated/build/status_effects.rs b/vendor/valence/crates/valence_generated/build/status_effects.rs new file mode 100644 index 00000000..0c7563d1 --- /dev/null +++ b/vendor/valence/crates/valence_generated/build/status_effects.rs @@ -0,0 +1,286 @@ +use heck::ToPascalCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed}; + +#[derive(Deserialize, Debug)] +pub enum StatusEffectCategory { + Beneficial, + Harmful, + Neutral, +} + +#[derive(Deserialize, Debug)] +pub struct AttributeModifiers { + attribute: u8, + operation: u8, + value: f64, + uuid: String, +} + +#[derive(Deserialize, Debug)] +pub struct StatusEffect { + id: u16, + name: String, + translation_key: String, + category: StatusEffectCategory, + color: u32, + instant: bool, + attribute_modifiers: Option>, +} + +pub fn build() -> anyhow::Result { + rerun_if_changed(["extracted/effects.json"]); + + let effects = + serde_json::from_str::>(include_str!("../extracted/effects.json"))?; + + let effect_count = effects.len(); + + let effect_from_raw_id_arms = effects + .iter() + .map(|effect| { + let id = &effect.id; + let name = ident(effect.name.to_pascal_case()); + + quote! { + #id => Some(Self::#name), + } + }) + .collect::(); + + let effect_to_raw_id_arms = effects + .iter() + .map(|effect| { + let id = &effect.id; + let name = ident(effect.name.to_pascal_case()); + + quote! { + Self::#name => #id, + } + }) + .collect::(); + + let effect_from_ident_arms = effects + .iter() + .map(|effect| { + let path_name = &effect.name; + let ident_name = format!("minecraft:{}", &effect.name); + + let name = ident(path_name.to_pascal_case()); + quote! { + #ident_name => Some(Self::#name), + } + }) + .collect::(); + + let effect_to_ident_arms = effects + .iter() + .map(|effect| { + let str_name = &effect.name; + let name = ident(str_name.to_pascal_case()); + quote! { + Self::#name => ident!(#str_name), + } + }) + .collect::(); + + let effect_to_translation_key_arms = effects + .iter() + .map(|effect| { + let str_name = &effect.translation_key; + let name = ident(effect.name.to_pascal_case()); + quote! { + Self::#name => #str_name, + } + }) + .collect::(); + + let effect_to_category_arms = effects + .iter() + .map(|effect| { + let category = match &effect.category { + StatusEffectCategory::Beneficial => quote! { StatusEffectCategory::Beneficial }, + StatusEffectCategory::Harmful => quote! { StatusEffectCategory::Harmful }, + StatusEffectCategory::Neutral => quote! { StatusEffectCategory::Neutral }, + }; + + let name = ident(effect.name.to_pascal_case()); + quote! { + Self::#name => #category, + } + }) + .collect::(); + + let effect_to_color_arms = effects + .iter() + .map(|effect| { + let color = &effect.color; + let name = ident(effect.name.to_pascal_case()); + quote! { + Self::#name => #color, + } + }) + .collect::(); + + let effect_to_instant_arms = effects + .iter() + .map(|effect| { + let instant = &effect.instant; + let name = ident(effect.name.to_pascal_case()); + quote! { + Self::#name => #instant, + } + }) + .collect::(); + + let effect_to_attribute_modifiers_arms = effects + .iter() + .filter_map(|effect| { + effect.attribute_modifiers.as_ref().map(|modifiers| { + let name = ident(effect.name.to_pascal_case()); + let modifiers = modifiers.iter().map(|modifier| { + let attribute = &modifier.attribute; + let operation = &modifier.operation; + let value = &modifier.value; + let uuid = &modifier.uuid; + + quote! { + AttributeModifier { + attribute: EntityAttribute::from_id(#attribute).unwrap(), + operation: EntityAttributeOperation::from_raw(#operation).unwrap(), + value: #value, + uuid: Uuid::parse_str(#uuid).unwrap(), + } + } + }); + + quote! { + Self::#name => vec![#(#modifiers,)*], + } + }) + }) + .collect::(); + + let effect_variants = effects + .iter() + .map(|effect| ident(effect.name.to_pascal_case())) + .collect::>(); + + Ok(quote! { + use uuid::Uuid; + use valence_ident::{Ident, ident}; + use super::attributes::{EntityAttribute, EntityAttributeOperation}; + + /// Represents an attribute modifier. + #[derive(Debug, Clone, Copy, PartialEq)] + pub struct AttributeModifier { + /// The attribute that this modifier modifies. + pub attribute: EntityAttribute, + /// The operation that this modifier applies. + pub operation: EntityAttributeOperation, + /// The value of this modifier. + pub value: f64, + /// The UUID of this modifier. + pub uuid: Uuid, + } + + /// Represents a status effect category + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum StatusEffectCategory { + Beneficial, + Harmful, + Neutral, + } + + /// Represents a status effect from the game + #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] + pub enum StatusEffect { + #(#effect_variants,)* + } + + impl StatusEffect { + /// Constructs a effect from a raw item ID. + /// + /// If the given ID is invalid, `None` is returned. + pub const fn from_raw(id: u16) -> Option { + match id { + #effect_from_raw_id_arms + _ => None + } + } + + /// Gets the raw effect ID from the effect + pub const fn to_raw(self) -> u16 { + match self { + #effect_to_raw_id_arms + } + } + + /// Construct a effect from its snake_case name. + /// + /// Returns `None` if the name is invalid. + pub fn from_ident(id: Ident) -> Option { + match id.as_str() { + #effect_from_ident_arms + _ => None + } + } + + /// Gets the identifier of this effect. + pub const fn to_ident(self) -> Ident { + match self { + #effect_to_ident_arms + } + } + + /// Gets the name of this effect. + /// Same as [`StatusEffect::to_ident`], but doesn't take ownership. + pub const fn name(&self) -> Ident { + match self { + #effect_to_ident_arms + } + } + + /// Gets the translation key of this effect. + pub const fn translation_key(&self) -> &'static str { + match self { + #effect_to_translation_key_arms + } + } + + /// Gets the category of this effect. + pub const fn category(&self) -> StatusEffectCategory { + match self { + #effect_to_category_arms + } + } + + /// Gets the color of this effect. + pub const fn color(&self) -> u32 { + match self { + #effect_to_color_arms + } + } + + /// Gets whether this effect is instant. + pub const fn instant(&self) -> bool { + match self { + #effect_to_instant_arms + } + } + + /// Gets the attribute modifiers of this effect. + pub fn attribute_modifiers(&self) -> Vec { + match self { + #effect_to_attribute_modifiers_arms + _ => vec![], + } + } + + /// An array of all effects. + pub const ALL: [Self; #effect_count] = [#(Self::#effect_variants,)*]; + } + }) +} diff --git a/vendor/valence/crates/valence_generated/extracted/attributes.json b/vendor/valence/crates/valence_generated/extracted/attributes.json new file mode 100644 index 00000000..dcb9b134 --- /dev/null +++ b/vendor/valence/crates/valence_generated/extracted/attributes.json @@ -0,0 +1,119 @@ +{ + "generic.max_health": { + "id": 0, + "name": "generic.max_health", + "default_value": 20.0, + "translation_key": "attribute.name.generic.max_health", + "tracked": true, + "min_value": 1.0, + "max_value": 1024.0 + }, + "generic.follow_range": { + "id": 1, + "name": "generic.follow_range", + "default_value": 32.0, + "translation_key": "attribute.name.generic.follow_range", + "tracked": false, + "min_value": 0.0, + "max_value": 2048.0 + }, + "generic.knockback_resistance": { + "id": 2, + "name": "generic.knockback_resistance", + "default_value": 0.0, + "translation_key": "attribute.name.generic.knockback_resistance", + "tracked": false, + "min_value": 0.0, + "max_value": 1.0 + }, + "generic.movement_speed": { + "id": 3, + "name": "generic.movement_speed", + "default_value": 0.699999988079071, + "translation_key": "attribute.name.generic.movement_speed", + "tracked": true, + "min_value": 0.0, + "max_value": 1024.0 + }, + "generic.flying_speed": { + "id": 4, + "name": "generic.flying_speed", + "default_value": 0.4000000059604645, + "translation_key": "attribute.name.generic.flying_speed", + "tracked": true, + "min_value": 0.0, + "max_value": 1024.0 + }, + "generic.attack_damage": { + "id": 5, + "name": "generic.attack_damage", + "default_value": 2.0, + "translation_key": "attribute.name.generic.attack_damage", + "tracked": false, + "min_value": 0.0, + "max_value": 2048.0 + }, + "generic.attack_knockback": { + "id": 6, + "name": "generic.attack_knockback", + "default_value": 0.0, + "translation_key": "attribute.name.generic.attack_knockback", + "tracked": false, + "min_value": 0.0, + "max_value": 5.0 + }, + "generic.attack_speed": { + "id": 7, + "name": "generic.attack_speed", + "default_value": 4.0, + "translation_key": "attribute.name.generic.attack_speed", + "tracked": true, + "min_value": 0.0, + "max_value": 1024.0 + }, + "generic.armor": { + "id": 8, + "name": "generic.armor", + "default_value": 0.0, + "translation_key": "attribute.name.generic.armor", + "tracked": true, + "min_value": 0.0, + "max_value": 30.0 + }, + "generic.armor_toughness": { + "id": 9, + "name": "generic.armor_toughness", + "default_value": 0.0, + "translation_key": "attribute.name.generic.armor_toughness", + "tracked": true, + "min_value": 0.0, + "max_value": 20.0 + }, + "generic.luck": { + "id": 10, + "name": "generic.luck", + "default_value": 0.0, + "translation_key": "attribute.name.generic.luck", + "tracked": true, + "min_value": -1024.0, + "max_value": 1024.0 + }, + "zombie.spawn_reinforcements": { + "id": 11, + "name": "zombie.spawn_reinforcements", + "default_value": 0.0, + "translation_key": "attribute.name.zombie.spawn_reinforcements", + "tracked": false, + "min_value": 0.0, + "max_value": 1.0 + }, + "horse.jump_strength": { + "id": 12, + "name": "horse.jump_strength", + "default_value": 0.7, + "translation_key": "attribute.name.horse.jump_strength", + "tracked": true, + "min_value": 0.0, + "max_value": 2.0 + } +} \ No newline at end of file diff --git a/vendor/valence/crates/valence_generated/extracted/blocks.json b/vendor/valence/crates/valence_generated/extracted/blocks.json new file mode 100644 index 00000000..4a996bc7 --- /dev/null +++ b/vendor/valence/crates/valence_generated/extracted/blocks.json @@ -0,0 +1,289553 @@ +{ + "block_entity_types": [ + { + "id": 0, + "ident": "minecraft:furnace", + "name": "furnace" + }, + { + "id": 1, + "ident": "minecraft:chest", + "name": "chest" + }, + { + "id": 2, + "ident": "minecraft:trapped_chest", + "name": "trapped_chest" + }, + { + "id": 3, + "ident": "minecraft:ender_chest", + "name": "ender_chest" + }, + { + "id": 4, + "ident": "minecraft:jukebox", + "name": "jukebox" + }, + { + "id": 5, + "ident": "minecraft:dispenser", + "name": "dispenser" + }, + { + "id": 6, + "ident": "minecraft:dropper", + "name": "dropper" + }, + { + "id": 7, + "ident": "minecraft:sign", + "name": "sign" + }, + { + "id": 8, + "ident": "minecraft:hanging_sign", + "name": "hanging_sign" + }, + { + "id": 9, + "ident": "minecraft:mob_spawner", + "name": "mob_spawner" + }, + { + "id": 10, + "ident": "minecraft:piston", + "name": "piston" + }, + { + "id": 11, + "ident": "minecraft:brewing_stand", + "name": "brewing_stand" + }, + { + "id": 12, + "ident": "minecraft:enchanting_table", + "name": "enchanting_table" + }, + { + "id": 13, + "ident": "minecraft:end_portal", + "name": "end_portal" + }, + { + "id": 14, + "ident": "minecraft:beacon", + "name": "beacon" + }, + { + "id": 15, + "ident": "minecraft:skull", + "name": "skull" + }, + { + "id": 16, + "ident": "minecraft:daylight_detector", + "name": "daylight_detector" + }, + { + "id": 17, + "ident": "minecraft:hopper", + "name": "hopper" + }, + { + "id": 18, + "ident": "minecraft:comparator", + "name": "comparator" + }, + { + "id": 19, + "ident": "minecraft:banner", + "name": "banner" + }, + { + "id": 20, + "ident": "minecraft:structure_block", + "name": "structure_block" + }, + { + "id": 21, + "ident": "minecraft:end_gateway", + "name": "end_gateway" + }, + { + "id": 22, + "ident": "minecraft:command_block", + "name": "command_block" + }, + { + "id": 23, + "ident": "minecraft:shulker_box", + "name": "shulker_box" + }, + { + "id": 24, + "ident": "minecraft:bed", + "name": "bed" + }, + { + "id": 25, + "ident": "minecraft:conduit", + "name": "conduit" + }, + { + "id": 26, + "ident": "minecraft:barrel", + "name": "barrel" + }, + { + "id": 27, + "ident": "minecraft:smoker", + "name": "smoker" + }, + { + "id": 28, + "ident": "minecraft:blast_furnace", + "name": "blast_furnace" + }, + { + "id": 29, + "ident": "minecraft:lectern", + "name": "lectern" + }, + { + "id": 30, + "ident": "minecraft:bell", + "name": "bell" + }, + { + "id": 31, + "ident": "minecraft:jigsaw", + "name": "jigsaw" + }, + { + "id": 32, + "ident": "minecraft:campfire", + "name": "campfire" + }, + { + "id": 33, + "ident": "minecraft:beehive", + "name": "beehive" + }, + { + "id": 34, + "ident": "minecraft:sculk_sensor", + "name": "sculk_sensor" + }, + { + "id": 35, + "ident": "minecraft:calibrated_sculk_sensor", + "name": "calibrated_sculk_sensor" + }, + { + "id": 36, + "ident": "minecraft:sculk_catalyst", + "name": "sculk_catalyst" + }, + { + "id": 37, + "ident": "minecraft:sculk_shrieker", + "name": "sculk_shrieker" + }, + { + "id": 38, + "ident": "minecraft:chiseled_bookshelf", + "name": "chiseled_bookshelf" + }, + { + "id": 39, + "ident": "minecraft:brushable_block", + "name": "brushable_block" + }, + { + "id": 40, + "ident": "minecraft:decorated_pot", + "name": "decorated_pot" + } + ], + "shapes": [ + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.1875, + "max_y": 0.5625, + "max_z": 0.1875 + }, + { + "min_x": 0.8125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 0.1875 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.5625, + "max_z": 0.1875 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.8125, + "max_x": 0.1875, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.8125, + "min_y": 0.0, + "min_z": 0.8125, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.8125, + "max_x": 0.8125, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 0.1875 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.8125, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.8125, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 0.8125 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.75, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.25 + }, + { + "min_x": 0.375, + "min_y": 0.375, + "min_z": 0.25, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.375, + "min_z": 0.25, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 1.25 + }, + { + "min_x": 0.75, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.375, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": -0.25, + "min_y": 0.375, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.75, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.375, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 0.75 + }, + { + "min_x": 0.375, + "min_y": 0.375, + "min_z": -0.25, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.25, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.375, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": 0.25, + "min_y": 0.375, + "min_z": 0.375, + "max_x": 1.25, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.75, + "min_z": 0.0, + "max_x": 0.375, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.75, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.375 + }, + { + "min_x": 0.375, + "min_y": 0.75, + "min_z": 0.625, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.625, + "min_y": 0.75, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": -0.25, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.25, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.25, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.5, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.5, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.5, + "min_y": 0.5, + "min_z": 0.5, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.5, + "min_y": 0.0, + "min_z": 0.5, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.5, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.5, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.5, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 0.5 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.5, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.5, + "max_x": 0.5, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.5, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.5, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.875, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 1.0, + "max_y": 0.875, + "max_z": 0.9375 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.875, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.9375, + "max_y": 0.875, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.875, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.9375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.1875, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.8125, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.8125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.1875 + }, + { + "min_x": 0.0, + "min_y": 0.875, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.875, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.125, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.875, + "max_z": 1.0 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.9375, + "max_z": 0.9375 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 0.375 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.625, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.625, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 1.5, + "max_z": 0.625 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.5625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.6875, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.8125, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.5, + "max_z": 0.9375 + }, + { + "min_x": 0.0, + "min_y": 0.8125, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.1875, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.4375 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.5625, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.5625, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.0, + "min_y": 0.40625, + "min_z": 0.40625, + "max_x": 1.0, + "max_y": 0.59375, + "max_z": 0.59375 + }, + { + "min_x": 0.40625, + "min_y": 0.0, + "min_z": 0.40625, + "max_x": 0.59375, + "max_y": 1.0, + "max_z": 0.59375 + }, + { + "min_x": 0.40625, + "min_y": 0.40625, + "min_z": 0.0, + "max_x": 0.59375, + "max_y": 0.59375, + "max_z": 1.0 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.09375, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.125, + "max_z": 0.9375 + }, + { + "min_x": 0.4375, + "min_y": 0.125, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 0.875, + "max_z": 0.5625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 0.25 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.75, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.25, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.875, + "max_x": 0.25, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.75, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.75, + "min_y": 0.0, + "min_z": 0.875, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.875, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.25 + }, + { + "min_x": 0.875, + "min_y": 0.0, + "min_z": 0.75, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 0.25, + "max_z": 0.75 + }, + { + "min_x": 0.125, + "min_y": 0.1875, + "min_z": 0.125, + "max_x": 0.875, + "max_y": 0.25, + "max_z": 0.25 + }, + { + "min_x": 0.125, + "min_y": 0.1875, + "min_z": 0.75, + "max_x": 0.875, + "max_y": 0.25, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.25, + "min_y": 0.1875, + "min_z": 0.875, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.875, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.8125, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 1.0, + "max_z": 0.9375 + }, + { + "min_x": 0.375, + "min_y": 0.4375, + "min_z": 0.0625, + "max_x": 0.625, + "max_y": 0.75, + "max_z": 0.3125 + }, + { + "min_x": 0.375, + "min_y": 0.4375, + "min_z": 0.6875, + "max_x": 0.625, + "max_y": 0.75, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.4375, + "min_z": 0.375, + "max_x": 0.3125, + "max_y": 0.75, + "max_z": 0.625 + }, + { + "min_x": 0.6875, + "min_y": 0.4375, + "min_z": 0.375, + "max_x": 0.9375, + "max_y": 0.75, + "max_z": 0.625 + }, + { + "min_x": 0.3125, + "min_y": 0.3125, + "min_z": 0.0625, + "max_x": 0.6875, + "max_y": 0.75, + "max_z": 0.4375 + }, + { + "min_x": 0.3125, + "min_y": 0.3125, + "min_z": 0.5625, + "max_x": 0.6875, + "max_y": 0.75, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.3125, + "min_z": 0.3125, + "max_x": 0.4375, + "max_y": 0.75, + "max_z": 0.6875 + }, + { + "min_x": 0.5625, + "min_y": 0.3125, + "min_z": 0.3125, + "max_x": 0.9375, + "max_y": 0.75, + "max_z": 0.6875 + }, + { + "min_x": 0.25, + "min_y": 0.1875, + "min_z": 0.0625, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 0.5625 + }, + { + "min_x": 0.25, + "min_y": 0.1875, + "min_z": 0.4375, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.1875, + "min_z": 0.25, + "max_x": 0.5625, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.4375, + "min_y": 0.1875, + "min_z": 0.25, + "max_x": 0.9375, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 1.5, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.75, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 1.5, + "max_z": 0.3125 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.6875, + "max_x": 0.75, + "max_y": 1.5, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.75, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.6875, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 0.25 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 0.3125 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.6875, + "max_y": 1.5, + "max_z": 1.0 + }, + { + "min_x": 0.75, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.6875, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 1.0, + "max_y": 1.5, + "max_z": 0.6875 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.375, + "max_z": 0.6875 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.5, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.5, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 0.5 + }, + { + "min_x": 0.5, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.5, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.5, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.25, + "min_z": 0.5, + "max_x": 0.8125, + "max_y": 0.75, + "max_z": 1.0 + }, + { + "min_x": 0.1875, + "min_y": 0.25, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.75, + "max_z": 0.5 + }, + { + "min_x": 0.5, + "min_y": 0.25, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.75, + "max_z": 0.8125 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.1875, + "max_x": 0.5, + "max_y": 0.75, + "max_z": 0.8125 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.875, + "max_y": 0.25, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.1875, + "max_x": 0.75, + "max_y": 0.3125, + "max_z": 0.8125 + }, + { + "min_x": 0.375, + "min_y": 0.3125, + "min_z": 0.25, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.1875, + "min_y": 0.625, + "min_z": 0.0, + "max_x": 0.375, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.625, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.25 + }, + { + "min_x": 0.375, + "min_y": 0.625, + "min_z": 0.75, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.625, + "min_y": 0.625, + "min_z": 0.25, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.1875, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.8125, + "max_y": 0.3125, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.3125, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.625, + "min_z": 0.1875, + "max_x": 0.25, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.25, + "min_y": 0.625, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.375 + }, + { + "min_x": 0.25, + "min_y": 0.625, + "min_z": 0.625, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.75, + "min_y": 0.625, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 0.6875, + "max_z": 0.625 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.375, + "max_y": 0.6875, + "max_z": 0.75 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.375 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.625, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.75 + }, + { + "min_x": 0.625, + "min_y": 0.25, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.625, + "min_z": 0.0, + "max_x": 0.25, + "max_y": 0.6875, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.625, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.6875, + "max_z": 0.25 + }, + { + "min_x": 0.25, + "min_y": 0.625, + "min_z": 0.75, + "max_x": 1.0, + "max_y": 0.6875, + "max_z": 1.0 + }, + { + "min_x": 0.75, + "min_y": 0.625, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 0.6875, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.6875, + "min_z": 0.0, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.125, + "min_y": 0.6875, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.125, + "min_y": 0.6875, + "min_z": 0.875, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.875, + "min_y": 0.6875, + "min_z": 0.125, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.75 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 0.5, + "max_z": 0.25 + }, + { + "min_x": 0.375, + "min_y": 0.25, + "min_z": 0.75, + "max_x": 0.625, + "max_y": 0.5, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 0.5, + "max_z": 0.625 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.375 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.625, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.5, + "min_z": 0.375, + "max_x": 0.75, + "max_y": 0.6875, + "max_z": 0.625 + }, + { + "min_x": 0.75, + "min_y": 0.25, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 0.5, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.0625, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.375, + "min_z": 0.0, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.375, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.1875, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.1875 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.8125, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.8125, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.8125, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.3125, + "min_y": -0.0625, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.1875, + "max_z": 0.6875 + }, + { + "min_x": 0.1875, + "min_y": -0.0625, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.3125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.75, + "max_y": 0.4375, + "max_z": 0.75 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.9375, + "max_y": 0.4375, + "max_z": 0.9375 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.9375, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 0.375, + "max_z": 0.625 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.375, + "max_z": 0.8125 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.875, + "max_y": 0.375, + "max_z": 0.875 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.875, + "max_y": 0.4375, + "max_z": 0.875 + }, + { + "min_x": 0.3125, + "min_y": 0.3125, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.6875, + "max_z": 0.6875 + }, + { + "min_x": 0.15625, + "min_y": 0.0, + "min_z": 0.15625, + "max_x": 0.34375, + "max_y": 1.0, + "max_z": 0.34375 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.875, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.875, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.875, + "min_y": 0.0, + "min_z": 0.875, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.875, + "min_z": 0.125, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.125, + "min_y": 0.875, + "min_z": 0.0, + "max_x": 0.875, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.125, + "min_y": 0.875, + "min_z": 0.875, + "max_x": 0.875, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.25, + "max_y": 0.8125, + "max_z": 0.625 + }, + { + "min_x": 0.75, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.875, + "max_y": 0.8125, + "max_z": 0.625 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.125, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.125, + "min_y": 0.4375, + "min_z": 0.3125, + "max_x": 0.25, + "max_y": 0.8125, + "max_z": 0.375 + }, + { + "min_x": 0.125, + "min_y": 0.4375, + "min_z": 0.625, + "max_x": 0.25, + "max_y": 0.8125, + "max_z": 0.6875 + }, + { + "min_x": 0.75, + "min_y": 0.4375, + "min_z": 0.3125, + "max_x": 0.875, + "max_y": 0.8125, + "max_z": 0.375 + }, + { + "min_x": 0.75, + "min_y": 0.4375, + "min_z": 0.625, + "max_x": 0.875, + "max_y": 0.8125, + "max_z": 0.6875 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.625, + "max_y": 0.8125, + "max_z": 0.25 + }, + { + "min_x": 0.375, + "min_y": 0.0, + "min_z": 0.75, + "max_x": 0.625, + "max_y": 0.8125, + "max_z": 0.875 + }, + { + "min_x": 0.125, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.875, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.3125, + "min_y": 0.4375, + "min_z": 0.125, + "max_x": 0.375, + "max_y": 0.8125, + "max_z": 0.25 + }, + { + "min_x": 0.3125, + "min_y": 0.4375, + "min_z": 0.75, + "max_x": 0.375, + "max_y": 0.8125, + "max_z": 0.875 + }, + { + "min_x": 0.625, + "min_y": 0.4375, + "min_z": 0.125, + "max_x": 0.6875, + "max_y": 0.8125, + "max_z": 0.25 + }, + { + "min_x": 0.625, + "min_y": 0.4375, + "min_z": 0.75, + "max_x": 0.6875, + "max_y": 0.8125, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.125, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 0.875, + "max_z": 0.75 + }, + { + "min_x": 0.125, + "min_y": 0.3125, + "min_z": 0.1875, + "max_x": 0.25, + "max_y": 0.6875, + "max_z": 0.5625 + }, + { + "min_x": 0.75, + "min_y": 0.3125, + "min_z": 0.1875, + "max_x": 0.875, + "max_y": 0.6875, + "max_z": 0.5625 + }, + { + "min_x": 0.125, + "min_y": 0.375, + "min_z": 0.5625, + "max_x": 0.25, + "max_y": 0.625, + "max_z": 1.0 + }, + { + "min_x": 0.75, + "min_y": 0.375, + "min_z": 0.5625, + "max_x": 0.875, + "max_y": 0.625, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.125, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.875, + "max_z": 1.0 + }, + { + "min_x": 0.125, + "min_y": 0.3125, + "min_z": 0.4375, + "max_x": 0.25, + "max_y": 0.6875, + "max_z": 0.8125 + }, + { + "min_x": 0.75, + "min_y": 0.3125, + "min_z": 0.4375, + "max_x": 0.875, + "max_y": 0.6875, + "max_z": 0.8125 + }, + { + "min_x": 0.125, + "min_y": 0.375, + "min_z": 0.0, + "max_x": 0.25, + "max_y": 0.625, + "max_z": 0.4375 + }, + { + "min_x": 0.75, + "min_y": 0.375, + "min_z": 0.0, + "max_x": 0.875, + "max_y": 0.625, + "max_z": 0.4375 + }, + { + "min_x": 0.0, + "min_y": 0.125, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.875, + "max_z": 0.75 + }, + { + "min_x": 0.1875, + "min_y": 0.3125, + "min_z": 0.125, + "max_x": 0.5625, + "max_y": 0.6875, + "max_z": 0.25 + }, + { + "min_x": 0.1875, + "min_y": 0.3125, + "min_z": 0.75, + "max_x": 0.5625, + "max_y": 0.6875, + "max_z": 0.875 + }, + { + "min_x": 0.5625, + "min_y": 0.375, + "min_z": 0.125, + "max_x": 1.0, + "max_y": 0.625, + "max_z": 0.25 + }, + { + "min_x": 0.5625, + "min_y": 0.375, + "min_z": 0.75, + "max_x": 1.0, + "max_y": 0.625, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.125, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 0.875, + "max_z": 0.75 + }, + { + "min_x": 0.4375, + "min_y": 0.3125, + "min_z": 0.125, + "max_x": 0.8125, + "max_y": 0.6875, + "max_z": 0.25 + }, + { + "min_x": 0.4375, + "min_y": 0.3125, + "min_z": 0.75, + "max_x": 0.8125, + "max_y": 0.6875, + "max_z": 0.875 + }, + { + "min_x": 0.0, + "min_y": 0.375, + "min_z": 0.125, + "max_x": 0.4375, + "max_y": 0.625, + "max_z": 0.25 + }, + { + "min_x": 0.0, + "min_y": 0.375, + "min_z": 0.75, + "max_x": 0.4375, + "max_y": 0.625, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 0.875 + }, + { + "min_x": 0.125, + "min_y": 0.1875, + "min_z": 0.3125, + "max_x": 0.25, + "max_y": 0.5625, + "max_z": 0.6875 + }, + { + "min_x": 0.75, + "min_y": 0.1875, + "min_z": 0.3125, + "max_x": 0.875, + "max_y": 0.5625, + "max_z": 0.6875 + }, + { + "min_x": 0.125, + "min_y": 0.5625, + "min_z": 0.375, + "max_x": 0.25, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.75, + "min_y": 0.5625, + "min_z": 0.375, + "max_x": 0.875, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 0.875, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.3125, + "min_y": 0.1875, + "min_z": 0.125, + "max_x": 0.6875, + "max_y": 0.5625, + "max_z": 0.25 + }, + { + "min_x": 0.3125, + "min_y": 0.1875, + "min_z": 0.75, + "max_x": 0.6875, + "max_y": 0.5625, + "max_z": 0.875 + }, + { + "min_x": 0.375, + "min_y": 0.5625, + "min_z": 0.125, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.25 + }, + { + "min_x": 0.375, + "min_y": 0.5625, + "min_z": 0.75, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.25, + "min_y": 0.125, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.875, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.5625, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.375, + "max_z": 0.75 + }, + { + "min_x": 0.3125, + "min_y": 0.375, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.8125, + "max_z": 0.6875 + }, + { + "min_x": 0.4375, + "min_y": 0.8125, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.8125, + "min_z": 0.0, + "max_x": 0.5625, + "max_y": 0.9375, + "max_z": 0.8125 + }, + { + "min_x": 0.4375, + "min_y": 0.8125, + "min_z": 0.1875, + "max_x": 0.5625, + "max_y": 0.9375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.8125, + "min_z": 0.4375, + "max_x": 0.8125, + "max_y": 0.9375, + "max_z": 0.5625 + }, + { + "min_x": 0.1875, + "min_y": 0.8125, + "min_z": 0.4375, + "max_x": 1.0, + "max_y": 0.9375, + "max_z": 0.5625 + }, + { + "min_x": 0.4375, + "min_y": 0.8125, + "min_z": 0.0, + "max_x": 0.5625, + "max_y": 0.9375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.8125, + "min_z": 0.4375, + "max_x": 1.0, + "max_y": 0.9375, + "max_z": 0.5625 + }, + { + "min_x": 0.3125, + "min_y": 0.0625, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.5, + "max_z": 0.6875 + }, + { + "min_x": 0.375, + "min_y": 0.5, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 0.625, + "max_z": 0.625 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.4375, + "max_z": 0.6875 + }, + { + "min_x": 0.375, + "min_y": 0.4375, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 0.5625, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.4375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.125, + "min_z": 0.0, + "max_x": 0.125, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.125, + "min_y": 0.125, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.125 + }, + { + "min_x": 0.125, + "min_y": 0.125, + "min_z": 0.875, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.875, + "min_y": 0.125, + "min_z": 0.125, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.875 + }, + { + "min_x": 0.4375, + "min_y": 0.0, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 0.375, + "max_z": 0.5625 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.6875, + "max_y": 0.375, + "max_z": 0.5625 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.375, + "max_x": 0.625, + "max_y": 0.375, + "max_z": 0.6875 + }, + { + "min_x": 0.3125, + "min_y": 0.0, + "min_z": 0.3125, + "max_x": 0.6875, + "max_y": 0.375, + "max_z": 0.625 + }, + { + "min_x": 0.4375, + "min_y": 0.5, + "min_z": 0.4375, + "max_x": 0.5625, + "max_y": 0.875, + "max_z": 0.5625 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.5625, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.4375, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.4375 + }, + { + "min_x": 0.5625, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.4375, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.5625, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.6875, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.3125, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.3125 + }, + { + "min_x": 0.6875, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.3125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.6875, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.75, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 0.25, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.1875, + "min_z": 0.0, + "max_x": 0.8125, + "max_y": 0.8125, + "max_z": 0.25 + }, + { + "min_x": 0.75, + "min_y": 0.1875, + "min_z": 0.1875, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 0.25, + "max_z": 0.8125 + }, + { + "min_x": 0.1875, + "min_y": 0.75, + "min_z": 0.1875, + "max_x": 0.8125, + "max_y": 1.0, + "max_z": 0.8125 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.8125, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 0.1875, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.25, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 0.75, + "max_z": 0.1875 + }, + { + "min_x": 0.8125, + "min_y": 0.25, + "min_z": 0.25, + "max_x": 1.0, + "max_y": 0.75, + "max_z": 0.75 + }, + { + "min_x": 0.25, + "min_y": 0.0, + "min_z": 0.25, + "max_x": 0.75, + "max_y": 0.1875, + "max_z": 0.75 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.1875, + "min_y": 0.0, + "min_z": 0.1875, + "max_x": 0.5625, + "max_y": 0.6875, + "max_z": 0.5625 + }, + { + "min_x": 0.1875, + "min_y": 0.3125, + "min_z": 0.1875, + "max_x": 0.5625, + "max_y": 1.0, + "max_z": 0.5625 + }, + { + "min_x": 0.125, + "min_y": 0.0, + "min_z": 0.125, + "max_x": 0.625, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.0625, + "min_y": 0.0, + "min_z": 0.0625, + "max_x": 0.6875, + "max_y": 1.0, + "max_z": 0.6875 + }, + { + "min_x": 0.0, + "min_y": 0.0, + "min_z": 0.0, + "max_x": 0.75, + "max_y": 1.0, + "max_z": 0.75 + }, + { + "min_x": 0.0, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 0.375, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.375, + "min_y": 0.5, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.375 + }, + { + "min_x": 0.375, + "min_y": 0.5, + "min_z": 0.625, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 1.0 + }, + { + "min_x": 0.625, + "min_y": 0.5, + "min_z": 0.375, + "max_x": 1.0, + "max_y": 1.0, + "max_z": 0.625 + }, + { + "min_x": 0.0, + "min_y": 0.6875, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.9375, + "max_z": 1.0 + }, + { + "min_x": 0.0, + "min_y": 0.6875, + "min_z": 0.0, + "max_x": 1.0, + "max_y": 0.8125, + "max_z": 1.0 + } + ], + "blocks": [ + { + "id": 0, + "name": "air", + "translation_key": "block.minecraft.air", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 0, + "states": [ + { + "id": 0, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 1, + "name": "stone", + "translation_key": "block.minecraft.stone", + "item_id": 1, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 1, + "states": [ + { + "id": 1, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 2, + "name": "granite", + "translation_key": "block.minecraft.granite", + "item_id": 2, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2, + "states": [ + { + "id": 2, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 3, + "name": "polished_granite", + "translation_key": "block.minecraft.polished_granite", + "item_id": 3, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 3, + "states": [ + { + "id": 3, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 4, + "name": "diorite", + "translation_key": "block.minecraft.diorite", + "item_id": 4, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 4, + "states": [ + { + "id": 4, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 5, + "name": "polished_diorite", + "translation_key": "block.minecraft.polished_diorite", + "item_id": 5, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5, + "states": [ + { + "id": 5, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 6, + "name": "andesite", + "translation_key": "block.minecraft.andesite", + "item_id": 6, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6, + "states": [ + { + "id": 6, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 7, + "name": "polished_andesite", + "translation_key": "block.minecraft.polished_andesite", + "item_id": 7, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7, + "states": [ + { + "id": 7, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 8, + "name": "grass_block", + "translation_key": "block.minecraft.grass_block", + "item_id": 14, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "snowy", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9, + "states": [ + { + "id": 8, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 9, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 9, + "name": "dirt", + "translation_key": "block.minecraft.dirt", + "item_id": 15, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10, + "states": [ + { + "id": 10, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 10, + "name": "coarse_dirt", + "translation_key": "block.minecraft.coarse_dirt", + "item_id": 16, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 11, + "states": [ + { + "id": 11, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 11, + "name": "podzol", + "translation_key": "block.minecraft.podzol", + "item_id": 17, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "snowy", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13, + "states": [ + { + "id": 12, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 12, + "name": "cobblestone", + "translation_key": "block.minecraft.cobblestone", + "item_id": 22, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 14, + "states": [ + { + "id": 14, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 13, + "name": "oak_planks", + "translation_key": "block.minecraft.oak_planks", + "item_id": 23, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 15, + "states": [ + { + "id": 15, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 14, + "name": "spruce_planks", + "translation_key": "block.minecraft.spruce_planks", + "item_id": 24, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 16, + "states": [ + { + "id": 16, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 15, + "name": "birch_planks", + "translation_key": "block.minecraft.birch_planks", + "item_id": 25, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 17, + "states": [ + { + "id": 17, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 16, + "name": "jungle_planks", + "translation_key": "block.minecraft.jungle_planks", + "item_id": 26, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18, + "states": [ + { + "id": 18, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 17, + "name": "acacia_planks", + "translation_key": "block.minecraft.acacia_planks", + "item_id": 27, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19, + "states": [ + { + "id": 19, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 18, + "name": "cherry_planks", + "translation_key": "block.minecraft.cherry_planks", + "item_id": 28, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20, + "states": [ + { + "id": 20, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 19, + "name": "dark_oak_planks", + "translation_key": "block.minecraft.dark_oak_planks", + "item_id": 29, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21, + "states": [ + { + "id": 21, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 20, + "name": "mangrove_planks", + "translation_key": "block.minecraft.mangrove_planks", + "item_id": 30, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22, + "states": [ + { + "id": 22, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 21, + "name": "bamboo_planks", + "translation_key": "block.minecraft.bamboo_planks", + "item_id": 31, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 23, + "states": [ + { + "id": 23, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 22, + "name": "bamboo_mosaic", + "translation_key": "block.minecraft.bamboo_mosaic", + "item_id": 34, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24, + "states": [ + { + "id": 24, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 23, + "name": "oak_sapling", + "translation_key": "block.minecraft.oak_sapling", + "item_id": 35, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 25, + "states": [ + { + "id": 25, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 26, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 24, + "name": "spruce_sapling", + "translation_key": "block.minecraft.spruce_sapling", + "item_id": 36, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 27, + "states": [ + { + "id": 27, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 28, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 25, + "name": "birch_sapling", + "translation_key": "block.minecraft.birch_sapling", + "item_id": 37, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 29, + "states": [ + { + "id": 29, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 30, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 26, + "name": "jungle_sapling", + "translation_key": "block.minecraft.jungle_sapling", + "item_id": 38, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 31, + "states": [ + { + "id": 31, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 32, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 27, + "name": "acacia_sapling", + "translation_key": "block.minecraft.acacia_sapling", + "item_id": 39, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 33, + "states": [ + { + "id": 33, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 34, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 28, + "name": "cherry_sapling", + "translation_key": "block.minecraft.cherry_sapling", + "item_id": 40, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 35, + "states": [ + { + "id": 35, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 36, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 29, + "name": "dark_oak_sapling", + "translation_key": "block.minecraft.dark_oak_sapling", + "item_id": 41, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 37, + "states": [ + { + "id": 37, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 38, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 30, + "name": "mangrove_propagule", + "translation_key": "block.minecraft.mangrove_propagule", + "item_id": 42, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4" + ] + }, + { + "name": "hanging", + "values": [ + "true", + "false" + ] + }, + { + "name": "stage", + "values": [ + "0", + "1" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 44, + "states": [ + { + "id": 39, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 40, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 41, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 42, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 43, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 44, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 45, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 46, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 47, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 48, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 49, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 50, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 51, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 52, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 53, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 54, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 55, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 56, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 57, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 58, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 59, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 60, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 61, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 62, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 63, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 64, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 65, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 66, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 67, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 68, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 69, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 70, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 71, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 72, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 73, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 74, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 75, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 76, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 77, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 78, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 31, + "name": "bedrock", + "translation_key": "block.minecraft.bedrock", + "item_id": 43, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 79, + "states": [ + { + "id": 79, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 32, + "name": "water", + "translation_key": "block.minecraft.water", + "item_id": 0, + "hardness": 100.0, + "blast_resistance": 100.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 80, + "states": [ + { + "id": 80, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 81, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 82, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 83, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 84, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 85, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 86, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 87, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 88, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 89, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 90, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 91, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 92, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 93, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 94, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 95, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 33, + "name": "lava", + "translation_key": "block.minecraft.lava", + "item_id": 0, + "hardness": 100.0, + "blast_resistance": 100.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 96, + "states": [ + { + "id": 96, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 97, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 98, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 99, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 100, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 101, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 102, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 103, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 104, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 105, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 106, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 107, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 108, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 109, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 110, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 111, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 34, + "name": "sand", + "translation_key": "block.minecraft.sand", + "item_id": 44, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 112, + "states": [ + { + "id": 112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 35, + "name": "suspicious_sand", + "translation_key": "block.minecraft.suspicious_sand", + "item_id": 45, + "hardness": 0.25, + "blast_resistance": 0.25, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "dusted", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 113, + "states": [ + { + "id": 113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + } + ] + }, + { + "id": 36, + "name": "red_sand", + "translation_key": "block.minecraft.red_sand", + "item_id": 47, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 117, + "states": [ + { + "id": 117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 37, + "name": "gravel", + "translation_key": "block.minecraft.gravel", + "item_id": 48, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 118, + "states": [ + { + "id": 118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 38, + "name": "suspicious_gravel", + "translation_key": "block.minecraft.suspicious_gravel", + "item_id": 46, + "hardness": 0.25, + "blast_resistance": 0.25, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "dusted", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 119, + "states": [ + { + "id": 119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + }, + { + "id": 122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 39 + } + ] + }, + { + "id": 39, + "name": "gold_ore", + "translation_key": "block.minecraft.gold_ore", + "item_id": 55, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 123, + "states": [ + { + "id": 123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 40, + "name": "deepslate_gold_ore", + "translation_key": "block.minecraft.deepslate_gold_ore", + "item_id": 56, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 124, + "states": [ + { + "id": 124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 41, + "name": "iron_ore", + "translation_key": "block.minecraft.iron_ore", + "item_id": 51, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 125, + "states": [ + { + "id": 125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 42, + "name": "deepslate_iron_ore", + "translation_key": "block.minecraft.deepslate_iron_ore", + "item_id": 52, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 126, + "states": [ + { + "id": 126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 43, + "name": "coal_ore", + "translation_key": "block.minecraft.coal_ore", + "item_id": 49, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 127, + "states": [ + { + "id": 127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 44, + "name": "deepslate_coal_ore", + "translation_key": "block.minecraft.deepslate_coal_ore", + "item_id": 50, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 128, + "states": [ + { + "id": 128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 45, + "name": "nether_gold_ore", + "translation_key": "block.minecraft.nether_gold_ore", + "item_id": 65, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 129, + "states": [ + { + "id": 129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 46, + "name": "oak_log", + "translation_key": "block.minecraft.oak_log", + "item_id": 110, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 131, + "states": [ + { + "id": 130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 47, + "name": "spruce_log", + "translation_key": "block.minecraft.spruce_log", + "item_id": 111, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 134, + "states": [ + { + "id": 133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 48, + "name": "birch_log", + "translation_key": "block.minecraft.birch_log", + "item_id": 112, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 137, + "states": [ + { + "id": 136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 49, + "name": "jungle_log", + "translation_key": "block.minecraft.jungle_log", + "item_id": 113, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 140, + "states": [ + { + "id": 139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 50, + "name": "acacia_log", + "translation_key": "block.minecraft.acacia_log", + "item_id": 114, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 143, + "states": [ + { + "id": 142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 51, + "name": "cherry_log", + "translation_key": "block.minecraft.cherry_log", + "item_id": 115, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 146, + "states": [ + { + "id": 145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 52, + "name": "dark_oak_log", + "translation_key": "block.minecraft.dark_oak_log", + "item_id": 116, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 149, + "states": [ + { + "id": 148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 53, + "name": "mangrove_log", + "translation_key": "block.minecraft.mangrove_log", + "item_id": 117, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 152, + "states": [ + { + "id": 151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 54, + "name": "mangrove_roots", + "translation_key": "block.minecraft.mangrove_roots", + "item_id": 118, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 155, + "states": [ + { + "id": 154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 55, + "name": "muddy_mangrove_roots", + "translation_key": "block.minecraft.muddy_mangrove_roots", + "item_id": 119, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 157, + "states": [ + { + "id": 156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 56, + "name": "bamboo_block", + "translation_key": "block.minecraft.bamboo_block", + "item_id": 122, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 160, + "states": [ + { + "id": 159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 57, + "name": "stripped_spruce_log", + "translation_key": "block.minecraft.stripped_spruce_log", + "item_id": 124, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 163, + "states": [ + { + "id": 162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 58, + "name": "stripped_birch_log", + "translation_key": "block.minecraft.stripped_birch_log", + "item_id": 125, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 166, + "states": [ + { + "id": 165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 59, + "name": "stripped_jungle_log", + "translation_key": "block.minecraft.stripped_jungle_log", + "item_id": 126, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 169, + "states": [ + { + "id": 168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 60, + "name": "stripped_acacia_log", + "translation_key": "block.minecraft.stripped_acacia_log", + "item_id": 127, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 172, + "states": [ + { + "id": 171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 61, + "name": "stripped_cherry_log", + "translation_key": "block.minecraft.stripped_cherry_log", + "item_id": 128, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 175, + "states": [ + { + "id": 174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 62, + "name": "stripped_dark_oak_log", + "translation_key": "block.minecraft.stripped_dark_oak_log", + "item_id": 129, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 178, + "states": [ + { + "id": 177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 63, + "name": "stripped_oak_log", + "translation_key": "block.minecraft.stripped_oak_log", + "item_id": 123, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 181, + "states": [ + { + "id": 180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 64, + "name": "stripped_mangrove_log", + "translation_key": "block.minecraft.stripped_mangrove_log", + "item_id": 130, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 184, + "states": [ + { + "id": 183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 65, + "name": "stripped_bamboo_block", + "translation_key": "block.minecraft.stripped_bamboo_block", + "item_id": 143, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 187, + "states": [ + { + "id": 186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 66, + "name": "oak_wood", + "translation_key": "block.minecraft.oak_wood", + "item_id": 144, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 190, + "states": [ + { + "id": 189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 67, + "name": "spruce_wood", + "translation_key": "block.minecraft.spruce_wood", + "item_id": 145, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 193, + "states": [ + { + "id": 192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 68, + "name": "birch_wood", + "translation_key": "block.minecraft.birch_wood", + "item_id": 146, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 196, + "states": [ + { + "id": 195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 69, + "name": "jungle_wood", + "translation_key": "block.minecraft.jungle_wood", + "item_id": 147, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 199, + "states": [ + { + "id": 198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 70, + "name": "acacia_wood", + "translation_key": "block.minecraft.acacia_wood", + "item_id": 148, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 202, + "states": [ + { + "id": 201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 71, + "name": "cherry_wood", + "translation_key": "block.minecraft.cherry_wood", + "item_id": 149, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 205, + "states": [ + { + "id": 204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 72, + "name": "dark_oak_wood", + "translation_key": "block.minecraft.dark_oak_wood", + "item_id": 150, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 208, + "states": [ + { + "id": 207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 73, + "name": "mangrove_wood", + "translation_key": "block.minecraft.mangrove_wood", + "item_id": 151, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 211, + "states": [ + { + "id": 210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 74, + "name": "stripped_oak_wood", + "translation_key": "block.minecraft.stripped_oak_wood", + "item_id": 133, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 214, + "states": [ + { + "id": 213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 75, + "name": "stripped_spruce_wood", + "translation_key": "block.minecraft.stripped_spruce_wood", + "item_id": 134, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 217, + "states": [ + { + "id": 216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 76, + "name": "stripped_birch_wood", + "translation_key": "block.minecraft.stripped_birch_wood", + "item_id": 135, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 220, + "states": [ + { + "id": 219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 77, + "name": "stripped_jungle_wood", + "translation_key": "block.minecraft.stripped_jungle_wood", + "item_id": 136, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 223, + "states": [ + { + "id": 222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 78, + "name": "stripped_acacia_wood", + "translation_key": "block.minecraft.stripped_acacia_wood", + "item_id": 137, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 226, + "states": [ + { + "id": 225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 79, + "name": "stripped_cherry_wood", + "translation_key": "block.minecraft.stripped_cherry_wood", + "item_id": 138, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 229, + "states": [ + { + "id": 228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 80, + "name": "stripped_dark_oak_wood", + "translation_key": "block.minecraft.stripped_dark_oak_wood", + "item_id": 139, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 232, + "states": [ + { + "id": 231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 81, + "name": "stripped_mangrove_wood", + "translation_key": "block.minecraft.stripped_mangrove_wood", + "item_id": 140, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 235, + "states": [ + { + "id": 234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 82, + "name": "oak_leaves", + "translation_key": "block.minecraft.oak_leaves", + "item_id": 154, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 264, + "states": [ + { + "id": 237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 83, + "name": "spruce_leaves", + "translation_key": "block.minecraft.spruce_leaves", + "item_id": 155, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 292, + "states": [ + { + "id": 265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 84, + "name": "birch_leaves", + "translation_key": "block.minecraft.birch_leaves", + "item_id": 156, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 320, + "states": [ + { + "id": 293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 85, + "name": "jungle_leaves", + "translation_key": "block.minecraft.jungle_leaves", + "item_id": 157, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 348, + "states": [ + { + "id": 321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 86, + "name": "acacia_leaves", + "translation_key": "block.minecraft.acacia_leaves", + "item_id": 158, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 376, + "states": [ + { + "id": 349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 87, + "name": "cherry_leaves", + "translation_key": "block.minecraft.cherry_leaves", + "item_id": 159, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 404, + "states": [ + { + "id": 377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 88, + "name": "dark_oak_leaves", + "translation_key": "block.minecraft.dark_oak_leaves", + "item_id": 160, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 432, + "states": [ + { + "id": 405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 89, + "name": "mangrove_leaves", + "translation_key": "block.minecraft.mangrove_leaves", + "item_id": 161, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 460, + "states": [ + { + "id": 433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 90, + "name": "azalea_leaves", + "translation_key": "block.minecraft.azalea_leaves", + "item_id": 162, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 488, + "states": [ + { + "id": 461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 91, + "name": "flowering_azalea_leaves", + "translation_key": "block.minecraft.flowering_azalea_leaves", + "item_id": 163, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "distance", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "persistent", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 516, + "states": [ + { + "id": 489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 92, + "name": "sponge", + "translation_key": "block.minecraft.sponge", + "item_id": 164, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 517, + "states": [ + { + "id": 517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 93, + "name": "wet_sponge", + "translation_key": "block.minecraft.wet_sponge", + "item_id": 165, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 518, + "states": [ + { + "id": 518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 94, + "name": "glass", + "translation_key": "block.minecraft.glass", + "item_id": 166, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 519, + "states": [ + { + "id": 519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 95, + "name": "lapis_ore", + "translation_key": "block.minecraft.lapis_ore", + "item_id": 61, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 520, + "states": [ + { + "id": 520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 96, + "name": "deepslate_lapis_ore", + "translation_key": "block.minecraft.deepslate_lapis_ore", + "item_id": 62, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 521, + "states": [ + { + "id": 521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 97, + "name": "lapis_block", + "translation_key": "block.minecraft.lapis_block", + "item_id": 168, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 522, + "states": [ + { + "id": 522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 98, + "name": "dispenser", + "translation_key": "block.minecraft.dispenser", + "item_id": 646, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "triggered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 524, + "states": [ + { + "id": 523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + }, + { + "id": 534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 5 + } + ] + }, + { + "id": 99, + "name": "sandstone", + "translation_key": "block.minecraft.sandstone", + "item_id": 169, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 535, + "states": [ + { + "id": 535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 100, + "name": "chiseled_sandstone", + "translation_key": "block.minecraft.chiseled_sandstone", + "item_id": 170, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 536, + "states": [ + { + "id": 536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 101, + "name": "cut_sandstone", + "translation_key": "block.minecraft.cut_sandstone", + "item_id": 171, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 537, + "states": [ + { + "id": 537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 102, + "name": "note_block", + "translation_key": "block.minecraft.note_block", + "item_id": 659, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "instrument", + "values": [ + "harp", + "basedrum", + "snare", + "hat", + "bass", + "flute", + "bell", + "guitar", + "chime", + "xylophone", + "iron_xylophone", + "cow_bell", + "didgeridoo", + "bit", + "banjo", + "pling", + "zombie", + "skeleton", + "creeper", + "dragon", + "wither_skeleton", + "piglin", + "custom_head" + ] + }, + { + "name": "note", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 539, + "states": [ + { + "id": 538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 103, + "name": "white_bed", + "translation_key": "block.minecraft.white_bed", + "item_id": 924, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1691, + "states": [ + { + "id": 1688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 104, + "name": "orange_bed", + "translation_key": "block.minecraft.orange_bed", + "item_id": 925, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1707, + "states": [ + { + "id": 1704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 105, + "name": "magenta_bed", + "translation_key": "block.minecraft.magenta_bed", + "item_id": 926, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1723, + "states": [ + { + "id": 1720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 106, + "name": "light_blue_bed", + "translation_key": "block.minecraft.light_blue_bed", + "item_id": 927, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1739, + "states": [ + { + "id": 1736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 107, + "name": "yellow_bed", + "translation_key": "block.minecraft.yellow_bed", + "item_id": 928, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1755, + "states": [ + { + "id": 1752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 108, + "name": "lime_bed", + "translation_key": "block.minecraft.lime_bed", + "item_id": 929, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1771, + "states": [ + { + "id": 1768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 109, + "name": "pink_bed", + "translation_key": "block.minecraft.pink_bed", + "item_id": 930, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1787, + "states": [ + { + "id": 1784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 110, + "name": "gray_bed", + "translation_key": "block.minecraft.gray_bed", + "item_id": 931, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1803, + "states": [ + { + "id": 1800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 111, + "name": "light_gray_bed", + "translation_key": "block.minecraft.light_gray_bed", + "item_id": 932, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1819, + "states": [ + { + "id": 1816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 112, + "name": "cyan_bed", + "translation_key": "block.minecraft.cyan_bed", + "item_id": 933, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1835, + "states": [ + { + "id": 1832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1837, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1840, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1841, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1844, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1845, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 113, + "name": "purple_bed", + "translation_key": "block.minecraft.purple_bed", + "item_id": 934, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1851, + "states": [ + { + "id": 1848, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1849, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1852, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1853, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1856, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1857, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1858, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1859, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1860, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1861, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1862, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1863, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 114, + "name": "blue_bed", + "translation_key": "block.minecraft.blue_bed", + "item_id": 935, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1867, + "states": [ + { + "id": 1864, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1865, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1866, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1867, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1868, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1869, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1870, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1871, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1872, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1874, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1875, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1876, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1877, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1878, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1879, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 115, + "name": "brown_bed", + "translation_key": "block.minecraft.brown_bed", + "item_id": 936, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1883, + "states": [ + { + "id": 1880, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1881, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1882, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1883, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1884, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1885, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1886, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1887, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1888, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1889, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1890, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1891, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1892, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1893, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1894, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1895, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 116, + "name": "green_bed", + "translation_key": "block.minecraft.green_bed", + "item_id": 937, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1899, + "states": [ + { + "id": 1896, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1897, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1898, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1899, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1900, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1901, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1902, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1903, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1904, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1905, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1906, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1907, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1908, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1909, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1910, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1911, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 117, + "name": "red_bed", + "translation_key": "block.minecraft.red_bed", + "item_id": 938, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1915, + "states": [ + { + "id": 1912, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1913, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1914, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1915, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1916, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1917, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1918, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1919, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1920, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1921, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1922, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1923, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1924, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1925, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1926, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1927, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 118, + "name": "black_bed", + "translation_key": "block.minecraft.black_bed", + "item_id": 939, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "part", + "values": [ + "head", + "foot" + ] + } + ], + "default_state_id": 1931, + "states": [ + { + "id": 1928, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1929, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1930, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1931, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1932, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1933, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1934, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 5, + 6, + 7, + 8 + ], + "block_entity_type": 24 + }, + { + "id": 1935, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 2, + 3, + 4 + ], + "block_entity_type": 24 + }, + { + "id": 1936, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1937, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1938, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1939, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1940, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1941, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + }, + { + "id": 1942, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 2, + 6, + 12, + 13 + ], + "block_entity_type": 24 + }, + { + "id": 1943, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 1, + 5, + 9, + 10, + 11 + ], + "block_entity_type": 24 + } + ] + }, + { + "id": 119, + "name": "powered_rail", + "translation_key": "block.minecraft.powered_rail", + "item_id": 723, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "shape", + "values": [ + "north_south", + "east_west", + "ascending_east", + "ascending_west", + "ascending_north", + "ascending_south" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 1957, + "states": [ + { + "id": 1944, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1945, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1946, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1947, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1948, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1949, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1950, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1951, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1952, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1953, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1954, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1955, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1956, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1957, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1958, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 120, + "name": "detector_rail", + "translation_key": "block.minecraft.detector_rail", + "item_id": 724, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "shape", + "values": [ + "north_south", + "east_west", + "ascending_east", + "ascending_west", + "ascending_north", + "ascending_south" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 1981, + "states": [ + { + "id": 1968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 1991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 121, + "name": "sticky_piston", + "translation_key": "block.minecraft.sticky_piston", + "item_id": 641, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "extended", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 1998, + "states": [ + { + "id": 1992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 14 + ] + }, + { + "id": 1993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 15 + ] + }, + { + "id": 1994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 16 + ] + }, + { + "id": 1995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 17 + ] + }, + { + "id": 1996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 18 + ] + }, + { + "id": 1997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 19 + ] + }, + { + "id": 1998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 1999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 122, + "name": "cobweb", + "translation_key": "block.minecraft.cobweb", + "item_id": 172, + "hardness": 4.0, + "blast_resistance": 4.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2004, + "states": [ + { + "id": 2004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 123, + "name": "grass", + "translation_key": "block.minecraft.grass", + "item_id": 173, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2005, + "states": [ + { + "id": 2005, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 124, + "name": "fern", + "translation_key": "block.minecraft.fern", + "item_id": 174, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2006, + "states": [ + { + "id": 2006, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 125, + "name": "dead_bush", + "translation_key": "block.minecraft.dead_bush", + "item_id": 177, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2007, + "states": [ + { + "id": 2007, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 126, + "name": "seagrass", + "translation_key": "block.minecraft.seagrass", + "item_id": 178, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2008, + "states": [ + { + "id": 2008, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 127, + "name": "tall_seagrass", + "translation_key": "block.minecraft.tall_seagrass", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 2010, + "states": [ + { + "id": 2009, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2010, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 128, + "name": "piston", + "translation_key": "block.minecraft.piston", + "item_id": 640, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "extended", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 2017, + "states": [ + { + "id": 2011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 14 + ] + }, + { + "id": 2012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 15 + ] + }, + { + "id": 2013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 16 + ] + }, + { + "id": 2014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 17 + ] + }, + { + "id": 2015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 18 + ] + }, + { + "id": 2016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 19 + ] + }, + { + "id": 2017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 129, + "name": "piston_head", + "translation_key": "block.minecraft.piston_head", + "item_id": 0, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "short", + "values": [ + "true", + "false" + ] + }, + { + "name": "type", + "values": [ + "normal", + "sticky" + ] + } + ], + "default_state_id": 2025, + "states": [ + { + "id": 2023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 20, + 21 + ] + }, + { + "id": 2024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 20, + 21 + ] + }, + { + "id": 2025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 20, + 22 + ] + }, + { + "id": 2026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 20, + 22 + ] + }, + { + "id": 2027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 23, + 24 + ] + }, + { + "id": 2028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 23, + 24 + ] + }, + { + "id": 2029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 23, + 25 + ] + }, + { + "id": 2030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 23, + 25 + ] + }, + { + "id": 2031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 26, + 27 + ] + }, + { + "id": 2032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 26, + 27 + ] + }, + { + "id": 2033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 26, + 28 + ] + }, + { + "id": 2034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 26, + 28 + ] + }, + { + "id": 2035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 29, + 30 + ] + }, + { + "id": 2036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 29, + 30 + ] + }, + { + "id": 2037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 29, + 31 + ] + }, + { + "id": 2038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 29, + 31 + ] + }, + { + "id": 2039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32, + 33, + 34, + 35, + 36 + ] + }, + { + "id": 2040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32, + 33, + 34, + 35, + 36 + ] + }, + { + "id": 2041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 37, + 33, + 34, + 35, + 36 + ] + }, + { + "id": 2042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 37, + 33, + 34, + 35, + 36 + ] + }, + { + "id": 2043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 38, + 39 + ] + }, + { + "id": 2044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 38, + 39 + ] + }, + { + "id": 2045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 38, + 40 + ] + }, + { + "id": 2046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 38, + 40 + ] + } + ] + }, + { + "id": 130, + "name": "white_wool", + "translation_key": "block.minecraft.white_wool", + "item_id": 180, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2047, + "states": [ + { + "id": 2047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 131, + "name": "orange_wool", + "translation_key": "block.minecraft.orange_wool", + "item_id": 181, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2048, + "states": [ + { + "id": 2048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 132, + "name": "magenta_wool", + "translation_key": "block.minecraft.magenta_wool", + "item_id": 182, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2049, + "states": [ + { + "id": 2049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 133, + "name": "light_blue_wool", + "translation_key": "block.minecraft.light_blue_wool", + "item_id": 183, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2050, + "states": [ + { + "id": 2050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 134, + "name": "yellow_wool", + "translation_key": "block.minecraft.yellow_wool", + "item_id": 184, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2051, + "states": [ + { + "id": 2051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 135, + "name": "lime_wool", + "translation_key": "block.minecraft.lime_wool", + "item_id": 185, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2052, + "states": [ + { + "id": 2052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 136, + "name": "pink_wool", + "translation_key": "block.minecraft.pink_wool", + "item_id": 186, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2053, + "states": [ + { + "id": 2053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 137, + "name": "gray_wool", + "translation_key": "block.minecraft.gray_wool", + "item_id": 187, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2054, + "states": [ + { + "id": 2054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 138, + "name": "light_gray_wool", + "translation_key": "block.minecraft.light_gray_wool", + "item_id": 188, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2055, + "states": [ + { + "id": 2055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 139, + "name": "cyan_wool", + "translation_key": "block.minecraft.cyan_wool", + "item_id": 189, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2056, + "states": [ + { + "id": 2056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 140, + "name": "purple_wool", + "translation_key": "block.minecraft.purple_wool", + "item_id": 190, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2057, + "states": [ + { + "id": 2057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 141, + "name": "blue_wool", + "translation_key": "block.minecraft.blue_wool", + "item_id": 191, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2058, + "states": [ + { + "id": 2058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 142, + "name": "brown_wool", + "translation_key": "block.minecraft.brown_wool", + "item_id": 192, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2059, + "states": [ + { + "id": 2059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 143, + "name": "green_wool", + "translation_key": "block.minecraft.green_wool", + "item_id": 193, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2060, + "states": [ + { + "id": 2060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 144, + "name": "red_wool", + "translation_key": "block.minecraft.red_wool", + "item_id": 194, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2061, + "states": [ + { + "id": 2061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 145, + "name": "black_wool", + "translation_key": "block.minecraft.black_wool", + "item_id": 195, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2062, + "states": [ + { + "id": 2062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 146, + "name": "moving_piston", + "translation_key": "block.minecraft.moving_piston", + "item_id": 0, + "hardness": -1.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "type", + "values": [ + "normal", + "sticky" + ] + } + ], + "default_state_id": 2063, + "states": [ + { + "id": 2063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + }, + { + "id": 2074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 10 + } + ] + }, + { + "id": 147, + "name": "dandelion", + "translation_key": "block.minecraft.dandelion", + "item_id": 196, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2075, + "states": [ + { + "id": 2075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 148, + "name": "torchflower", + "translation_key": "block.minecraft.torchflower", + "item_id": 209, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2076, + "states": [ + { + "id": 2076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 149, + "name": "poppy", + "translation_key": "block.minecraft.poppy", + "item_id": 197, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2077, + "states": [ + { + "id": 2077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 150, + "name": "blue_orchid", + "translation_key": "block.minecraft.blue_orchid", + "item_id": 198, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2078, + "states": [ + { + "id": 2078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 151, + "name": "allium", + "translation_key": "block.minecraft.allium", + "item_id": 199, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2079, + "states": [ + { + "id": 2079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 152, + "name": "azure_bluet", + "translation_key": "block.minecraft.azure_bluet", + "item_id": 200, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2080, + "states": [ + { + "id": 2080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 153, + "name": "red_tulip", + "translation_key": "block.minecraft.red_tulip", + "item_id": 201, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2081, + "states": [ + { + "id": 2081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 154, + "name": "orange_tulip", + "translation_key": "block.minecraft.orange_tulip", + "item_id": 202, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2082, + "states": [ + { + "id": 2082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 155, + "name": "white_tulip", + "translation_key": "block.minecraft.white_tulip", + "item_id": 203, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2083, + "states": [ + { + "id": 2083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 156, + "name": "pink_tulip", + "translation_key": "block.minecraft.pink_tulip", + "item_id": 204, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2084, + "states": [ + { + "id": 2084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 157, + "name": "oxeye_daisy", + "translation_key": "block.minecraft.oxeye_daisy", + "item_id": 205, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2085, + "states": [ + { + "id": 2085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 158, + "name": "cornflower", + "translation_key": "block.minecraft.cornflower", + "item_id": 206, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2086, + "states": [ + { + "id": 2086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 159, + "name": "wither_rose", + "translation_key": "block.minecraft.wither_rose", + "item_id": 208, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2087, + "states": [ + { + "id": 2087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 160, + "name": "lily_of_the_valley", + "translation_key": "block.minecraft.lily_of_the_valley", + "item_id": 207, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2088, + "states": [ + { + "id": 2088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 161, + "name": "brown_mushroom", + "translation_key": "block.minecraft.brown_mushroom", + "item_id": 212, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2089, + "states": [ + { + "id": 2089, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 162, + "name": "red_mushroom", + "translation_key": "block.minecraft.red_mushroom", + "item_id": 213, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2090, + "states": [ + { + "id": 2090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 163, + "name": "gold_block", + "translation_key": "block.minecraft.gold_block", + "item_id": 76, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2091, + "states": [ + { + "id": 2091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 164, + "name": "iron_block", + "translation_key": "block.minecraft.iron_block", + "item_id": 74, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2092, + "states": [ + { + "id": 2092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 165, + "name": "bricks", + "translation_key": "block.minecraft.bricks", + "item_id": 263, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2093, + "states": [ + { + "id": 2093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 166, + "name": "tnt", + "translation_key": "block.minecraft.tnt", + "item_id": 657, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "unstable", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 2095, + "states": [ + { + "id": 2094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 2095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 167, + "name": "bookshelf", + "translation_key": "block.minecraft.bookshelf", + "item_id": 264, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2096, + "states": [ + { + "id": 2096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 168, + "name": "chiseled_bookshelf", + "translation_key": "block.minecraft.chiseled_bookshelf", + "item_id": 265, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "slot_0_occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "slot_1_occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "slot_2_occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "slot_3_occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "slot_4_occupied", + "values": [ + "true", + "false" + ] + }, + { + "name": "slot_5_occupied", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 2160, + "states": [ + { + "id": 2097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + }, + { + "id": 2352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 38 + } + ] + }, + { + "id": 169, + "name": "mossy_cobblestone", + "translation_key": "block.minecraft.mossy_cobblestone", + "item_id": 267, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2353, + "states": [ + { + "id": 2353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 170, + "name": "obsidian", + "translation_key": "block.minecraft.obsidian", + "item_id": 268, + "hardness": 50.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2354, + "states": [ + { + "id": 2354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 171, + "name": "torch", + "translation_key": "block.minecraft.torch", + "item_id": 269, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 172, + "properties": [], + "default_state_id": 2355, + "states": [ + { + "id": 2355, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 172, + "name": "wall_torch", + "translation_key": "block.minecraft.torch", + "item_id": 269, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 2356, + "states": [ + { + "id": 2356, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2357, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2358, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2359, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 173, + "name": "fire", + "translation_key": "block.minecraft.fire", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 2391, + "states": [ + { + "id": 2360, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2361, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2362, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2363, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2364, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2365, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2366, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2367, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2368, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2369, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2370, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2371, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2372, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2373, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2374, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2375, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2376, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2377, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2378, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2379, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2380, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2381, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2382, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2383, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2384, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2385, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2386, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2387, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2388, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2389, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2390, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2391, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2392, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2393, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2394, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2395, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2396, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2397, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2398, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2399, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2400, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2401, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2402, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2403, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2404, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2405, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2406, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2407, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2408, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2409, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2410, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2411, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2412, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2413, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2414, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2415, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2416, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2417, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2418, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2419, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2420, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2421, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2422, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2423, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2424, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2425, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2426, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2427, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2428, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2429, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2430, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2431, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2432, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2433, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2434, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2435, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2436, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2437, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2438, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2439, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2440, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2441, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2442, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2443, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2444, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2445, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2446, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2447, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2448, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2449, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2450, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2451, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2452, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2453, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2454, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2455, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2456, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2457, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2458, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2459, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2460, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2461, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2462, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2463, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2464, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2465, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2466, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2467, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2468, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2469, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2470, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2471, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2472, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2473, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2474, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2475, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2476, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2477, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2478, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2479, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2480, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2481, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2482, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2483, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2484, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2485, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2486, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2487, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2488, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2489, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2490, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2491, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2492, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2493, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2494, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2495, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2496, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2497, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2498, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2499, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2500, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2501, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2502, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2503, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2504, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2505, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2506, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2507, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2508, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2509, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2510, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2511, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2512, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2513, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2514, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2515, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2516, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2517, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2518, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2519, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2520, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2521, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2522, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2523, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2524, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2525, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2526, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2527, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2528, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2529, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2530, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2531, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2532, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2533, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2534, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2535, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2536, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2537, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2538, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2539, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2540, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2541, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2542, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2543, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2544, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2545, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2546, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2547, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2548, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2549, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2550, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2551, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2552, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2553, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2554, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2555, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2556, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2557, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2558, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2559, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2560, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2561, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2562, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2563, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2564, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2565, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2566, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2567, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2568, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2569, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2570, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2571, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2572, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2573, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2574, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2575, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2576, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2577, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2578, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2579, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2580, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2581, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2582, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2583, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2584, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2585, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2586, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2587, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2588, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2589, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2590, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2591, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2592, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2593, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2594, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2595, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2596, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2597, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2598, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2599, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2600, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2601, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2602, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2603, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2604, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2605, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2606, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2607, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2608, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2609, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2610, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2611, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2612, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2613, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2614, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2615, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2616, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2617, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2618, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2619, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2620, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2621, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2622, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2623, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2624, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2625, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2626, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2627, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2628, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2629, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2630, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2631, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2632, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2633, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2634, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2635, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2636, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2637, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2638, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2639, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2640, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2641, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2642, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2643, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2644, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2645, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2646, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2647, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2648, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2649, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2650, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2651, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2652, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2653, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2654, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2655, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2656, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2657, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2658, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2659, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2660, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2661, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2662, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2663, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2664, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2665, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2666, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2667, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2668, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2669, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2670, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2671, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2672, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2673, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2674, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2675, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2676, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2677, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2678, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2679, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2680, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2681, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2682, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2683, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2684, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2685, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2686, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2687, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2688, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2689, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2690, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2691, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2692, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2693, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2694, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2695, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2696, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2697, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2698, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2699, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2700, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2701, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2702, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2703, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2704, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2705, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2706, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2707, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2708, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2709, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2710, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2711, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2712, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2713, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2714, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2715, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2716, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2717, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2718, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2719, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2720, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2721, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2722, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2723, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2724, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2725, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2726, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2727, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2728, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2729, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2730, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2731, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2732, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2733, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2734, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2735, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2736, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2737, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2738, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2739, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2740, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2741, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2742, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2743, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2744, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2745, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2746, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2747, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2748, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2749, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2750, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2751, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2752, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2753, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2754, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2755, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2756, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2757, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2758, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2759, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2760, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2761, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2762, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2763, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2764, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2765, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2766, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2767, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2768, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2769, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2770, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2771, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2772, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2773, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2774, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2775, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2776, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2777, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2778, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2779, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2780, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2781, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2782, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2783, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2784, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2785, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2786, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2787, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2788, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2789, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2790, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2791, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2792, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2793, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2794, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2795, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2796, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2797, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2798, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2799, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2800, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2801, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2802, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2803, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2804, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2805, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2806, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2807, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2808, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2809, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2810, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2811, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2812, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2813, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2814, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2815, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2816, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2817, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2818, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2819, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2820, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2821, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2822, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2823, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2824, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2825, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2826, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2827, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2828, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2829, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2830, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2831, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2832, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2833, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2834, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2835, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2836, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2837, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2838, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2839, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2840, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2841, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2842, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2843, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2844, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2845, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2846, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2847, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2848, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2849, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2850, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2851, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2852, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2853, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2854, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2855, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2856, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2857, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2858, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2859, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2860, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2861, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2862, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2863, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2864, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2865, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2866, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2867, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2868, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2869, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2870, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2871, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 174, + "name": "soul_fire", + "translation_key": "block.minecraft.soul_fire", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2872, + "states": [ + { + "id": 2872, + "luminance": 10, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 175, + "name": "spawner", + "translation_key": "block.minecraft.spawner", + "item_id": 276, + "hardness": 5.0, + "blast_resistance": 5.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 2873, + "states": [ + { + "id": 2873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 9 + } + ] + }, + { + "id": 176, + "name": "oak_stairs", + "translation_key": "block.minecraft.oak_stairs", + "item_id": 361, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 2885, + "states": [ + { + "id": 2874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 2875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 2876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 2877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 2878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 2879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 2880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 2881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 2882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 2883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 2884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 2885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 2886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 2887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 2888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 2889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 2890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 2891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 2892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 2893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 2894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 2895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 2896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 2897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 2898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 2899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 2900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 2901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 2902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 2903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 2904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 2905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 2906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 2907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 2908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 2909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 2910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 2911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 2912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 2913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 2914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 2915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 2916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 2917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 2918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 2919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 2920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 2921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 2922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 2923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 2924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 2925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 2926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 2927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 2928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 2929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 2930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 2931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 2932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 2933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 2934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 2935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 2936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 2937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 2938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 2939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 2940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 2941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 2942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 2943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 2944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 2945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 2946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 2947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 2948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 2949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 2950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 2951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 2952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 2953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 177, + "name": "chest", + "translation_key": "block.minecraft.chest", + "item_id": 277, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "type", + "values": [ + "single", + "left", + "right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 2955, + "states": [ + { + "id": 2954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 1 + }, + { + "id": 2957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 1 + }, + { + "id": 2958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 1 + }, + { + "id": 2959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 1 + }, + { + "id": 2960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 1 + }, + { + "id": 2963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 1 + }, + { + "id": 2964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 1 + }, + { + "id": 2965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 1 + }, + { + "id": 2966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 1 + }, + { + "id": 2969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 1 + }, + { + "id": 2970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 1 + }, + { + "id": 2971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 1 + }, + { + "id": 2972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 1 + }, + { + "id": 2974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 1 + }, + { + "id": 2975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 1 + }, + { + "id": 2976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 1 + }, + { + "id": 2977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 1 + } + ] + }, + { + "id": 178, + "name": "redstone_wire", + "translation_key": "block.minecraft.redstone_wire", + "item_id": 635, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "up", + "side", + "none" + ] + }, + { + "name": "north", + "values": [ + "up", + "side", + "none" + ] + }, + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "south", + "values": [ + "up", + "side", + "none" + ] + }, + { + "name": "west", + "values": [ + "up", + "side", + "none" + ] + } + ], + "default_state_id": 4138, + "states": [ + { + "id": 2978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 2999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3215, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3216, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3217, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3218, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3219, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3220, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3221, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3222, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3223, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3226, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3227, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3228, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3229, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3230, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3553, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3554, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3555, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3556, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3557, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3558, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3559, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3560, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3561, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3562, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3563, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3564, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3565, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3566, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3837, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3840, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3841, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3844, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3845, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3848, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3849, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3852, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3853, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3856, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3857, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3858, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3859, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3860, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3861, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3862, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3863, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3864, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3865, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3866, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3867, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3868, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3869, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3870, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3871, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3872, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3874, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3875, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3876, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3877, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3878, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3879, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3880, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3881, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3882, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3883, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3884, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3885, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3886, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3887, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3888, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3889, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3890, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3891, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3892, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3893, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3894, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3895, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3896, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3897, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3898, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3899, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3900, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3901, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3902, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3903, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3904, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3905, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3906, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3907, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3908, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3909, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3910, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3911, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3912, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3913, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3914, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3915, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3916, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3917, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3918, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3919, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3920, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3921, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3922, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3923, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3924, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3925, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3926, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3927, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3928, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3929, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3930, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3931, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3932, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3933, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3934, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3935, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3936, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3937, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3938, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3939, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3940, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3941, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3942, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3943, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3944, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3945, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3946, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3947, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3948, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3949, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3950, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3951, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3952, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3953, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3954, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3955, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3956, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3957, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3958, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 3999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4215, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4216, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4217, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4218, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4219, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4220, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4221, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4222, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4223, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4226, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4227, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4228, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4229, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4230, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 179, + "name": "diamond_ore", + "translation_key": "block.minecraft.diamond_ore", + "item_id": 63, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 4274, + "states": [ + { + "id": 4274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 180, + "name": "deepslate_diamond_ore", + "translation_key": "block.minecraft.deepslate_diamond_ore", + "item_id": 64, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 4275, + "states": [ + { + "id": 4275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 181, + "name": "diamond_block", + "translation_key": "block.minecraft.diamond_block", + "item_id": 77, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 4276, + "states": [ + { + "id": 4276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 182, + "name": "crafting_table", + "translation_key": "block.minecraft.crafting_table", + "item_id": 278, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 4277, + "states": [ + { + "id": 4277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 183, + "name": "wheat", + "translation_key": "block.minecraft.wheat", + "item_id": 813, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 4278, + "states": [ + { + "id": 4278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 184, + "name": "farmland", + "translation_key": "block.minecraft.farmland", + "item_id": 279, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "moisture", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 4286, + "states": [ + { + "id": 4286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + }, + { + "id": 4293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + } + ] + }, + { + "id": 185, + "name": "furnace", + "translation_key": "block.minecraft.furnace", + "item_id": 280, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4295, + "states": [ + { + "id": 4294, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4296, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4298, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4300, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + }, + { + "id": 4301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 0 + } + ] + }, + { + "id": 186, + "name": "oak_sign", + "translation_key": "block.minecraft.oak_sign", + "item_id": 846, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 199, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4303, + "states": [ + { + "id": 4302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 187, + "name": "spruce_sign", + "translation_key": "block.minecraft.spruce_sign", + "item_id": 847, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 200, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4335, + "states": [ + { + "id": 4334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 188, + "name": "birch_sign", + "translation_key": "block.minecraft.birch_sign", + "item_id": 848, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 201, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4367, + "states": [ + { + "id": 4366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 189, + "name": "acacia_sign", + "translation_key": "block.minecraft.acacia_sign", + "item_id": 850, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 202, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4399, + "states": [ + { + "id": 4398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 190, + "name": "cherry_sign", + "translation_key": "block.minecraft.cherry_sign", + "item_id": 851, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 203, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4431, + "states": [ + { + "id": 4430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 191, + "name": "jungle_sign", + "translation_key": "block.minecraft.jungle_sign", + "item_id": 849, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 204, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4463, + "states": [ + { + "id": 4462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 192, + "name": "dark_oak_sign", + "translation_key": "block.minecraft.dark_oak_sign", + "item_id": 852, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 205, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4495, + "states": [ + { + "id": 4494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 193, + "name": "mangrove_sign", + "translation_key": "block.minecraft.mangrove_sign", + "item_id": 853, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 206, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4527, + "states": [ + { + "id": 4526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4553, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4554, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4555, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4556, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4557, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 194, + "name": "bamboo_sign", + "translation_key": "block.minecraft.bamboo_sign", + "item_id": 854, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 207, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4559, + "states": [ + { + "id": 4558, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4559, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4560, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4561, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4562, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4563, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4564, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4565, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4566, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 195, + "name": "oak_door", + "translation_key": "block.minecraft.oak_door", + "item_id": 689, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4601, + "states": [ + { + "id": 4590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 196, + "name": "ladder", + "translation_key": "block.minecraft.ladder", + "item_id": 281, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4655, + "states": [ + { + "id": 4654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 65 + ] + }, + { + "id": 4656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 67 + ] + }, + { + "id": 4658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 66 + ] + }, + { + "id": 4660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 64 + ] + }, + { + "id": 4661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 197, + "name": "rail", + "translation_key": "block.minecraft.rail", + "item_id": 725, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "shape", + "values": [ + "north_south", + "east_west", + "ascending_east", + "ascending_west", + "ascending_north", + "ascending_south", + "south_east", + "south_west", + "north_west", + "north_east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4663, + "states": [ + { + "id": 4662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 4681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 198, + "name": "cobblestone_stairs", + "translation_key": "block.minecraft.cobblestone_stairs", + "item_id": 282, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4693, + "states": [ + { + "id": 4682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 4683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 4684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 4685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 4686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 4687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 4688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 4689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 4690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 4691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 4692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 4693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 4694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 4695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 4696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 4697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 4698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 4699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 4700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 4701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 4702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 4703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 4704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 4705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 4706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 4707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 4708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 4709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 4710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 4711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 4712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 4713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 4714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 4715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 4716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 4717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 4718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 4719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 4720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 4721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 4722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 4723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 4724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 4725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 4726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 4727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 4728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 4729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 4730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 4731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 4732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 4733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 4734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 4735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 4736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 4737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 4738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 4739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 4740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 4741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 4742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 4743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 4744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 4745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 4746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 4747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 4748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 4749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 4750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 4751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 4752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 4753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 4754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 4755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 4756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 4757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 4758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 4759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 4760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 4761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 199, + "name": "oak_wall_sign", + "translation_key": "block.minecraft.oak_sign", + "item_id": 846, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4763, + "states": [ + { + "id": 4762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 200, + "name": "spruce_wall_sign", + "translation_key": "block.minecraft.spruce_sign", + "item_id": 847, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4771, + "states": [ + { + "id": 4770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 201, + "name": "birch_wall_sign", + "translation_key": "block.minecraft.birch_sign", + "item_id": 848, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4779, + "states": [ + { + "id": 4778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 202, + "name": "acacia_wall_sign", + "translation_key": "block.minecraft.acacia_sign", + "item_id": 850, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4787, + "states": [ + { + "id": 4786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 203, + "name": "cherry_wall_sign", + "translation_key": "block.minecraft.cherry_sign", + "item_id": 851, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4795, + "states": [ + { + "id": 4794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 204, + "name": "jungle_wall_sign", + "translation_key": "block.minecraft.jungle_sign", + "item_id": 849, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4803, + "states": [ + { + "id": 4802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 205, + "name": "dark_oak_wall_sign", + "translation_key": "block.minecraft.dark_oak_sign", + "item_id": 852, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4811, + "states": [ + { + "id": 4810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 206, + "name": "mangrove_wall_sign", + "translation_key": "block.minecraft.mangrove_sign", + "item_id": 853, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4819, + "states": [ + { + "id": 4818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 207, + "name": "bamboo_wall_sign", + "translation_key": "block.minecraft.bamboo_sign", + "item_id": 854, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4827, + "states": [ + { + "id": 4826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 4833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 208, + "name": "oak_hanging_sign", + "translation_key": "block.minecraft.oak_hanging_sign", + "item_id": 857, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 219, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4867, + "states": [ + { + "id": 4834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4837, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4840, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4841, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4844, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4845, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4848, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4849, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4852, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4853, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4856, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4857, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4858, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4859, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4860, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4861, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4862, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4863, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4864, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4865, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4866, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4867, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4868, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4869, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4870, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4871, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4872, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4874, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4875, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4876, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4877, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4878, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4879, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4880, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4881, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4882, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4883, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4884, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4885, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4886, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4887, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4888, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4889, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4890, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4891, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4892, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4893, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4894, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4895, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4896, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4897, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 209, + "name": "spruce_hanging_sign", + "translation_key": "block.minecraft.spruce_hanging_sign", + "item_id": 858, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 220, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4931, + "states": [ + { + "id": 4898, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4899, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4900, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4901, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4902, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4903, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4904, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4905, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4906, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4907, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4908, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4909, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4910, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4911, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4912, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4913, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4914, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4915, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4916, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4917, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4918, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4919, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4920, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4921, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4922, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4923, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4924, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4925, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4926, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4927, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4928, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4929, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4930, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4931, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4932, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4933, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4934, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4935, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4936, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4937, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4938, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4939, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4940, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4941, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4942, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4943, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4944, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4945, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4946, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4947, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4948, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4949, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4950, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4951, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4952, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4953, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4954, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4955, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4956, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4957, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4958, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 210, + "name": "birch_hanging_sign", + "translation_key": "block.minecraft.birch_hanging_sign", + "item_id": 859, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 221, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 4995, + "states": [ + { + "id": 4962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 4999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 211, + "name": "acacia_hanging_sign", + "translation_key": "block.minecraft.acacia_hanging_sign", + "item_id": 861, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 222, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5059, + "states": [ + { + "id": 5026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 212, + "name": "cherry_hanging_sign", + "translation_key": "block.minecraft.cherry_hanging_sign", + "item_id": 862, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 223, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5123, + "states": [ + { + "id": 5090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 213, + "name": "jungle_hanging_sign", + "translation_key": "block.minecraft.jungle_hanging_sign", + "item_id": 860, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 224, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5187, + "states": [ + { + "id": 5154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5215, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5216, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5217, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 214, + "name": "dark_oak_hanging_sign", + "translation_key": "block.minecraft.dark_oak_hanging_sign", + "item_id": 863, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 225, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5251, + "states": [ + { + "id": 5218, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5219, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5220, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5221, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5222, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5223, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5226, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5227, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5228, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5229, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5230, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 215, + "name": "crimson_hanging_sign", + "translation_key": "block.minecraft.crimson_hanging_sign", + "item_id": 866, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 227, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5315, + "states": [ + { + "id": 5282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 216, + "name": "warped_hanging_sign", + "translation_key": "block.minecraft.warped_hanging_sign", + "item_id": 867, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 228, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5379, + "states": [ + { + "id": 5346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 217, + "name": "mangrove_hanging_sign", + "translation_key": "block.minecraft.mangrove_hanging_sign", + "item_id": 864, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 226, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5443, + "states": [ + { + "id": 5410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 218, + "name": "bamboo_hanging_sign", + "translation_key": "block.minecraft.bamboo_hanging_sign", + "item_id": 865, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 229, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5507, + "states": [ + { + "id": 5474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + }, + { + "id": 5537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 8 + } + ] + }, + { + "id": 219, + "name": "oak_wall_hanging_sign", + "translation_key": "block.minecraft.oak_hanging_sign", + "item_id": 857, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5539, + "states": [ + { + "id": 5538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 220, + "name": "spruce_wall_hanging_sign", + "translation_key": "block.minecraft.spruce_hanging_sign", + "item_id": 858, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5547, + "states": [ + { + "id": 5546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5553, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 221, + "name": "birch_wall_hanging_sign", + "translation_key": "block.minecraft.birch_hanging_sign", + "item_id": 859, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5555, + "states": [ + { + "id": 5554, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5555, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5556, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5557, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5558, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5559, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5560, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5561, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 222, + "name": "acacia_wall_hanging_sign", + "translation_key": "block.minecraft.acacia_hanging_sign", + "item_id": 861, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5563, + "states": [ + { + "id": 5562, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5563, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5564, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5565, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5566, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 223, + "name": "cherry_wall_hanging_sign", + "translation_key": "block.minecraft.cherry_hanging_sign", + "item_id": 862, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5571, + "states": [ + { + "id": 5570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 224, + "name": "jungle_wall_hanging_sign", + "translation_key": "block.minecraft.jungle_hanging_sign", + "item_id": 860, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5579, + "states": [ + { + "id": 5578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 225, + "name": "dark_oak_wall_hanging_sign", + "translation_key": "block.minecraft.dark_oak_hanging_sign", + "item_id": 863, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5587, + "states": [ + { + "id": 5586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 226, + "name": "mangrove_wall_hanging_sign", + "translation_key": "block.minecraft.mangrove_hanging_sign", + "item_id": 864, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5595, + "states": [ + { + "id": 5594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 227, + "name": "crimson_wall_hanging_sign", + "translation_key": "block.minecraft.crimson_hanging_sign", + "item_id": 866, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5603, + "states": [ + { + "id": 5602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 228, + "name": "warped_wall_hanging_sign", + "translation_key": "block.minecraft.warped_hanging_sign", + "item_id": 867, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5611, + "states": [ + { + "id": 5610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 229, + "name": "bamboo_wall_hanging_sign", + "translation_key": "block.minecraft.bamboo_hanging_sign", + "item_id": 865, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5619, + "states": [ + { + "id": 5618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 68 + ], + "block_entity_type": 8 + }, + { + "id": 5622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + }, + { + "id": 5625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 69 + ], + "block_entity_type": 8 + } + ] + }, + { + "id": 230, + "name": "lever", + "translation_key": "block.minecraft.lever", + "item_id": 650, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5635, + "states": [ + { + "id": 5626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 231, + "name": "stone_pressure_plate", + "translation_key": "block.minecraft.stone_pressure_plate", + "item_id": 673, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5651, + "states": [ + { + "id": 5650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 232, + "name": "iron_door", + "translation_key": "block.minecraft.iron_door", + "item_id": 688, + "hardness": 5.0, + "blast_resistance": 5.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5663, + "states": [ + { + "id": 5652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 5715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 233, + "name": "oak_pressure_plate", + "translation_key": "block.minecraft.oak_pressure_plate", + "item_id": 677, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5717, + "states": [ + { + "id": 5716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 234, + "name": "spruce_pressure_plate", + "translation_key": "block.minecraft.spruce_pressure_plate", + "item_id": 678, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5719, + "states": [ + { + "id": 5718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 235, + "name": "birch_pressure_plate", + "translation_key": "block.minecraft.birch_pressure_plate", + "item_id": 679, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5721, + "states": [ + { + "id": 5720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 236, + "name": "jungle_pressure_plate", + "translation_key": "block.minecraft.jungle_pressure_plate", + "item_id": 680, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5723, + "states": [ + { + "id": 5722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 237, + "name": "acacia_pressure_plate", + "translation_key": "block.minecraft.acacia_pressure_plate", + "item_id": 681, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5725, + "states": [ + { + "id": 5724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 238, + "name": "cherry_pressure_plate", + "translation_key": "block.minecraft.cherry_pressure_plate", + "item_id": 682, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5727, + "states": [ + { + "id": 5726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 239, + "name": "dark_oak_pressure_plate", + "translation_key": "block.minecraft.dark_oak_pressure_plate", + "item_id": 683, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5729, + "states": [ + { + "id": 5728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 240, + "name": "mangrove_pressure_plate", + "translation_key": "block.minecraft.mangrove_pressure_plate", + "item_id": 684, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5731, + "states": [ + { + "id": 5730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 241, + "name": "bamboo_pressure_plate", + "translation_key": "block.minecraft.bamboo_pressure_plate", + "item_id": 685, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5733, + "states": [ + { + "id": 5732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 5733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 242, + "name": "redstone_ore", + "translation_key": "block.minecraft.redstone_ore", + "item_id": 57, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5735, + "states": [ + { + "id": 5734, + "luminance": 9, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 243, + "name": "deepslate_redstone_ore", + "translation_key": "block.minecraft.deepslate_redstone_ore", + "item_id": 58, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5737, + "states": [ + { + "id": 5736, + "luminance": 9, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 244, + "name": "redstone_torch", + "translation_key": "block.minecraft.redstone_torch", + "item_id": 636, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 245, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5738, + "states": [ + { + "id": 5738, + "luminance": 7, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 245, + "name": "redstone_wall_torch", + "translation_key": "block.minecraft.redstone_torch", + "item_id": 636, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5740, + "states": [ + { + "id": 5740, + "luminance": 7, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5742, + "luminance": 7, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5744, + "luminance": 7, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5746, + "luminance": 7, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 246, + "name": "stone_button", + "translation_key": "block.minecraft.stone_button", + "item_id": 660, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5757, + "states": [ + { + "id": 5748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 247, + "name": "snow", + "translation_key": "block.minecraft.snow", + "item_id": 283, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "layers", + "values": [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + ], + "default_state_id": 5772, + "states": [ + { + "id": 5772, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5773, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5774, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 38 + ] + }, + { + "id": 5775, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 71 + ] + }, + { + "id": 5776, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 51 + ] + }, + { + "id": 5777, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 72 + ] + }, + { + "id": 5778, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 18 + ] + }, + { + "id": 5779, + "luminance": 0, + "opaque": true, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [ + 73 + ] + } + ] + }, + { + "id": 248, + "name": "ice", + "translation_key": "block.minecraft.ice", + "item_id": 284, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.98, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5780, + "states": [ + { + "id": 5780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 249, + "name": "snow_block", + "translation_key": "block.minecraft.snow_block", + "item_id": 285, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5781, + "states": [ + { + "id": 5781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 250, + "name": "cactus", + "translation_key": "block.minecraft.cactus", + "item_id": 286, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 5782, + "states": [ + { + "id": 5782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + }, + { + "id": 5797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + } + ] + }, + { + "id": 251, + "name": "clay", + "translation_key": "block.minecraft.clay", + "item_id": 287, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5798, + "states": [ + { + "id": 5798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 252, + "name": "sugar_cane", + "translation_key": "block.minecraft.sugar_cane", + "item_id": 221, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 5799, + "states": [ + { + "id": 5799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 253, + "name": "jukebox", + "translation_key": "block.minecraft.jukebox", + "item_id": 288, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "has_record", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5816, + "states": [ + { + "id": 5815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 4 + }, + { + "id": 5816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 4 + } + ] + }, + { + "id": 254, + "name": "oak_fence", + "translation_key": "block.minecraft.oak_fence", + "item_id": 289, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5848, + "states": [ + { + "id": 5817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 5818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 5819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 5820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 5821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 5822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 5823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 5824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 5825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 5826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 5827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 5828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 5829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 5830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 5831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 5832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 5833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 5834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 5835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 5836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 5837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 5838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 5839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 5840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 5841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 5842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 5843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 5844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 5845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 5846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 5847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 5848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 255, + "name": "pumpkin", + "translation_key": "block.minecraft.pumpkin", + "item_id": 300, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5849, + "states": [ + { + "id": 5849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 256, + "name": "netherrack", + "translation_key": "block.minecraft.netherrack", + "item_id": 303, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5850, + "states": [ + { + "id": 5850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 257, + "name": "soul_sand", + "translation_key": "block.minecraft.soul_sand", + "item_id": 304, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 0.4, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5851, + "states": [ + { + "id": 5851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 73 + ] + } + ] + }, + { + "id": 258, + "name": "soul_soil", + "translation_key": "block.minecraft.soul_soil", + "item_id": 305, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5852, + "states": [ + { + "id": 5852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 259, + "name": "basalt", + "translation_key": "block.minecraft.basalt", + "item_id": 306, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 5854, + "states": [ + { + "id": 5853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 260, + "name": "polished_basalt", + "translation_key": "block.minecraft.polished_basalt", + "item_id": 307, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 5857, + "states": [ + { + "id": 5856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 261, + "name": "soul_torch", + "translation_key": "block.minecraft.soul_torch", + "item_id": 309, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 262, + "properties": [], + "default_state_id": 5859, + "states": [ + { + "id": 5859, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 262, + "name": "soul_wall_torch", + "translation_key": "block.minecraft.soul_torch", + "item_id": 309, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 5860, + "states": [ + { + "id": 5860, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5861, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5862, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5863, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 263, + "name": "glowstone", + "translation_key": "block.minecraft.glowstone", + "item_id": 310, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5864, + "states": [ + { + "id": 5864, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 264, + "name": "nether_portal", + "translation_key": "block.minecraft.nether_portal", + "item_id": 0, + "hardness": -1.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "z" + ] + } + ], + "default_state_id": 5865, + "states": [ + { + "id": 5865, + "luminance": 11, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 5866, + "luminance": 11, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 265, + "name": "carved_pumpkin", + "translation_key": "block.minecraft.carved_pumpkin", + "item_id": 301, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 5867, + "states": [ + { + "id": 5867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 266, + "name": "jack_o_lantern", + "translation_key": "block.minecraft.jack_o_lantern", + "item_id": 302, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 5871, + "states": [ + { + "id": 5871, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5872, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5873, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 5874, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 267, + "name": "cake", + "translation_key": "block.minecraft.cake", + "item_id": 923, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "bites", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6" + ] + } + ], + "default_state_id": 5875, + "states": [ + { + "id": 5875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85 + ] + }, + { + "id": 5876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 86 + ] + }, + { + "id": 5877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 87 + ] + }, + { + "id": 5878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 88 + ] + }, + { + "id": 5879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 89 + ] + }, + { + "id": 5880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 90 + ] + }, + { + "id": 5881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 91 + ] + } + ] + }, + { + "id": 268, + "name": "repeater", + "translation_key": "block.minecraft.repeater", + "item_id": 638, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "delay", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "locked", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5885, + "states": [ + { + "id": 5882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + }, + { + "id": 5945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ] + } + ] + }, + { + "id": 269, + "name": "white_stained_glass", + "translation_key": "block.minecraft.white_stained_glass", + "item_id": 449, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5946, + "states": [ + { + "id": 5946, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 270, + "name": "orange_stained_glass", + "translation_key": "block.minecraft.orange_stained_glass", + "item_id": 450, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5947, + "states": [ + { + "id": 5947, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 271, + "name": "magenta_stained_glass", + "translation_key": "block.minecraft.magenta_stained_glass", + "item_id": 451, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5948, + "states": [ + { + "id": 5948, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 272, + "name": "light_blue_stained_glass", + "translation_key": "block.minecraft.light_blue_stained_glass", + "item_id": 452, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5949, + "states": [ + { + "id": 5949, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 273, + "name": "yellow_stained_glass", + "translation_key": "block.minecraft.yellow_stained_glass", + "item_id": 453, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5950, + "states": [ + { + "id": 5950, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 274, + "name": "lime_stained_glass", + "translation_key": "block.minecraft.lime_stained_glass", + "item_id": 454, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5951, + "states": [ + { + "id": 5951, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 275, + "name": "pink_stained_glass", + "translation_key": "block.minecraft.pink_stained_glass", + "item_id": 455, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5952, + "states": [ + { + "id": 5952, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 276, + "name": "gray_stained_glass", + "translation_key": "block.minecraft.gray_stained_glass", + "item_id": 456, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5953, + "states": [ + { + "id": 5953, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 277, + "name": "light_gray_stained_glass", + "translation_key": "block.minecraft.light_gray_stained_glass", + "item_id": 457, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5954, + "states": [ + { + "id": 5954, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 278, + "name": "cyan_stained_glass", + "translation_key": "block.minecraft.cyan_stained_glass", + "item_id": 458, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5955, + "states": [ + { + "id": 5955, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 279, + "name": "purple_stained_glass", + "translation_key": "block.minecraft.purple_stained_glass", + "item_id": 459, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5956, + "states": [ + { + "id": 5956, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 280, + "name": "blue_stained_glass", + "translation_key": "block.minecraft.blue_stained_glass", + "item_id": 460, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5957, + "states": [ + { + "id": 5957, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 281, + "name": "brown_stained_glass", + "translation_key": "block.minecraft.brown_stained_glass", + "item_id": 461, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5958, + "states": [ + { + "id": 5958, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 282, + "name": "green_stained_glass", + "translation_key": "block.minecraft.green_stained_glass", + "item_id": 462, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5959, + "states": [ + { + "id": 5959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 283, + "name": "red_stained_glass", + "translation_key": "block.minecraft.red_stained_glass", + "item_id": 463, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5960, + "states": [ + { + "id": 5960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 284, + "name": "black_stained_glass", + "translation_key": "block.minecraft.black_stained_glass", + "item_id": 464, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 5961, + "states": [ + { + "id": 5961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 285, + "name": "oak_trapdoor", + "translation_key": "block.minecraft.oak_trapdoor", + "item_id": 701, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 5977, + "states": [ + { + "id": 5962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 5974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 5990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 5994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 5998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 5999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 286, + "name": "spruce_trapdoor", + "translation_key": "block.minecraft.spruce_trapdoor", + "item_id": 702, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6041, + "states": [ + { + "id": 6026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 287, + "name": "birch_trapdoor", + "translation_key": "block.minecraft.birch_trapdoor", + "item_id": 703, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6105, + "states": [ + { + "id": 6090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 288, + "name": "jungle_trapdoor", + "translation_key": "block.minecraft.jungle_trapdoor", + "item_id": 704, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6169, + "states": [ + { + "id": 6154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6215, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6216, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6217, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 289, + "name": "acacia_trapdoor", + "translation_key": "block.minecraft.acacia_trapdoor", + "item_id": 705, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6233, + "states": [ + { + "id": 6218, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6219, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6220, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6221, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6222, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6223, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6226, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6227, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6228, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6229, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6230, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 290, + "name": "cherry_trapdoor", + "translation_key": "block.minecraft.cherry_trapdoor", + "item_id": 706, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6297, + "states": [ + { + "id": 6282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 291, + "name": "dark_oak_trapdoor", + "translation_key": "block.minecraft.dark_oak_trapdoor", + "item_id": 707, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6361, + "states": [ + { + "id": 6346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 292, + "name": "mangrove_trapdoor", + "translation_key": "block.minecraft.mangrove_trapdoor", + "item_id": 708, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6425, + "states": [ + { + "id": 6410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 293, + "name": "bamboo_trapdoor", + "translation_key": "block.minecraft.bamboo_trapdoor", + "item_id": 709, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6489, + "states": [ + { + "id": 6474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 6486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 6502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 6518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 6530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 6534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 6537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 294, + "name": "stone_bricks", + "translation_key": "block.minecraft.stone_bricks", + "item_id": 318, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6538, + "states": [ + { + "id": 6538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 295, + "name": "mossy_stone_bricks", + "translation_key": "block.minecraft.mossy_stone_bricks", + "item_id": 319, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6539, + "states": [ + { + "id": 6539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 296, + "name": "cracked_stone_bricks", + "translation_key": "block.minecraft.cracked_stone_bricks", + "item_id": 320, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6540, + "states": [ + { + "id": 6540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 297, + "name": "chiseled_stone_bricks", + "translation_key": "block.minecraft.chiseled_stone_bricks", + "item_id": 321, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6541, + "states": [ + { + "id": 6541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 298, + "name": "packed_mud", + "translation_key": "block.minecraft.packed_mud", + "item_id": 322, + "hardness": 1.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6542, + "states": [ + { + "id": 6542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 299, + "name": "mud_bricks", + "translation_key": "block.minecraft.mud_bricks", + "item_id": 323, + "hardness": 1.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6543, + "states": [ + { + "id": 6543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 300, + "name": "infested_stone", + "translation_key": "block.minecraft.infested_stone", + "item_id": 311, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6544, + "states": [ + { + "id": 6544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 301, + "name": "infested_cobblestone", + "translation_key": "block.minecraft.infested_cobblestone", + "item_id": 312, + "hardness": 1.0, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6545, + "states": [ + { + "id": 6545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 302, + "name": "infested_stone_bricks", + "translation_key": "block.minecraft.infested_stone_bricks", + "item_id": 313, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6546, + "states": [ + { + "id": 6546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 303, + "name": "infested_mossy_stone_bricks", + "translation_key": "block.minecraft.infested_mossy_stone_bricks", + "item_id": 314, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6547, + "states": [ + { + "id": 6547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 304, + "name": "infested_cracked_stone_bricks", + "translation_key": "block.minecraft.infested_cracked_stone_bricks", + "item_id": 315, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6548, + "states": [ + { + "id": 6548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 305, + "name": "infested_chiseled_stone_bricks", + "translation_key": "block.minecraft.infested_chiseled_stone_bricks", + "item_id": 316, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6549, + "states": [ + { + "id": 6549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 306, + "name": "brown_mushroom_block", + "translation_key": "block.minecraft.brown_mushroom_block", + "item_id": 330, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6550, + "states": [ + { + "id": 6550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 307, + "name": "red_mushroom_block", + "translation_key": "block.minecraft.red_mushroom_block", + "item_id": 331, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6614, + "states": [ + { + "id": 6614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 308, + "name": "mushroom_stem", + "translation_key": "block.minecraft.mushroom_stem", + "item_id": 332, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6678, + "states": [ + { + "id": 6678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 6741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 309, + "name": "iron_bars", + "translation_key": "block.minecraft.iron_bars", + "item_id": 333, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6773, + "states": [ + { + "id": 6742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 6743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 6744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 6745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 6746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 6747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 6748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 6749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 6750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 6751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 6752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 6753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 6754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 6755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 6756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 6757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 6758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 6759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 6760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 6761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 6762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 6763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 6764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 6765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 6766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 6767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 6768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 6769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 6770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 6771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 6772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 6773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 310, + "name": "chain", + "translation_key": "block.minecraft.chain", + "item_id": 334, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6777, + "states": [ + { + "id": 6774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 104 + ] + }, + { + "id": 6775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 104 + ] + }, + { + "id": 6776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 105 + ] + }, + { + "id": 6777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 105 + ] + }, + { + "id": 6778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 106 + ] + }, + { + "id": 6779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 106 + ] + } + ] + }, + { + "id": 311, + "name": "glass_pane", + "translation_key": "block.minecraft.glass_pane", + "item_id": 335, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6811, + "states": [ + { + "id": 6780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 6781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 6782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 6783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 6784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 6785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 6786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 6787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 6788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 6789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 6790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 6791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 6792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 6793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 6794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 6795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 6796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 6797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 6798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 6799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 6800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 6801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 6802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 6803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 6804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 6805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 6806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 6807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 6808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 6809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 6810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 6811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 312, + "name": "melon", + "translation_key": "block.minecraft.melon", + "item_id": 336, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 6812, + "states": [ + { + "id": 6812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 313, + "name": "attached_pumpkin_stem", + "translation_key": "block.minecraft.attached_pumpkin_stem", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 6813, + "states": [ + { + "id": 6813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 314, + "name": "attached_melon_stem", + "translation_key": "block.minecraft.attached_melon_stem", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 6817, + "states": [ + { + "id": 6817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 315, + "name": "pumpkin_stem", + "translation_key": "block.minecraft.pumpkin_stem", + "item_id": 945, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 6821, + "states": [ + { + "id": 6821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 316, + "name": "melon_stem", + "translation_key": "block.minecraft.melon_stem", + "item_id": 946, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 6829, + "states": [ + { + "id": 6829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 317, + "name": "vine", + "translation_key": "block.minecraft.vine", + "item_id": 337, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6868, + "states": [ + { + "id": 6837, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6838, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6839, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6840, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6841, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6842, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6843, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6844, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6845, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6846, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6847, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6848, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6849, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6850, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6851, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6852, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6853, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6854, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6855, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6856, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6857, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6858, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6859, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6860, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6861, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6862, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6863, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6864, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6865, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6866, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6867, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6868, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 318, + "name": "glow_lichen", + "translation_key": "block.minecraft.glow_lichen", + "item_id": 338, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 6996, + "states": [ + { + "id": 6869, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6870, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6871, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6872, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6873, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6874, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6875, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6876, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6877, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6878, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6879, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6880, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6881, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6882, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6883, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6884, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6885, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6886, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6887, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6888, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6889, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6890, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6891, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6892, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6893, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6894, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6895, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6896, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6897, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6898, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6899, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6900, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6901, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6902, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6903, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6904, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6905, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6906, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6907, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6908, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6909, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6910, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6911, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6912, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6913, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6914, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6915, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6916, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6917, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6918, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6919, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6920, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6921, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6922, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6923, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6924, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6925, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6926, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6927, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6928, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6929, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6930, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6931, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6932, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6933, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6934, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6935, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6936, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6937, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6938, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6939, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6940, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6941, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6942, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6943, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6944, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6945, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6946, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6947, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6948, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6949, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6950, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6951, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6952, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6953, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6954, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6955, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6956, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6957, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6958, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6959, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6960, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6961, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6962, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6963, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6964, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6965, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6966, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6967, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6968, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6969, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6970, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6971, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6972, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6973, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6974, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6975, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6976, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6977, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6978, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6979, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6980, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6981, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6982, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6983, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6984, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6985, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6986, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6987, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6988, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6989, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6990, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6991, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6992, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6993, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6994, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6995, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 6996, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 319, + "name": "oak_fence_gate", + "translation_key": "block.minecraft.oak_fence_gate", + "item_id": 712, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7004, + "states": [ + { + "id": 6997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 6998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 6999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 320, + "name": "brick_stairs", + "translation_key": "block.minecraft.brick_stairs", + "item_id": 339, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7040, + "states": [ + { + "id": 7029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 321, + "name": "stone_brick_stairs", + "translation_key": "block.minecraft.stone_brick_stairs", + "item_id": 340, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7120, + "states": [ + { + "id": 7109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 322, + "name": "mud_brick_stairs", + "translation_key": "block.minecraft.mud_brick_stairs", + "item_id": 341, + "hardness": 1.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7200, + "states": [ + { + "id": 7189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 323, + "name": "mycelium", + "translation_key": "block.minecraft.mycelium", + "item_id": 342, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "snowy", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7270, + "states": [ + { + "id": 7269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 7270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 324, + "name": "lily_pad", + "translation_key": "block.minecraft.lily_pad", + "item_id": 343, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7271, + "states": [ + { + "id": 7271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 107 + ] + } + ] + }, + { + "id": 325, + "name": "nether_bricks", + "translation_key": "block.minecraft.nether_bricks", + "item_id": 344, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7272, + "states": [ + { + "id": 7272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 326, + "name": "nether_brick_fence", + "translation_key": "block.minecraft.nether_brick_fence", + "item_id": 347, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7304, + "states": [ + { + "id": 7273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 7274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 7275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 7276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 7277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 7278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 7279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 7280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 7281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 7282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 7283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 7284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 7285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 7287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 7288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 7289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 7290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 7292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 7293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 7294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 7295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 7296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 7297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 7298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 7299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 7300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 7301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 7302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 7303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 7304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 327, + "name": "nether_brick_stairs", + "translation_key": "block.minecraft.nether_brick_stairs", + "item_id": 348, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7316, + "states": [ + { + "id": 7305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 328, + "name": "nether_wart", + "translation_key": "block.minecraft.nether_wart", + "item_id": 956, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 7385, + "states": [ + { + "id": 7385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 329, + "name": "enchanting_table", + "translation_key": "block.minecraft.enchanting_table", + "item_id": 353, + "hardness": 5.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7389, + "states": [ + { + "id": 7389, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 18 + ], + "block_entity_type": 12 + } + ] + }, + { + "id": 330, + "name": "brewing_stand", + "translation_key": "block.minecraft.brewing_stand", + "item_id": 963, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "has_bottle_0", + "values": [ + "true", + "false" + ] + }, + { + "name": "has_bottle_1", + "values": [ + "true", + "false" + ] + }, + { + "name": "has_bottle_2", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7397, + "states": [ + { + "id": 7390, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7391, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7392, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7393, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7394, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7395, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7396, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + }, + { + "id": 7397, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 108, + 109 + ], + "block_entity_type": 11 + } + ] + }, + { + "id": 331, + "name": "cauldron", + "translation_key": "block.minecraft.cauldron", + "item_id": 964, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7398, + "states": [ + { + "id": 7398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + } + ] + }, + { + "id": 332, + "name": "water_cauldron", + "translation_key": "block.minecraft.water_cauldron", + "item_id": 964, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "1", + "2", + "3" + ] + } + ], + "default_state_id": 7399, + "states": [ + { + "id": 7399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + }, + { + "id": 7400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + }, + { + "id": 7401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + } + ] + }, + { + "id": 333, + "name": "lava_cauldron", + "translation_key": "block.minecraft.lava_cauldron", + "item_id": 964, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7402, + "states": [ + { + "id": 7402, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + } + ] + }, + { + "id": 334, + "name": "powder_snow_cauldron", + "translation_key": "block.minecraft.powder_snow_cauldron", + "item_id": 964, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "1", + "2", + "3" + ] + } + ], + "default_state_id": 7403, + "states": [ + { + "id": 7403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + }, + { + "id": 7404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + }, + { + "id": 7405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124 + ] + } + ] + }, + { + "id": 335, + "name": "end_portal", + "translation_key": "block.minecraft.end_portal", + "item_id": 0, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7406, + "states": [ + { + "id": 7406, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [], + "block_entity_type": 13 + } + ] + }, + { + "id": 336, + "name": "end_portal_frame", + "translation_key": "block.minecraft.end_portal_frame", + "item_id": 354, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "eye", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 7411, + "states": [ + { + "id": 7407, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125, + 126 + ] + }, + { + "id": 7408, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125, + 126 + ] + }, + { + "id": 7409, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125, + 126 + ] + }, + { + "id": 7410, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125, + 126 + ] + }, + { + "id": 7411, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125 + ] + }, + { + "id": 7412, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125 + ] + }, + { + "id": 7413, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125 + ] + }, + { + "id": 7414, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 125 + ] + } + ] + }, + { + "id": 337, + "name": "end_stone", + "translation_key": "block.minecraft.end_stone", + "item_id": 355, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7415, + "states": [ + { + "id": 7415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 338, + "name": "dragon_egg", + "translation_key": "block.minecraft.dragon_egg", + "item_id": 357, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7416, + "states": [ + { + "id": 7416, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ] + } + ] + }, + { + "id": 339, + "name": "redstone_lamp", + "translation_key": "block.minecraft.redstone_lamp", + "item_id": 658, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7418, + "states": [ + { + "id": 7417, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 7418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 340, + "name": "cocoa", + "translation_key": "block.minecraft.cocoa", + "item_id": 903, + "hardness": 0.2, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 7419, + "states": [ + { + "id": 7419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 128 + ] + }, + { + "id": 7420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 129 + ] + }, + { + "id": 7421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 130 + ] + }, + { + "id": 7422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 131 + ] + }, + { + "id": 7423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 132 + ] + }, + { + "id": 7424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 133 + ] + }, + { + "id": 7425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 134 + ] + }, + { + "id": 7426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 135 + ] + }, + { + "id": 7427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 136 + ] + }, + { + "id": 7428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 137 + ] + }, + { + "id": 7429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 138 + ] + }, + { + "id": 7430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 139 + ] + } + ] + }, + { + "id": 341, + "name": "sandstone_stairs", + "translation_key": "block.minecraft.sandstone_stairs", + "item_id": 358, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7442, + "states": [ + { + "id": 7431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 342, + "name": "emerald_ore", + "translation_key": "block.minecraft.emerald_ore", + "item_id": 59, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7511, + "states": [ + { + "id": 7511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 343, + "name": "deepslate_emerald_ore", + "translation_key": "block.minecraft.deepslate_emerald_ore", + "item_id": 60, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7512, + "states": [ + { + "id": 7512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 344, + "name": "ender_chest", + "translation_key": "block.minecraft.ender_chest", + "item_id": 359, + "hardness": 22.5, + "blast_resistance": 600.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7514, + "states": [ + { + "id": 7513, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7514, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7515, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7516, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7517, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7518, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7519, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + }, + { + "id": 7520, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 3 + } + ] + }, + { + "id": 345, + "name": "tripwire_hook", + "translation_key": "block.minecraft.tripwire_hook", + "item_id": 655, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7530, + "states": [ + { + "id": 7521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 346, + "name": "tripwire", + "translation_key": "block.minecraft.tripwire", + "item_id": 810, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "attached", + "values": [ + "true", + "false" + ] + }, + { + "name": "disarmed", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7664, + "states": [ + { + "id": 7537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7553, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7554, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7555, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7556, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7557, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7558, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7559, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7560, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7561, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7562, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7563, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7564, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7565, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7566, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 7664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 347, + "name": "emerald_block", + "translation_key": "block.minecraft.emerald_block", + "item_id": 360, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7665, + "states": [ + { + "id": 7665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 348, + "name": "spruce_stairs", + "translation_key": "block.minecraft.spruce_stairs", + "item_id": 362, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7677, + "states": [ + { + "id": 7666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 349, + "name": "birch_stairs", + "translation_key": "block.minecraft.birch_stairs", + "item_id": 363, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7757, + "states": [ + { + "id": 7746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 350, + "name": "jungle_stairs", + "translation_key": "block.minecraft.jungle_stairs", + "item_id": 364, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 7837, + "states": [ + { + "id": 7826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 7828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 7838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 7848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 7858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 7868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 7870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 7872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 7874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 7876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 7878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 7880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 7882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 7884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 7886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 7888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 7890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 7892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 7894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 7896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 7898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 7900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 7902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 7904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 7905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 351, + "name": "command_block", + "translation_key": "block.minecraft.command_block", + "item_id": 373, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "conditional", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 7912, + "states": [ + { + "id": 7906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 7917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + } + ] + }, + { + "id": 352, + "name": "beacon", + "translation_key": "block.minecraft.beacon", + "item_id": 374, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 7918, + "states": [ + { + "id": 7918, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 14 + } + ] + }, + { + "id": 353, + "name": "cobblestone_wall", + "translation_key": "block.minecraft.cobblestone_wall", + "item_id": 375, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 7922, + "states": [ + { + "id": 7919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 7920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 7921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 7922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 7923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 7924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 7925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 7927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 7928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 7929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 7930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 7931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 7932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 7935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 7938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 7941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 7944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 7947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 7949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 7950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 7953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 7955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 7956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 7959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 7962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 7963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 7964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 7965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 7966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 7967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 7968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 7971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 7974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 7977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 7980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 7983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 7985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 7986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 7989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 7991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 7992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 7995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 7997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 7998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 7999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 8001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 354, + "name": "mossy_cobblestone_wall", + "translation_key": "block.minecraft.mossy_cobblestone_wall", + "item_id": 376, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 8246, + "states": [ + { + "id": 8243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 8244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 8245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 8246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 8247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 8248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 8249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 8250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 8251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 8252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 8253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 8254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 8255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 8256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 8259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 8262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 8265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 8268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 8271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 8273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 8274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 8277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 8279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 8280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 8283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 8286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 8289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 8316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 8319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 8321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 8322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 8325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 8327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 8343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 8349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 8351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 8463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 8465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 8469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 8471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 8487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 8489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 8493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 8495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 8535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 8537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 8541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 8543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 8559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 8561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 8565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 8566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 355, + "name": "flower_pot", + "translation_key": "block.minecraft.flower_pot", + "item_id": 1050, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8567, + "states": [ + { + "id": 8567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 356, + "name": "potted_torchflower", + "translation_key": "block.minecraft.potted_torchflower", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8568, + "states": [ + { + "id": 8568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 357, + "name": "potted_oak_sapling", + "translation_key": "block.minecraft.potted_oak_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8569, + "states": [ + { + "id": 8569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 358, + "name": "potted_spruce_sapling", + "translation_key": "block.minecraft.potted_spruce_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8570, + "states": [ + { + "id": 8570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 359, + "name": "potted_birch_sapling", + "translation_key": "block.minecraft.potted_birch_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8571, + "states": [ + { + "id": 8571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 360, + "name": "potted_jungle_sapling", + "translation_key": "block.minecraft.potted_jungle_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8572, + "states": [ + { + "id": 8572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 361, + "name": "potted_acacia_sapling", + "translation_key": "block.minecraft.potted_acacia_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8573, + "states": [ + { + "id": 8573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 362, + "name": "potted_cherry_sapling", + "translation_key": "block.minecraft.potted_cherry_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8574, + "states": [ + { + "id": 8574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 363, + "name": "potted_dark_oak_sapling", + "translation_key": "block.minecraft.potted_dark_oak_sapling", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8575, + "states": [ + { + "id": 8575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 364, + "name": "potted_mangrove_propagule", + "translation_key": "block.minecraft.potted_mangrove_propagule", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8576, + "states": [ + { + "id": 8576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 365, + "name": "potted_fern", + "translation_key": "block.minecraft.potted_fern", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8577, + "states": [ + { + "id": 8577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 366, + "name": "potted_dandelion", + "translation_key": "block.minecraft.potted_dandelion", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8578, + "states": [ + { + "id": 8578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 367, + "name": "potted_poppy", + "translation_key": "block.minecraft.potted_poppy", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8579, + "states": [ + { + "id": 8579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 368, + "name": "potted_blue_orchid", + "translation_key": "block.minecraft.potted_blue_orchid", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8580, + "states": [ + { + "id": 8580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 369, + "name": "potted_allium", + "translation_key": "block.minecraft.potted_allium", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8581, + "states": [ + { + "id": 8581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 370, + "name": "potted_azure_bluet", + "translation_key": "block.minecraft.potted_azure_bluet", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8582, + "states": [ + { + "id": 8582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 371, + "name": "potted_red_tulip", + "translation_key": "block.minecraft.potted_red_tulip", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8583, + "states": [ + { + "id": 8583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 372, + "name": "potted_orange_tulip", + "translation_key": "block.minecraft.potted_orange_tulip", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8584, + "states": [ + { + "id": 8584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 373, + "name": "potted_white_tulip", + "translation_key": "block.minecraft.potted_white_tulip", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8585, + "states": [ + { + "id": 8585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 374, + "name": "potted_pink_tulip", + "translation_key": "block.minecraft.potted_pink_tulip", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8586, + "states": [ + { + "id": 8586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 375, + "name": "potted_oxeye_daisy", + "translation_key": "block.minecraft.potted_oxeye_daisy", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8587, + "states": [ + { + "id": 8587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 376, + "name": "potted_cornflower", + "translation_key": "block.minecraft.potted_cornflower", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8588, + "states": [ + { + "id": 8588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 377, + "name": "potted_lily_of_the_valley", + "translation_key": "block.minecraft.potted_lily_of_the_valley", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8589, + "states": [ + { + "id": 8589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 378, + "name": "potted_wither_rose", + "translation_key": "block.minecraft.potted_wither_rose", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8590, + "states": [ + { + "id": 8590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 379, + "name": "potted_red_mushroom", + "translation_key": "block.minecraft.potted_red_mushroom", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8591, + "states": [ + { + "id": 8591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 380, + "name": "potted_brown_mushroom", + "translation_key": "block.minecraft.potted_brown_mushroom", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8592, + "states": [ + { + "id": 8592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 381, + "name": "potted_dead_bush", + "translation_key": "block.minecraft.potted_dead_bush", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8593, + "states": [ + { + "id": 8593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 382, + "name": "potted_cactus", + "translation_key": "block.minecraft.potted_cactus", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 8594, + "states": [ + { + "id": 8594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 383, + "name": "carrots", + "translation_key": "block.minecraft.carrots", + "item_id": 1051, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 8595, + "states": [ + { + "id": 8595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 384, + "name": "potatoes", + "translation_key": "block.minecraft.potatoes", + "item_id": 1052, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + } + ], + "default_state_id": 8603, + "states": [ + { + "id": 8603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 385, + "name": "oak_button", + "translation_key": "block.minecraft.oak_button", + "item_id": 662, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8620, + "states": [ + { + "id": 8611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 386, + "name": "spruce_button", + "translation_key": "block.minecraft.spruce_button", + "item_id": 663, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8644, + "states": [ + { + "id": 8635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 387, + "name": "birch_button", + "translation_key": "block.minecraft.birch_button", + "item_id": 664, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8668, + "states": [ + { + "id": 8659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 388, + "name": "jungle_button", + "translation_key": "block.minecraft.jungle_button", + "item_id": 665, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8692, + "states": [ + { + "id": 8683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 389, + "name": "acacia_button", + "translation_key": "block.minecraft.acacia_button", + "item_id": 666, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8716, + "states": [ + { + "id": 8707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 390, + "name": "cherry_button", + "translation_key": "block.minecraft.cherry_button", + "item_id": 667, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8740, + "states": [ + { + "id": 8731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 391, + "name": "dark_oak_button", + "translation_key": "block.minecraft.dark_oak_button", + "item_id": 668, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8764, + "states": [ + { + "id": 8755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 392, + "name": "mangrove_button", + "translation_key": "block.minecraft.mangrove_button", + "item_id": 669, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8788, + "states": [ + { + "id": 8779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 393, + "name": "bamboo_button", + "translation_key": "block.minecraft.bamboo_button", + "item_id": 670, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8812, + "states": [ + { + "id": 8803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 8826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 394, + "name": "skeleton_skull", + "translation_key": "block.minecraft.skeleton_skull", + "item_id": 1057, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 395, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8827, + "states": [ + { + "id": 8827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 395, + "name": "skeleton_wall_skull", + "translation_key": "block.minecraft.skeleton_skull", + "item_id": 1057, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8843, + "states": [ + { + "id": 8843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 396, + "name": "wither_skeleton_skull", + "translation_key": "block.minecraft.wither_skeleton_skull", + "item_id": 1058, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 397, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8847, + "states": [ + { + "id": 8847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 397, + "name": "wither_skeleton_wall_skull", + "translation_key": "block.minecraft.wither_skeleton_skull", + "item_id": 1058, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8863, + "states": [ + { + "id": 8863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 398, + "name": "zombie_head", + "translation_key": "block.minecraft.zombie_head", + "item_id": 1060, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 399, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8867, + "states": [ + { + "id": 8867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 399, + "name": "zombie_wall_head", + "translation_key": "block.minecraft.zombie_head", + "item_id": 1060, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8883, + "states": [ + { + "id": 8883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 400, + "name": "player_head", + "translation_key": "block.minecraft.player_head", + "item_id": 1059, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 401, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8887, + "states": [ + { + "id": 8887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 401, + "name": "player_wall_head", + "translation_key": "block.minecraft.player_head", + "item_id": 1059, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8903, + "states": [ + { + "id": 8903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 402, + "name": "creeper_head", + "translation_key": "block.minecraft.creeper_head", + "item_id": 1061, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 403, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8907, + "states": [ + { + "id": 8907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 403, + "name": "creeper_wall_head", + "translation_key": "block.minecraft.creeper_head", + "item_id": 1061, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8923, + "states": [ + { + "id": 8923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 404, + "name": "dragon_head", + "translation_key": "block.minecraft.dragon_head", + "item_id": 1062, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 405, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8927, + "states": [ + { + "id": 8927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + }, + { + "id": 8942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 157 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 405, + "name": "dragon_wall_head", + "translation_key": "block.minecraft.dragon_head", + "item_id": 1062, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8943, + "states": [ + { + "id": 8943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 158 + ], + "block_entity_type": 15 + }, + { + "id": 8944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 159 + ], + "block_entity_type": 15 + }, + { + "id": 8945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 160 + ], + "block_entity_type": 15 + }, + { + "id": 8946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 161 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 406, + "name": "piglin_head", + "translation_key": "block.minecraft.piglin_head", + "item_id": 1063, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 407, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 8947, + "states": [ + { + "id": 8947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + }, + { + "id": 8962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 162 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 407, + "name": "piglin_wall_head", + "translation_key": "block.minecraft.piglin_head", + "item_id": 1063, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8963, + "states": [ + { + "id": 8963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 163 + ], + "block_entity_type": 15 + }, + { + "id": 8964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 164 + ], + "block_entity_type": 15 + }, + { + "id": 8965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 165 + ], + "block_entity_type": 15 + }, + { + "id": 8966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 166 + ], + "block_entity_type": 15 + } + ] + }, + { + "id": 408, + "name": "anvil", + "translation_key": "block.minecraft.anvil", + "item_id": 397, + "hardness": 5.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8967, + "states": [ + { + "id": 8967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + }, + { + "id": 8970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + } + ] + }, + { + "id": 409, + "name": "chipped_anvil", + "translation_key": "block.minecraft.chipped_anvil", + "item_id": 398, + "hardness": 5.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8971, + "states": [ + { + "id": 8971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + }, + { + "id": 8974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + } + ] + }, + { + "id": 410, + "name": "damaged_anvil", + "translation_key": "block.minecraft.damaged_anvil", + "item_id": 399, + "hardness": 5.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 8975, + "states": [ + { + "id": 8975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 168, + 169, + 170, + 171, + 172, + 173 + ] + }, + { + "id": 8977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + }, + { + "id": 8978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 167, + 174, + 175, + 176, + 177, + 178, + 179 + ] + } + ] + }, + { + "id": 411, + "name": "trapped_chest", + "translation_key": "block.minecraft.trapped_chest", + "item_id": 656, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "type", + "values": [ + "single", + "left", + "right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 8980, + "states": [ + { + "id": 8979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 2 + }, + { + "id": 8982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 2 + }, + { + "id": 8983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 2 + }, + { + "id": 8984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 2 + }, + { + "id": 8985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 2 + }, + { + "id": 8988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 60 + ], + "block_entity_type": 2 + }, + { + "id": 8989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 2 + }, + { + "id": 8990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 59 + ], + "block_entity_type": 2 + }, + { + "id": 8991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 2 + }, + { + "id": 8994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 2 + }, + { + "id": 8995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 2 + }, + { + "id": 8996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 2 + }, + { + "id": 8997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 58 + ], + "block_entity_type": 2 + }, + { + "id": 8999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 2 + }, + { + "id": 9000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 62 + ], + "block_entity_type": 2 + }, + { + "id": 9001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 2 + }, + { + "id": 9002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 61 + ], + "block_entity_type": 2 + } + ] + }, + { + "id": 412, + "name": "light_weighted_pressure_plate", + "translation_key": "block.minecraft.light_weighted_pressure_plate", + "item_id": 675, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 9003, + "states": [ + { + "id": 9003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 413, + "name": "heavy_weighted_pressure_plate", + "translation_key": "block.minecraft.heavy_weighted_pressure_plate", + "item_id": 676, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 9019, + "states": [ + { + "id": 9019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 9034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 414, + "name": "comparator", + "translation_key": "block.minecraft.comparator", + "item_id": 639, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "mode", + "values": [ + "compare", + "subtract" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9036, + "states": [ + { + "id": 9035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + }, + { + "id": 9050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 70 + ], + "block_entity_type": 18 + } + ] + }, + { + "id": 415, + "name": "daylight_detector", + "translation_key": "block.minecraft.daylight_detector", + "item_id": 652, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "inverted", + "values": [ + "true", + "false" + ] + }, + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 9067, + "states": [ + { + "id": 9051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + }, + { + "id": 9082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 71 + ], + "block_entity_type": 16 + } + ] + }, + { + "id": 416, + "name": "redstone_block", + "translation_key": "block.minecraft.redstone_block", + "item_id": 637, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9083, + "states": [ + { + "id": 9083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 417, + "name": "nether_quartz_ore", + "translation_key": "block.minecraft.nether_quartz_ore", + "item_id": 66, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9084, + "states": [ + { + "id": 9084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 418, + "name": "hopper", + "translation_key": "block.minecraft.hopper", + "item_id": 645, + "hardness": 3.0, + "blast_resistance": 4.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "enabled", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "down", + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 9085, + "states": [ + { + "id": 9085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 194, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 195, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 196, + 197, + 198, + 199, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 200, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 194, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 195, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 196, + 197, + 198, + 199, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + }, + { + "id": 9094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 193, + 200, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192 + ], + "block_entity_type": 17 + } + ] + }, + { + "id": 419, + "name": "quartz_block", + "translation_key": "block.minecraft.quartz_block", + "item_id": 401, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9095, + "states": [ + { + "id": 9095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 420, + "name": "chiseled_quartz_block", + "translation_key": "block.minecraft.chiseled_quartz_block", + "item_id": 400, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9096, + "states": [ + { + "id": 9096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 421, + "name": "quartz_pillar", + "translation_key": "block.minecraft.quartz_pillar", + "item_id": 403, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 9098, + "states": [ + { + "id": 9097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 9098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 9099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 422, + "name": "quartz_stairs", + "translation_key": "block.minecraft.quartz_stairs", + "item_id": 404, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9111, + "states": [ + { + "id": 9100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 423, + "name": "activator_rail", + "translation_key": "block.minecraft.activator_rail", + "item_id": 726, + "hardness": 0.7, + "blast_resistance": 0.7, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "shape", + "values": [ + "north_south", + "east_west", + "ascending_east", + "ascending_west", + "ascending_north", + "ascending_south" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9193, + "states": [ + { + "id": 9180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 9203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 424, + "name": "dropper", + "translation_key": "block.minecraft.dropper", + "item_id": 647, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "triggered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9205, + "states": [ + { + "id": 9204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + }, + { + "id": 9215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 6 + } + ] + }, + { + "id": 425, + "name": "white_terracotta", + "translation_key": "block.minecraft.white_terracotta", + "item_id": 405, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9216, + "states": [ + { + "id": 9216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 426, + "name": "orange_terracotta", + "translation_key": "block.minecraft.orange_terracotta", + "item_id": 406, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9217, + "states": [ + { + "id": 9217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 427, + "name": "magenta_terracotta", + "translation_key": "block.minecraft.magenta_terracotta", + "item_id": 407, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9218, + "states": [ + { + "id": 9218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 428, + "name": "light_blue_terracotta", + "translation_key": "block.minecraft.light_blue_terracotta", + "item_id": 408, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9219, + "states": [ + { + "id": 9219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 429, + "name": "yellow_terracotta", + "translation_key": "block.minecraft.yellow_terracotta", + "item_id": 409, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9220, + "states": [ + { + "id": 9220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 430, + "name": "lime_terracotta", + "translation_key": "block.minecraft.lime_terracotta", + "item_id": 410, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9221, + "states": [ + { + "id": 9221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 431, + "name": "pink_terracotta", + "translation_key": "block.minecraft.pink_terracotta", + "item_id": 411, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9222, + "states": [ + { + "id": 9222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 432, + "name": "gray_terracotta", + "translation_key": "block.minecraft.gray_terracotta", + "item_id": 412, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9223, + "states": [ + { + "id": 9223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 433, + "name": "light_gray_terracotta", + "translation_key": "block.minecraft.light_gray_terracotta", + "item_id": 413, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9224, + "states": [ + { + "id": 9224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 434, + "name": "cyan_terracotta", + "translation_key": "block.minecraft.cyan_terracotta", + "item_id": 414, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9225, + "states": [ + { + "id": 9225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 435, + "name": "purple_terracotta", + "translation_key": "block.minecraft.purple_terracotta", + "item_id": 415, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9226, + "states": [ + { + "id": 9226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 436, + "name": "blue_terracotta", + "translation_key": "block.minecraft.blue_terracotta", + "item_id": 416, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9227, + "states": [ + { + "id": 9227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 437, + "name": "brown_terracotta", + "translation_key": "block.minecraft.brown_terracotta", + "item_id": 417, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9228, + "states": [ + { + "id": 9228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 438, + "name": "green_terracotta", + "translation_key": "block.minecraft.green_terracotta", + "item_id": 418, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9229, + "states": [ + { + "id": 9229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 439, + "name": "red_terracotta", + "translation_key": "block.minecraft.red_terracotta", + "item_id": 419, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9230, + "states": [ + { + "id": 9230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 440, + "name": "black_terracotta", + "translation_key": "block.minecraft.black_terracotta", + "item_id": 420, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 9231, + "states": [ + { + "id": 9231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 441, + "name": "white_stained_glass_pane", + "translation_key": "block.minecraft.white_stained_glass_pane", + "item_id": 465, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9263, + "states": [ + { + "id": 9232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 442, + "name": "orange_stained_glass_pane", + "translation_key": "block.minecraft.orange_stained_glass_pane", + "item_id": 466, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9295, + "states": [ + { + "id": 9264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 443, + "name": "magenta_stained_glass_pane", + "translation_key": "block.minecraft.magenta_stained_glass_pane", + "item_id": 467, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9327, + "states": [ + { + "id": 9296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9322, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9324, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9326, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 444, + "name": "light_blue_stained_glass_pane", + "translation_key": "block.minecraft.light_blue_stained_glass_pane", + "item_id": 468, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9359, + "states": [ + { + "id": 9328, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9330, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9332, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9334, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9336, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9338, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9340, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9342, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9344, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9346, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9348, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9350, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9352, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 445, + "name": "yellow_stained_glass_pane", + "translation_key": "block.minecraft.yellow_stained_glass_pane", + "item_id": 469, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9391, + "states": [ + { + "id": 9360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9388, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9389, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 446, + "name": "lime_stained_glass_pane", + "translation_key": "block.minecraft.lime_stained_glass_pane", + "item_id": 470, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9423, + "states": [ + { + "id": 9392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9394, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9395, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9396, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9397, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9402, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9403, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9404, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9405, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9410, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9411, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9412, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9413, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9418, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9419, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9420, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 447, + "name": "pink_stained_glass_pane", + "translation_key": "block.minecraft.pink_stained_glass_pane", + "item_id": 471, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9455, + "states": [ + { + "id": 9424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 448, + "name": "gray_stained_glass_pane", + "translation_key": "block.minecraft.gray_stained_glass_pane", + "item_id": 472, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9487, + "states": [ + { + "id": 9456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 449, + "name": "light_gray_stained_glass_pane", + "translation_key": "block.minecraft.light_gray_stained_glass_pane", + "item_id": 473, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9519, + "states": [ + { + "id": 9488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 450, + "name": "cyan_stained_glass_pane", + "translation_key": "block.minecraft.cyan_stained_glass_pane", + "item_id": 474, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9551, + "states": [ + { + "id": 9520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 451, + "name": "purple_stained_glass_pane", + "translation_key": "block.minecraft.purple_stained_glass_pane", + "item_id": 475, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9583, + "states": [ + { + "id": 9552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9553, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9554, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9555, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9556, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9557, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9558, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9559, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9560, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9561, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9562, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9563, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9564, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9565, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9566, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9567, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9568, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9569, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9570, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9571, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9572, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9573, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9574, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9575, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9576, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9577, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9578, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9579, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9580, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9581, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9582, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9583, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 452, + "name": "blue_stained_glass_pane", + "translation_key": "block.minecraft.blue_stained_glass_pane", + "item_id": 476, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9615, + "states": [ + { + "id": 9584, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9585, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9588, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9589, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9592, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9593, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9596, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9597, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9600, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9601, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9604, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9605, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 453, + "name": "brown_stained_glass_pane", + "translation_key": "block.minecraft.brown_stained_glass_pane", + "item_id": 477, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9647, + "states": [ + { + "id": 9616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 454, + "name": "green_stained_glass_pane", + "translation_key": "block.minecraft.green_stained_glass_pane", + "item_id": 478, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9679, + "states": [ + { + "id": 9648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 455, + "name": "red_stained_glass_pane", + "translation_key": "block.minecraft.red_stained_glass_pane", + "item_id": 479, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9711, + "states": [ + { + "id": 9680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 456, + "name": "black_stained_glass_pane", + "translation_key": "block.minecraft.black_stained_glass_pane", + "item_id": 480, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9743, + "states": [ + { + "id": 9712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95, + 96 + ] + }, + { + "id": 9715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97, + 98 + ] + }, + { + "id": 9716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 95 + ] + }, + { + "id": 9719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99, + 98 + ] + }, + { + "id": 9720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94, + 96 + ] + }, + { + "id": 9723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100, + 98 + ] + }, + { + "id": 9724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 94 + ] + }, + { + "id": 9727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 101 + ] + }, + { + "id": 9728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95, + 96 + ] + }, + { + "id": 9731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 97 + ] + }, + { + "id": 9732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 95 + ] + }, + { + "id": 9735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 99 + ] + }, + { + "id": 9736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102, + 96 + ] + }, + { + "id": 9739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 100 + ] + }, + { + "id": 9740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + }, + { + "id": 9742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 102 + ] + }, + { + "id": 9743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 103 + ] + } + ] + }, + { + "id": 457, + "name": "acacia_stairs", + "translation_key": "block.minecraft.acacia_stairs", + "item_id": 365, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9755, + "states": [ + { + "id": 9744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 458, + "name": "cherry_stairs", + "translation_key": "block.minecraft.cherry_stairs", + "item_id": 366, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9835, + "states": [ + { + "id": 9824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 459, + "name": "dark_oak_stairs", + "translation_key": "block.minecraft.dark_oak_stairs", + "item_id": 367, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9915, + "states": [ + { + "id": 9904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 9926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 9936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 9946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 9948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 9952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 9956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 9958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 9962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 9964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 9966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 9970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 9974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 9976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 9980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 9982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 9983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 460, + "name": "mangrove_stairs", + "translation_key": "block.minecraft.mangrove_stairs", + "item_id": 368, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 9995, + "states": [ + { + "id": 9984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 9986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 9988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 9990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 9992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 9994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 9996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 9998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 9999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 461, + "name": "bamboo_stairs", + "translation_key": "block.minecraft.bamboo_stairs", + "item_id": 369, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10075, + "states": [ + { + "id": 10064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 462, + "name": "bamboo_mosaic_stairs", + "translation_key": "block.minecraft.bamboo_mosaic_stairs", + "item_id": 370, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10155, + "states": [ + { + "id": 10144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 463, + "name": "slime_block", + "translation_key": "block.minecraft.slime_block", + "item_id": 642, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.8, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10224, + "states": [ + { + "id": 10224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 464, + "name": "barrier", + "translation_key": "block.minecraft.barrier", + "item_id": 421, + "hardness": -1.0, + "blast_resistance": 3600000.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10225, + "states": [ + { + "id": 10225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 465, + "name": "light", + "translation_key": "block.minecraft.light", + "item_id": 422, + "hardness": -1.0, + "blast_resistance": 3600000.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10257, + "states": [ + { + "id": 10226, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10227, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10228, + "luminance": 1, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10229, + "luminance": 1, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10230, + "luminance": 2, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10231, + "luminance": 2, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10232, + "luminance": 3, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10233, + "luminance": 3, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10234, + "luminance": 4, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10235, + "luminance": 4, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10236, + "luminance": 5, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10237, + "luminance": 5, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10238, + "luminance": 6, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10239, + "luminance": 6, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10240, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10241, + "luminance": 7, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10242, + "luminance": 8, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10243, + "luminance": 8, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10244, + "luminance": 9, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10245, + "luminance": 9, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10246, + "luminance": 10, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10247, + "luminance": 10, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10248, + "luminance": 11, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10249, + "luminance": 11, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10250, + "luminance": 12, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10251, + "luminance": 12, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10252, + "luminance": 13, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10253, + "luminance": 13, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10254, + "luminance": 14, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10255, + "luminance": 14, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10256, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10257, + "luminance": 15, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 466, + "name": "iron_trapdoor", + "translation_key": "block.minecraft.iron_trapdoor", + "item_id": 700, + "hardness": 5.0, + "blast_resistance": 5.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10273, + "states": [ + { + "id": 10258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 10270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 10286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 10302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10313, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 10314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 10318, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10320, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 10321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 467, + "name": "prismarine", + "translation_key": "block.minecraft.prismarine", + "item_id": 481, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10322, + "states": [ + { + "id": 10322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 468, + "name": "prismarine_bricks", + "translation_key": "block.minecraft.prismarine_bricks", + "item_id": 482, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10323, + "states": [ + { + "id": 10323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 469, + "name": "dark_prismarine", + "translation_key": "block.minecraft.dark_prismarine", + "item_id": 483, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10324, + "states": [ + { + "id": 10324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 470, + "name": "prismarine_stairs", + "translation_key": "block.minecraft.prismarine_stairs", + "item_id": 484, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10336, + "states": [ + { + "id": 10325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 471, + "name": "prismarine_brick_stairs", + "translation_key": "block.minecraft.prismarine_brick_stairs", + "item_id": 485, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10416, + "states": [ + { + "id": 10405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 472, + "name": "dark_prismarine_stairs", + "translation_key": "block.minecraft.dark_prismarine_stairs", + "item_id": 486, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10496, + "states": [ + { + "id": 10485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 10547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 10557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 473, + "name": "prismarine_slab", + "translation_key": "block.minecraft.prismarine_slab", + "item_id": 256, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10568, + "states": [ + { + "id": 10565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 10570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 474, + "name": "prismarine_brick_slab", + "translation_key": "block.minecraft.prismarine_brick_slab", + "item_id": 257, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10574, + "states": [ + { + "id": 10571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 10576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 475, + "name": "dark_prismarine_slab", + "translation_key": "block.minecraft.dark_prismarine_slab", + "item_id": 258, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10580, + "states": [ + { + "id": 10577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 10579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 10581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 10582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 476, + "name": "sea_lantern", + "translation_key": "block.minecraft.sea_lantern", + "item_id": 487, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10583, + "states": [ + { + "id": 10583, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 477, + "name": "hay_block", + "translation_key": "block.minecraft.hay_block", + "item_id": 423, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 10585, + "states": [ + { + "id": 10584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 10585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 10586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 478, + "name": "white_carpet", + "translation_key": "block.minecraft.white_carpet", + "item_id": 424, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10587, + "states": [ + { + "id": 10587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 479, + "name": "orange_carpet", + "translation_key": "block.minecraft.orange_carpet", + "item_id": 425, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10588, + "states": [ + { + "id": 10588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 480, + "name": "magenta_carpet", + "translation_key": "block.minecraft.magenta_carpet", + "item_id": 426, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10589, + "states": [ + { + "id": 10589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 481, + "name": "light_blue_carpet", + "translation_key": "block.minecraft.light_blue_carpet", + "item_id": 427, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10590, + "states": [ + { + "id": 10590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 482, + "name": "yellow_carpet", + "translation_key": "block.minecraft.yellow_carpet", + "item_id": 428, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10591, + "states": [ + { + "id": 10591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 483, + "name": "lime_carpet", + "translation_key": "block.minecraft.lime_carpet", + "item_id": 429, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10592, + "states": [ + { + "id": 10592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 484, + "name": "pink_carpet", + "translation_key": "block.minecraft.pink_carpet", + "item_id": 430, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10593, + "states": [ + { + "id": 10593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 485, + "name": "gray_carpet", + "translation_key": "block.minecraft.gray_carpet", + "item_id": 431, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10594, + "states": [ + { + "id": 10594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 486, + "name": "light_gray_carpet", + "translation_key": "block.minecraft.light_gray_carpet", + "item_id": 432, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10595, + "states": [ + { + "id": 10595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 487, + "name": "cyan_carpet", + "translation_key": "block.minecraft.cyan_carpet", + "item_id": 433, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10596, + "states": [ + { + "id": 10596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 488, + "name": "purple_carpet", + "translation_key": "block.minecraft.purple_carpet", + "item_id": 434, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10597, + "states": [ + { + "id": 10597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 489, + "name": "blue_carpet", + "translation_key": "block.minecraft.blue_carpet", + "item_id": 435, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10598, + "states": [ + { + "id": 10598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 490, + "name": "brown_carpet", + "translation_key": "block.minecraft.brown_carpet", + "item_id": 436, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10599, + "states": [ + { + "id": 10599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 491, + "name": "green_carpet", + "translation_key": "block.minecraft.green_carpet", + "item_id": 437, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10600, + "states": [ + { + "id": 10600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 492, + "name": "red_carpet", + "translation_key": "block.minecraft.red_carpet", + "item_id": 438, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10601, + "states": [ + { + "id": 10601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 493, + "name": "black_carpet", + "translation_key": "block.minecraft.black_carpet", + "item_id": 439, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10602, + "states": [ + { + "id": 10602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 494, + "name": "terracotta", + "translation_key": "block.minecraft.terracotta", + "item_id": 440, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10603, + "states": [ + { + "id": 10603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 495, + "name": "coal_block", + "translation_key": "block.minecraft.coal_block", + "item_id": 68, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10604, + "states": [ + { + "id": 10604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 496, + "name": "packed_ice", + "translation_key": "block.minecraft.packed_ice", + "item_id": 441, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.98, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10605, + "states": [ + { + "id": 10605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 497, + "name": "sunflower", + "translation_key": "block.minecraft.sunflower", + "item_id": 443, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10607, + "states": [ + { + "id": 10606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 498, + "name": "lilac", + "translation_key": "block.minecraft.lilac", + "item_id": 444, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10609, + "states": [ + { + "id": 10608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 499, + "name": "rose_bush", + "translation_key": "block.minecraft.rose_bush", + "item_id": 445, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10611, + "states": [ + { + "id": 10610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 500, + "name": "peony", + "translation_key": "block.minecraft.peony", + "item_id": 446, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10613, + "states": [ + { + "id": 10612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 501, + "name": "tall_grass", + "translation_key": "block.minecraft.tall_grass", + "item_id": 447, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10615, + "states": [ + { + "id": 10614, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10615, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 502, + "name": "large_fern", + "translation_key": "block.minecraft.large_fern", + "item_id": 448, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 10617, + "states": [ + { + "id": 10616, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 10617, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 503, + "name": "white_banner", + "translation_key": "block.minecraft.white_banner", + "item_id": 1087, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 519, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10618, + "states": [ + { + "id": 10618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 504, + "name": "orange_banner", + "translation_key": "block.minecraft.orange_banner", + "item_id": 1088, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 520, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10634, + "states": [ + { + "id": 10634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 505, + "name": "magenta_banner", + "translation_key": "block.minecraft.magenta_banner", + "item_id": 1089, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 521, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10650, + "states": [ + { + "id": 10650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 506, + "name": "light_blue_banner", + "translation_key": "block.minecraft.light_blue_banner", + "item_id": 1090, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 522, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10666, + "states": [ + { + "id": 10666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 507, + "name": "yellow_banner", + "translation_key": "block.minecraft.yellow_banner", + "item_id": 1091, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 523, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10682, + "states": [ + { + "id": 10682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 508, + "name": "lime_banner", + "translation_key": "block.minecraft.lime_banner", + "item_id": 1092, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 524, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10698, + "states": [ + { + "id": 10698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 509, + "name": "pink_banner", + "translation_key": "block.minecraft.pink_banner", + "item_id": 1093, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 525, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10714, + "states": [ + { + "id": 10714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 510, + "name": "gray_banner", + "translation_key": "block.minecraft.gray_banner", + "item_id": 1094, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 526, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10730, + "states": [ + { + "id": 10730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 511, + "name": "light_gray_banner", + "translation_key": "block.minecraft.light_gray_banner", + "item_id": 1095, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 527, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10746, + "states": [ + { + "id": 10746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 512, + "name": "cyan_banner", + "translation_key": "block.minecraft.cyan_banner", + "item_id": 1096, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 528, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10762, + "states": [ + { + "id": 10762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 513, + "name": "purple_banner", + "translation_key": "block.minecraft.purple_banner", + "item_id": 1097, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 529, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10778, + "states": [ + { + "id": 10778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 514, + "name": "blue_banner", + "translation_key": "block.minecraft.blue_banner", + "item_id": 1098, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 530, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10794, + "states": [ + { + "id": 10794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 515, + "name": "brown_banner", + "translation_key": "block.minecraft.brown_banner", + "item_id": 1099, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 531, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10810, + "states": [ + { + "id": 10810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 516, + "name": "green_banner", + "translation_key": "block.minecraft.green_banner", + "item_id": 1100, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 532, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10826, + "states": [ + { + "id": 10826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10837, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10840, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10841, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 517, + "name": "red_banner", + "translation_key": "block.minecraft.red_banner", + "item_id": 1101, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 533, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10842, + "states": [ + { + "id": 10842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10844, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10845, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10848, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10849, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10852, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10853, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10856, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10857, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 518, + "name": "black_banner", + "translation_key": "block.minecraft.black_banner", + "item_id": 1102, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 534, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 10858, + "states": [ + { + "id": 10858, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10859, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10860, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10861, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10862, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10863, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10864, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10865, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10866, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10867, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10868, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10869, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10870, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10871, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10872, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 519, + "name": "white_wall_banner", + "translation_key": "block.minecraft.white_banner", + "item_id": 1087, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10874, + "states": [ + { + "id": 10874, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10875, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10876, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10877, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 520, + "name": "orange_wall_banner", + "translation_key": "block.minecraft.orange_banner", + "item_id": 1088, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10878, + "states": [ + { + "id": 10878, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10879, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10880, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10881, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 521, + "name": "magenta_wall_banner", + "translation_key": "block.minecraft.magenta_banner", + "item_id": 1089, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10882, + "states": [ + { + "id": 10882, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10883, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10884, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10885, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 522, + "name": "light_blue_wall_banner", + "translation_key": "block.minecraft.light_blue_banner", + "item_id": 1090, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10886, + "states": [ + { + "id": 10886, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10887, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10888, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10889, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 523, + "name": "yellow_wall_banner", + "translation_key": "block.minecraft.yellow_banner", + "item_id": 1091, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10890, + "states": [ + { + "id": 10890, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10891, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10892, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10893, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 524, + "name": "lime_wall_banner", + "translation_key": "block.minecraft.lime_banner", + "item_id": 1092, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10894, + "states": [ + { + "id": 10894, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10895, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10896, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10897, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 525, + "name": "pink_wall_banner", + "translation_key": "block.minecraft.pink_banner", + "item_id": 1093, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10898, + "states": [ + { + "id": 10898, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10899, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10900, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10901, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 526, + "name": "gray_wall_banner", + "translation_key": "block.minecraft.gray_banner", + "item_id": 1094, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10902, + "states": [ + { + "id": 10902, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10903, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10904, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10905, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 527, + "name": "light_gray_wall_banner", + "translation_key": "block.minecraft.light_gray_banner", + "item_id": 1095, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10906, + "states": [ + { + "id": 10906, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10907, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10908, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10909, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 528, + "name": "cyan_wall_banner", + "translation_key": "block.minecraft.cyan_banner", + "item_id": 1096, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10910, + "states": [ + { + "id": 10910, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10911, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10912, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10913, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 529, + "name": "purple_wall_banner", + "translation_key": "block.minecraft.purple_banner", + "item_id": 1097, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10914, + "states": [ + { + "id": 10914, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10915, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10916, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10917, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 530, + "name": "blue_wall_banner", + "translation_key": "block.minecraft.blue_banner", + "item_id": 1098, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10918, + "states": [ + { + "id": 10918, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10919, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10920, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10921, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 531, + "name": "brown_wall_banner", + "translation_key": "block.minecraft.brown_banner", + "item_id": 1099, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10922, + "states": [ + { + "id": 10922, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10923, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10924, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10925, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 532, + "name": "green_wall_banner", + "translation_key": "block.minecraft.green_banner", + "item_id": 1100, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10926, + "states": [ + { + "id": 10926, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10927, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10928, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10929, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 533, + "name": "red_wall_banner", + "translation_key": "block.minecraft.red_banner", + "item_id": 1101, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10930, + "states": [ + { + "id": 10930, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10931, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10932, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10933, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 534, + "name": "black_wall_banner", + "translation_key": "block.minecraft.black_banner", + "item_id": 1102, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 10934, + "states": [ + { + "id": 10934, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10935, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10936, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + }, + { + "id": 10937, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 19 + } + ] + }, + { + "id": 535, + "name": "red_sandstone", + "translation_key": "block.minecraft.red_sandstone", + "item_id": 488, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10938, + "states": [ + { + "id": 10938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 536, + "name": "chiseled_red_sandstone", + "translation_key": "block.minecraft.chiseled_red_sandstone", + "item_id": 489, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10939, + "states": [ + { + "id": 10939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 537, + "name": "cut_red_sandstone", + "translation_key": "block.minecraft.cut_red_sandstone", + "item_id": 490, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 10940, + "states": [ + { + "id": 10940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 538, + "name": "red_sandstone_stairs", + "translation_key": "block.minecraft.red_sandstone_stairs", + "item_id": 491, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 10952, + "states": [ + { + "id": 10941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 10943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 10947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 10951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 10953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 10957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 10959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 10961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 10963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 10965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 10969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 10973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 10975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 10979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 10983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 10985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 10987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 10989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 10991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 10993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 10995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 10997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 10999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 11000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 11001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 11002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 11003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 11004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 11005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 11006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 11007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 11008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 11009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 11010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 11011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 11012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 11013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 11014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 11015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 11016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 11017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 11018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 11019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 11020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 539, + "name": "oak_slab", + "translation_key": "block.minecraft.oak_slab", + "item_id": 230, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11024, + "states": [ + { + "id": 11021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 540, + "name": "spruce_slab", + "translation_key": "block.minecraft.spruce_slab", + "item_id": 231, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11030, + "states": [ + { + "id": 11027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 541, + "name": "birch_slab", + "translation_key": "block.minecraft.birch_slab", + "item_id": 232, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11036, + "states": [ + { + "id": 11033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 542, + "name": "jungle_slab", + "translation_key": "block.minecraft.jungle_slab", + "item_id": 233, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11042, + "states": [ + { + "id": 11039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 543, + "name": "acacia_slab", + "translation_key": "block.minecraft.acacia_slab", + "item_id": 234, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11048, + "states": [ + { + "id": 11045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 544, + "name": "cherry_slab", + "translation_key": "block.minecraft.cherry_slab", + "item_id": 235, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11054, + "states": [ + { + "id": 11051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 545, + "name": "dark_oak_slab", + "translation_key": "block.minecraft.dark_oak_slab", + "item_id": 236, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11060, + "states": [ + { + "id": 11057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 546, + "name": "mangrove_slab", + "translation_key": "block.minecraft.mangrove_slab", + "item_id": 237, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11066, + "states": [ + { + "id": 11063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 547, + "name": "bamboo_slab", + "translation_key": "block.minecraft.bamboo_slab", + "item_id": 238, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11072, + "states": [ + { + "id": 11069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 548, + "name": "bamboo_mosaic_slab", + "translation_key": "block.minecraft.bamboo_mosaic_slab", + "item_id": 239, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11078, + "states": [ + { + "id": 11075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 549, + "name": "stone_slab", + "translation_key": "block.minecraft.stone_slab", + "item_id": 242, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11084, + "states": [ + { + "id": 11081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 550, + "name": "smooth_stone_slab", + "translation_key": "block.minecraft.smooth_stone_slab", + "item_id": 243, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11090, + "states": [ + { + "id": 11087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 551, + "name": "sandstone_slab", + "translation_key": "block.minecraft.sandstone_slab", + "item_id": 244, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11096, + "states": [ + { + "id": 11093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 552, + "name": "cut_sandstone_slab", + "translation_key": "block.minecraft.cut_sandstone_slab", + "item_id": 245, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11102, + "states": [ + { + "id": 11099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 553, + "name": "petrified_oak_slab", + "translation_key": "block.minecraft.petrified_oak_slab", + "item_id": 246, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11108, + "states": [ + { + "id": 11105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 554, + "name": "cobblestone_slab", + "translation_key": "block.minecraft.cobblestone_slab", + "item_id": 247, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11114, + "states": [ + { + "id": 11111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 555, + "name": "brick_slab", + "translation_key": "block.minecraft.brick_slab", + "item_id": 248, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11120, + "states": [ + { + "id": 11117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 556, + "name": "stone_brick_slab", + "translation_key": "block.minecraft.stone_brick_slab", + "item_id": 249, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11126, + "states": [ + { + "id": 11123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 557, + "name": "mud_brick_slab", + "translation_key": "block.minecraft.mud_brick_slab", + "item_id": 250, + "hardness": 1.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11132, + "states": [ + { + "id": 11129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 558, + "name": "nether_brick_slab", + "translation_key": "block.minecraft.nether_brick_slab", + "item_id": 251, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11138, + "states": [ + { + "id": 11135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 559, + "name": "quartz_slab", + "translation_key": "block.minecraft.quartz_slab", + "item_id": 252, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11144, + "states": [ + { + "id": 11141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 560, + "name": "red_sandstone_slab", + "translation_key": "block.minecraft.red_sandstone_slab", + "item_id": 253, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11150, + "states": [ + { + "id": 11147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 561, + "name": "cut_red_sandstone_slab", + "translation_key": "block.minecraft.cut_red_sandstone_slab", + "item_id": 254, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11156, + "states": [ + { + "id": 11153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 562, + "name": "purpur_slab", + "translation_key": "block.minecraft.purpur_slab", + "item_id": 255, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11162, + "states": [ + { + "id": 11159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 11161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 11163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 11164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 563, + "name": "smooth_stone", + "translation_key": "block.minecraft.smooth_stone", + "item_id": 262, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 11165, + "states": [ + { + "id": 11165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 564, + "name": "smooth_sandstone", + "translation_key": "block.minecraft.smooth_sandstone", + "item_id": 261, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 11166, + "states": [ + { + "id": 11166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 565, + "name": "smooth_quartz", + "translation_key": "block.minecraft.smooth_quartz", + "item_id": 259, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 11167, + "states": [ + { + "id": 11167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 566, + "name": "smooth_red_sandstone", + "translation_key": "block.minecraft.smooth_red_sandstone", + "item_id": 260, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 11168, + "states": [ + { + "id": 11168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 567, + "name": "spruce_fence_gate", + "translation_key": "block.minecraft.spruce_fence_gate", + "item_id": 713, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11176, + "states": [ + { + "id": 11169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 568, + "name": "birch_fence_gate", + "translation_key": "block.minecraft.birch_fence_gate", + "item_id": 714, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11208, + "states": [ + { + "id": 11201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 569, + "name": "jungle_fence_gate", + "translation_key": "block.minecraft.jungle_fence_gate", + "item_id": 715, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11240, + "states": [ + { + "id": 11233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 570, + "name": "acacia_fence_gate", + "translation_key": "block.minecraft.acacia_fence_gate", + "item_id": 716, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11272, + "states": [ + { + "id": 11265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 571, + "name": "cherry_fence_gate", + "translation_key": "block.minecraft.cherry_fence_gate", + "item_id": 717, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11304, + "states": [ + { + "id": 11297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 572, + "name": "dark_oak_fence_gate", + "translation_key": "block.minecraft.dark_oak_fence_gate", + "item_id": 718, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11336, + "states": [ + { + "id": 11329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 573, + "name": "mangrove_fence_gate", + "translation_key": "block.minecraft.mangrove_fence_gate", + "item_id": 719, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11368, + "states": [ + { + "id": 11361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 574, + "name": "bamboo_fence_gate", + "translation_key": "block.minecraft.bamboo_fence_gate", + "item_id": 720, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11400, + "states": [ + { + "id": 11393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 11423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 575, + "name": "spruce_fence", + "translation_key": "block.minecraft.spruce_fence", + "item_id": 290, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11456, + "states": [ + { + "id": 11425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 576, + "name": "birch_fence", + "translation_key": "block.minecraft.birch_fence", + "item_id": 291, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11488, + "states": [ + { + "id": 11457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 577, + "name": "jungle_fence", + "translation_key": "block.minecraft.jungle_fence", + "item_id": 292, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11520, + "states": [ + { + "id": 11489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 578, + "name": "acacia_fence", + "translation_key": "block.minecraft.acacia_fence", + "item_id": 293, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11552, + "states": [ + { + "id": 11521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 579, + "name": "cherry_fence", + "translation_key": "block.minecraft.cherry_fence", + "item_id": 294, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11584, + "states": [ + { + "id": 11553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 580, + "name": "dark_oak_fence", + "translation_key": "block.minecraft.dark_oak_fence", + "item_id": 295, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11616, + "states": [ + { + "id": 11585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 581, + "name": "mangrove_fence", + "translation_key": "block.minecraft.mangrove_fence", + "item_id": 296, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11648, + "states": [ + { + "id": 11617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 582, + "name": "bamboo_fence", + "translation_key": "block.minecraft.bamboo_fence", + "item_id": 297, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11680, + "states": [ + { + "id": 11649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 11652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 11653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 11656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 11657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 11660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 11661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 11664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 11665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 11668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 11669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 11672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 11673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 11676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 11677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 11679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 11680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 583, + "name": "spruce_door", + "translation_key": "block.minecraft.spruce_door", + "item_id": 690, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11692, + "states": [ + { + "id": 11681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 584, + "name": "birch_door", + "translation_key": "block.minecraft.birch_door", + "item_id": 691, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11756, + "states": [ + { + "id": 11745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11792, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11796, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11800, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11801, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 585, + "name": "jungle_door", + "translation_key": "block.minecraft.jungle_door", + "item_id": 692, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11820, + "states": [ + { + "id": 11809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11817, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11820, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11821, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11824, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11825, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11828, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11829, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11832, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11833, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11836, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11837, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11840, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11841, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11844, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11845, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11848, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11849, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11852, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11853, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11856, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11857, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11858, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11859, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11860, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11861, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11862, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11863, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11864, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11865, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11866, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11867, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11868, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11869, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11870, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11871, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11872, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 586, + "name": "acacia_door", + "translation_key": "block.minecraft.acacia_door", + "item_id": 693, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11884, + "states": [ + { + "id": 11873, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11874, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11875, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11876, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11877, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11878, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11879, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11880, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11881, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11882, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11883, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11884, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11885, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11886, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11887, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11888, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11889, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11890, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11891, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11892, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11893, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11894, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11895, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11896, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11897, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11898, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11899, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11900, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11901, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11902, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11903, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11904, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11905, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11906, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11907, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11908, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11909, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11910, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11911, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11912, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11913, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11914, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11915, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11916, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11917, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11918, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11919, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11920, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11921, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11922, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11923, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11924, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11925, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11926, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11927, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11928, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11929, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11930, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11931, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11932, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11933, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11934, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11935, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11936, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 587, + "name": "cherry_door", + "translation_key": "block.minecraft.cherry_door", + "item_id": 694, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 11948, + "states": [ + { + "id": 11937, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11938, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11939, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11940, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11941, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11942, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11943, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11944, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11945, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11946, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11947, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11948, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11949, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11950, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11951, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11952, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11953, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11954, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11955, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11956, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11957, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11958, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 11985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 11995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 11997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 11999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 588, + "name": "dark_oak_door", + "translation_key": "block.minecraft.dark_oak_door", + "item_id": 695, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12012, + "states": [ + { + "id": 12001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 589, + "name": "mangrove_door", + "translation_key": "block.minecraft.mangrove_door", + "item_id": 696, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12076, + "states": [ + { + "id": 12065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 590, + "name": "bamboo_door", + "translation_key": "block.minecraft.bamboo_door", + "item_id": 697, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12140, + "states": [ + { + "id": 12129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 12177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 12187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 12191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 12192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 591, + "name": "end_rod", + "translation_key": "block.minecraft.end_rod", + "item_id": 270, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12197, + "states": [ + { + "id": 12193, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 203 + ] + }, + { + "id": 12194, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 204 + ] + }, + { + "id": 12195, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 203 + ] + }, + { + "id": 12196, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 204 + ] + }, + { + "id": 12197, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 32 + ] + }, + { + "id": 12198, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 32 + ] + } + ] + }, + { + "id": 592, + "name": "chorus_plant", + "translation_key": "block.minecraft.chorus_plant", + "item_id": 271, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12262, + "states": [ + { + "id": 12199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 207, + 208, + 209 + ] + }, + { + "id": 12200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 207, + 208, + 209 + ] + }, + { + "id": 12201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 207, + 208, + 209 + ] + }, + { + "id": 12202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 207, + 208, + 209 + ] + }, + { + "id": 12203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 207, + 209 + ] + }, + { + "id": 12204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 207, + 209 + ] + }, + { + "id": 12205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 207, + 209 + ] + }, + { + "id": 12206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 207, + 209 + ] + }, + { + "id": 12207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 208, + 209 + ] + }, + { + "id": 12208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 208, + 209 + ] + }, + { + "id": 12209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 208, + 209 + ] + }, + { + "id": 12210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 208, + 209 + ] + }, + { + "id": 12211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 209 + ] + }, + { + "id": 12212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 209 + ] + }, + { + "id": 12213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 209 + ] + }, + { + "id": 12214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 209 + ] + }, + { + "id": 12215, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 207, + 208 + ] + }, + { + "id": 12216, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 207, + 208 + ] + }, + { + "id": 12217, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 207, + 208 + ] + }, + { + "id": 12218, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 207, + 208 + ] + }, + { + "id": 12219, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 207 + ] + }, + { + "id": 12220, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 207 + ] + }, + { + "id": 12221, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 207 + ] + }, + { + "id": 12222, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 207 + ] + }, + { + "id": 12223, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206, + 208 + ] + }, + { + "id": 12224, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 208 + ] + }, + { + "id": 12225, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206, + 208 + ] + }, + { + "id": 12226, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 208 + ] + }, + { + "id": 12227, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205, + 206 + ] + }, + { + "id": 12228, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 205 + ] + }, + { + "id": 12229, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210, + 206 + ] + }, + { + "id": 12230, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 210 + ] + }, + { + "id": 12231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 207, + 208, + 212 + ] + }, + { + "id": 12232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 213, + 209, + 212 + ] + }, + { + "id": 12233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 207, + 208 + ] + }, + { + "id": 12234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 213, + 209 + ] + }, + { + "id": 12235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 207, + 212 + ] + }, + { + "id": 12236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 214, + 209, + 212 + ] + }, + { + "id": 12237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 207 + ] + }, + { + "id": 12238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 214, + 209 + ] + }, + { + "id": 12239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 208, + 212 + ] + }, + { + "id": 12240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 215, + 209, + 212 + ] + }, + { + "id": 12241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 208 + ] + }, + { + "id": 12242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 215, + 209 + ] + }, + { + "id": 12243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211, + 212 + ] + }, + { + "id": 12244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 216, + 212 + ] + }, + { + "id": 12245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 211 + ] + }, + { + "id": 12246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 216 + ] + }, + { + "id": 12247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 207, + 208, + 212 + ] + }, + { + "id": 12248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 213, + 212 + ] + }, + { + "id": 12249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 207, + 208 + ] + }, + { + "id": 12250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 213 + ] + }, + { + "id": 12251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 207, + 212 + ] + }, + { + "id": 12252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 214, + 212 + ] + }, + { + "id": 12253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 207 + ] + }, + { + "id": 12254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 214 + ] + }, + { + "id": 12255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 208, + 212 + ] + }, + { + "id": 12256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 215, + 212 + ] + }, + { + "id": 12257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 208 + ] + }, + { + "id": 12258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 215 + ] + }, + { + "id": 12259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217, + 212 + ] + }, + { + "id": 12260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 218 + ] + }, + { + "id": 12261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 217 + ] + }, + { + "id": 12262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 219 + ] + } + ] + }, + { + "id": 593, + "name": "chorus_flower", + "translation_key": "block.minecraft.chorus_flower", + "item_id": 272, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5" + ] + } + ], + "default_state_id": 12263, + "states": [ + { + "id": 12263, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12264, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12265, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12266, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12267, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12268, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 594, + "name": "purpur_block", + "translation_key": "block.minecraft.purpur_block", + "item_id": 273, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12269, + "states": [ + { + "id": 12269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 595, + "name": "purpur_pillar", + "translation_key": "block.minecraft.purpur_pillar", + "item_id": 274, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 12271, + "states": [ + { + "id": 12270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 596, + "name": "purpur_stairs", + "translation_key": "block.minecraft.purpur_stairs", + "item_id": 275, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12284, + "states": [ + { + "id": 12273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 597, + "name": "end_stone_bricks", + "translation_key": "block.minecraft.end_stone_bricks", + "item_id": 356, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12353, + "states": [ + { + "id": 12353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 598, + "name": "torchflower_crop", + "translation_key": "block.minecraft.torchflower_crop", + "item_id": 1106, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 12354, + "states": [ + { + "id": 12354, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 599, + "name": "pitcher_crop", + "translation_key": "block.minecraft.pitcher_crop", + "item_id": 1107, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 12357, + "states": [ + { + "id": 12356, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 220 + ] + }, + { + "id": 12357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 220 + ] + }, + { + "id": 12358, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 221 + ] + }, + { + "id": 12360, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 221 + ] + }, + { + "id": 12362, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 221 + ] + }, + { + "id": 12364, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 221 + ] + } + ] + }, + { + "id": 600, + "name": "pitcher_plant", + "translation_key": "block.minecraft.pitcher_plant", + "item_id": 210, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "half", + "values": [ + "upper", + "lower" + ] + } + ], + "default_state_id": 12367, + "states": [ + { + "id": 12366, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 601, + "name": "beetroots", + "translation_key": "block.minecraft.beetroots", + "item_id": 1109, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 12368, + "states": [ + { + "id": 12368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12371, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 602, + "name": "dirt_path", + "translation_key": "block.minecraft.dirt_path", + "item_id": 442, + "hardness": 0.65, + "blast_resistance": 0.65, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12372, + "states": [ + { + "id": 12372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 63 + ] + } + ] + }, + { + "id": 603, + "name": "end_gateway", + "translation_key": "block.minecraft.end_gateway", + "item_id": 0, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12373, + "states": [ + { + "id": 12373, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [], + "block_entity_type": 21 + } + ] + }, + { + "id": 604, + "name": "repeating_command_block", + "translation_key": "block.minecraft.repeating_command_block", + "item_id": 492, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "conditional", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12380, + "states": [ + { + "id": 12374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + } + ] + }, + { + "id": 605, + "name": "chain_command_block", + "translation_key": "block.minecraft.chain_command_block", + "item_id": 493, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "conditional", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12392, + "states": [ + { + "id": 12386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + }, + { + "id": 12397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 22 + } + ] + }, + { + "id": 606, + "name": "frosted_ice", + "translation_key": "block.minecraft.frosted_ice", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.98, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 12398, + "states": [ + { + "id": 12398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 607, + "name": "magma_block", + "translation_key": "block.minecraft.magma_block", + "item_id": 494, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12402, + "states": [ + { + "id": 12402, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 608, + "name": "nether_wart_block", + "translation_key": "block.minecraft.nether_wart_block", + "item_id": 495, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12403, + "states": [ + { + "id": 12403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 609, + "name": "red_nether_bricks", + "translation_key": "block.minecraft.red_nether_bricks", + "item_id": 497, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12404, + "states": [ + { + "id": 12404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 610, + "name": "bone_block", + "translation_key": "block.minecraft.bone_block", + "item_id": 498, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 12406, + "states": [ + { + "id": 12405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 611, + "name": "structure_void", + "translation_key": "block.minecraft.structure_void", + "item_id": 499, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12408, + "states": [ + { + "id": 12408, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 612, + "name": "observer", + "translation_key": "block.minecraft.observer", + "item_id": 644, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12414, + "states": [ + { + "id": 12409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 613, + "name": "shulker_box", + "translation_key": "block.minecraft.shulker_box", + "item_id": 500, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12425, + "states": [ + { + "id": 12421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 614, + "name": "white_shulker_box", + "translation_key": "block.minecraft.white_shulker_box", + "item_id": 501, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12431, + "states": [ + { + "id": 12427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 615, + "name": "orange_shulker_box", + "translation_key": "block.minecraft.orange_shulker_box", + "item_id": 502, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12437, + "states": [ + { + "id": 12433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 616, + "name": "magenta_shulker_box", + "translation_key": "block.minecraft.magenta_shulker_box", + "item_id": 503, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12443, + "states": [ + { + "id": 12439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 617, + "name": "light_blue_shulker_box", + "translation_key": "block.minecraft.light_blue_shulker_box", + "item_id": 504, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12449, + "states": [ + { + "id": 12445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 618, + "name": "yellow_shulker_box", + "translation_key": "block.minecraft.yellow_shulker_box", + "item_id": 505, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12455, + "states": [ + { + "id": 12451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 619, + "name": "lime_shulker_box", + "translation_key": "block.minecraft.lime_shulker_box", + "item_id": 506, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12461, + "states": [ + { + "id": 12457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 620, + "name": "pink_shulker_box", + "translation_key": "block.minecraft.pink_shulker_box", + "item_id": 507, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12467, + "states": [ + { + "id": 12463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 621, + "name": "gray_shulker_box", + "translation_key": "block.minecraft.gray_shulker_box", + "item_id": 508, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12473, + "states": [ + { + "id": 12469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 622, + "name": "light_gray_shulker_box", + "translation_key": "block.minecraft.light_gray_shulker_box", + "item_id": 509, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12479, + "states": [ + { + "id": 12475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 623, + "name": "cyan_shulker_box", + "translation_key": "block.minecraft.cyan_shulker_box", + "item_id": 510, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12485, + "states": [ + { + "id": 12481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 624, + "name": "purple_shulker_box", + "translation_key": "block.minecraft.purple_shulker_box", + "item_id": 511, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12491, + "states": [ + { + "id": 12487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 625, + "name": "blue_shulker_box", + "translation_key": "block.minecraft.blue_shulker_box", + "item_id": 512, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12497, + "states": [ + { + "id": 12493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 626, + "name": "brown_shulker_box", + "translation_key": "block.minecraft.brown_shulker_box", + "item_id": 513, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12503, + "states": [ + { + "id": 12499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 627, + "name": "green_shulker_box", + "translation_key": "block.minecraft.green_shulker_box", + "item_id": 514, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12509, + "states": [ + { + "id": 12505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 628, + "name": "red_shulker_box", + "translation_key": "block.minecraft.red_shulker_box", + "item_id": 515, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12515, + "states": [ + { + "id": 12511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 629, + "name": "black_shulker_box", + "translation_key": "block.minecraft.black_shulker_box", + "item_id": 516, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + } + ], + "default_state_id": 12521, + "states": [ + { + "id": 12517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + }, + { + "id": 12522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 23 + } + ] + }, + { + "id": 630, + "name": "white_glazed_terracotta", + "translation_key": "block.minecraft.white_glazed_terracotta", + "item_id": 517, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12523, + "states": [ + { + "id": 12523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 631, + "name": "orange_glazed_terracotta", + "translation_key": "block.minecraft.orange_glazed_terracotta", + "item_id": 518, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12527, + "states": [ + { + "id": 12527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 632, + "name": "magenta_glazed_terracotta", + "translation_key": "block.minecraft.magenta_glazed_terracotta", + "item_id": 519, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12531, + "states": [ + { + "id": 12531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 633, + "name": "light_blue_glazed_terracotta", + "translation_key": "block.minecraft.light_blue_glazed_terracotta", + "item_id": 520, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12535, + "states": [ + { + "id": 12535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 634, + "name": "yellow_glazed_terracotta", + "translation_key": "block.minecraft.yellow_glazed_terracotta", + "item_id": 521, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12539, + "states": [ + { + "id": 12539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 635, + "name": "lime_glazed_terracotta", + "translation_key": "block.minecraft.lime_glazed_terracotta", + "item_id": 522, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12543, + "states": [ + { + "id": 12543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 636, + "name": "pink_glazed_terracotta", + "translation_key": "block.minecraft.pink_glazed_terracotta", + "item_id": 523, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12547, + "states": [ + { + "id": 12547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 637, + "name": "gray_glazed_terracotta", + "translation_key": "block.minecraft.gray_glazed_terracotta", + "item_id": 524, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12551, + "states": [ + { + "id": 12551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 638, + "name": "light_gray_glazed_terracotta", + "translation_key": "block.minecraft.light_gray_glazed_terracotta", + "item_id": 525, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12555, + "states": [ + { + "id": 12555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 639, + "name": "cyan_glazed_terracotta", + "translation_key": "block.minecraft.cyan_glazed_terracotta", + "item_id": 526, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12559, + "states": [ + { + "id": 12559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 640, + "name": "purple_glazed_terracotta", + "translation_key": "block.minecraft.purple_glazed_terracotta", + "item_id": 527, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12563, + "states": [ + { + "id": 12563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 641, + "name": "blue_glazed_terracotta", + "translation_key": "block.minecraft.blue_glazed_terracotta", + "item_id": 528, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12567, + "states": [ + { + "id": 12567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 642, + "name": "brown_glazed_terracotta", + "translation_key": "block.minecraft.brown_glazed_terracotta", + "item_id": 529, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12571, + "states": [ + { + "id": 12571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 643, + "name": "green_glazed_terracotta", + "translation_key": "block.minecraft.green_glazed_terracotta", + "item_id": 530, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12575, + "states": [ + { + "id": 12575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 644, + "name": "red_glazed_terracotta", + "translation_key": "block.minecraft.red_glazed_terracotta", + "item_id": 531, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12579, + "states": [ + { + "id": 12579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 645, + "name": "black_glazed_terracotta", + "translation_key": "block.minecraft.black_glazed_terracotta", + "item_id": 532, + "hardness": 1.4, + "blast_resistance": 1.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 12583, + "states": [ + { + "id": 12583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 12586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 646, + "name": "white_concrete", + "translation_key": "block.minecraft.white_concrete", + "item_id": 533, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12587, + "states": [ + { + "id": 12587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 647, + "name": "orange_concrete", + "translation_key": "block.minecraft.orange_concrete", + "item_id": 534, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12588, + "states": [ + { + "id": 12588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 648, + "name": "magenta_concrete", + "translation_key": "block.minecraft.magenta_concrete", + "item_id": 535, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12589, + "states": [ + { + "id": 12589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 649, + "name": "light_blue_concrete", + "translation_key": "block.minecraft.light_blue_concrete", + "item_id": 536, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12590, + "states": [ + { + "id": 12590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 650, + "name": "yellow_concrete", + "translation_key": "block.minecraft.yellow_concrete", + "item_id": 537, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12591, + "states": [ + { + "id": 12591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 651, + "name": "lime_concrete", + "translation_key": "block.minecraft.lime_concrete", + "item_id": 538, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12592, + "states": [ + { + "id": 12592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 652, + "name": "pink_concrete", + "translation_key": "block.minecraft.pink_concrete", + "item_id": 539, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12593, + "states": [ + { + "id": 12593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 653, + "name": "gray_concrete", + "translation_key": "block.minecraft.gray_concrete", + "item_id": 540, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12594, + "states": [ + { + "id": 12594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 654, + "name": "light_gray_concrete", + "translation_key": "block.minecraft.light_gray_concrete", + "item_id": 541, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12595, + "states": [ + { + "id": 12595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 655, + "name": "cyan_concrete", + "translation_key": "block.minecraft.cyan_concrete", + "item_id": 542, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12596, + "states": [ + { + "id": 12596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 656, + "name": "purple_concrete", + "translation_key": "block.minecraft.purple_concrete", + "item_id": 543, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12597, + "states": [ + { + "id": 12597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 657, + "name": "blue_concrete", + "translation_key": "block.minecraft.blue_concrete", + "item_id": 544, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12598, + "states": [ + { + "id": 12598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 658, + "name": "brown_concrete", + "translation_key": "block.minecraft.brown_concrete", + "item_id": 545, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12599, + "states": [ + { + "id": 12599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 659, + "name": "green_concrete", + "translation_key": "block.minecraft.green_concrete", + "item_id": 546, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12600, + "states": [ + { + "id": 12600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 660, + "name": "red_concrete", + "translation_key": "block.minecraft.red_concrete", + "item_id": 547, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12601, + "states": [ + { + "id": 12601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 661, + "name": "black_concrete", + "translation_key": "block.minecraft.black_concrete", + "item_id": 548, + "hardness": 1.8, + "blast_resistance": 1.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12602, + "states": [ + { + "id": 12602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 662, + "name": "white_concrete_powder", + "translation_key": "block.minecraft.white_concrete_powder", + "item_id": 549, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12603, + "states": [ + { + "id": 12603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 663, + "name": "orange_concrete_powder", + "translation_key": "block.minecraft.orange_concrete_powder", + "item_id": 550, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12604, + "states": [ + { + "id": 12604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 664, + "name": "magenta_concrete_powder", + "translation_key": "block.minecraft.magenta_concrete_powder", + "item_id": 551, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12605, + "states": [ + { + "id": 12605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 665, + "name": "light_blue_concrete_powder", + "translation_key": "block.minecraft.light_blue_concrete_powder", + "item_id": 552, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12606, + "states": [ + { + "id": 12606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 666, + "name": "yellow_concrete_powder", + "translation_key": "block.minecraft.yellow_concrete_powder", + "item_id": 553, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12607, + "states": [ + { + "id": 12607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 667, + "name": "lime_concrete_powder", + "translation_key": "block.minecraft.lime_concrete_powder", + "item_id": 554, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12608, + "states": [ + { + "id": 12608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 668, + "name": "pink_concrete_powder", + "translation_key": "block.minecraft.pink_concrete_powder", + "item_id": 555, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12609, + "states": [ + { + "id": 12609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 669, + "name": "gray_concrete_powder", + "translation_key": "block.minecraft.gray_concrete_powder", + "item_id": 556, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12610, + "states": [ + { + "id": 12610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 670, + "name": "light_gray_concrete_powder", + "translation_key": "block.minecraft.light_gray_concrete_powder", + "item_id": 557, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12611, + "states": [ + { + "id": 12611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 671, + "name": "cyan_concrete_powder", + "translation_key": "block.minecraft.cyan_concrete_powder", + "item_id": 558, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12612, + "states": [ + { + "id": 12612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 672, + "name": "purple_concrete_powder", + "translation_key": "block.minecraft.purple_concrete_powder", + "item_id": 559, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12613, + "states": [ + { + "id": 12613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 673, + "name": "blue_concrete_powder", + "translation_key": "block.minecraft.blue_concrete_powder", + "item_id": 560, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12614, + "states": [ + { + "id": 12614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 674, + "name": "brown_concrete_powder", + "translation_key": "block.minecraft.brown_concrete_powder", + "item_id": 561, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12615, + "states": [ + { + "id": 12615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 675, + "name": "green_concrete_powder", + "translation_key": "block.minecraft.green_concrete_powder", + "item_id": 562, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12616, + "states": [ + { + "id": 12616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 676, + "name": "red_concrete_powder", + "translation_key": "block.minecraft.red_concrete_powder", + "item_id": 563, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12617, + "states": [ + { + "id": 12617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 677, + "name": "black_concrete_powder", + "translation_key": "block.minecraft.black_concrete_powder", + "item_id": 564, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12618, + "states": [ + { + "id": 12618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 678, + "name": "kelp", + "translation_key": "block.minecraft.kelp", + "item_id": 222, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25" + ] + } + ], + "default_state_id": 12619, + "states": [ + { + "id": 12619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 679, + "name": "kelp_plant", + "translation_key": "block.minecraft.kelp_plant", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12645, + "states": [ + { + "id": 12645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 680, + "name": "dried_kelp_block", + "translation_key": "block.minecraft.dried_kelp_block", + "item_id": 883, + "hardness": 0.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12646, + "states": [ + { + "id": 12646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 681, + "name": "turtle_egg", + "translation_key": "block.minecraft.turtle_egg", + "item_id": 565, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "eggs", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "hatch", + "values": [ + "0", + "1", + "2" + ] + } + ], + "default_state_id": 12647, + "states": [ + { + "id": 12647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 222 + ] + }, + { + "id": 12648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 222 + ] + }, + { + "id": 12649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 222 + ] + }, + { + "id": 12650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + }, + { + "id": 12658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 223 + ] + } + ] + }, + { + "id": 682, + "name": "sniffer_egg", + "translation_key": "block.minecraft.sniffer_egg", + "item_id": 566, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "hatch", + "values": [ + "0", + "1", + "2" + ] + } + ], + "default_state_id": 12659, + "states": [ + { + "id": 12659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 224 + ] + }, + { + "id": 12660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 224 + ] + }, + { + "id": 12661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 224 + ] + } + ] + }, + { + "id": 683, + "name": "dead_tube_coral_block", + "translation_key": "block.minecraft.dead_tube_coral_block", + "item_id": 567, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12662, + "states": [ + { + "id": 12662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 684, + "name": "dead_brain_coral_block", + "translation_key": "block.minecraft.dead_brain_coral_block", + "item_id": 568, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12663, + "states": [ + { + "id": 12663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 685, + "name": "dead_bubble_coral_block", + "translation_key": "block.minecraft.dead_bubble_coral_block", + "item_id": 569, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12664, + "states": [ + { + "id": 12664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 686, + "name": "dead_fire_coral_block", + "translation_key": "block.minecraft.dead_fire_coral_block", + "item_id": 570, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12665, + "states": [ + { + "id": 12665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 687, + "name": "dead_horn_coral_block", + "translation_key": "block.minecraft.dead_horn_coral_block", + "item_id": 571, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12666, + "states": [ + { + "id": 12666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 688, + "name": "tube_coral_block", + "translation_key": "block.minecraft.tube_coral_block", + "item_id": 572, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12667, + "states": [ + { + "id": 12667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 689, + "name": "brain_coral_block", + "translation_key": "block.minecraft.brain_coral_block", + "item_id": 573, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12668, + "states": [ + { + "id": 12668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 690, + "name": "bubble_coral_block", + "translation_key": "block.minecraft.bubble_coral_block", + "item_id": 574, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12669, + "states": [ + { + "id": 12669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 691, + "name": "fire_coral_block", + "translation_key": "block.minecraft.fire_coral_block", + "item_id": 575, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12670, + "states": [ + { + "id": 12670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 692, + "name": "horn_coral_block", + "translation_key": "block.minecraft.horn_coral_block", + "item_id": 576, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12671, + "states": [ + { + "id": 12671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 693, + "name": "dead_tube_coral", + "translation_key": "block.minecraft.dead_tube_coral", + "item_id": 586, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12672, + "states": [ + { + "id": 12672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 694, + "name": "dead_brain_coral", + "translation_key": "block.minecraft.dead_brain_coral", + "item_id": 582, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12674, + "states": [ + { + "id": 12674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 695, + "name": "dead_bubble_coral", + "translation_key": "block.minecraft.dead_bubble_coral", + "item_id": 583, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12676, + "states": [ + { + "id": 12676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 696, + "name": "dead_fire_coral", + "translation_key": "block.minecraft.dead_fire_coral", + "item_id": 584, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12678, + "states": [ + { + "id": 12678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 697, + "name": "dead_horn_coral", + "translation_key": "block.minecraft.dead_horn_coral", + "item_id": 585, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12680, + "states": [ + { + "id": 12680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 698, + "name": "tube_coral", + "translation_key": "block.minecraft.tube_coral", + "item_id": 577, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12682, + "states": [ + { + "id": 12682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 699, + "name": "brain_coral", + "translation_key": "block.minecraft.brain_coral", + "item_id": 578, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12684, + "states": [ + { + "id": 12684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 700, + "name": "bubble_coral", + "translation_key": "block.minecraft.bubble_coral", + "item_id": 579, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12686, + "states": [ + { + "id": 12686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 701, + "name": "fire_coral", + "translation_key": "block.minecraft.fire_coral", + "item_id": 580, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12688, + "states": [ + { + "id": 12688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 702, + "name": "horn_coral", + "translation_key": "block.minecraft.horn_coral", + "item_id": 581, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12690, + "states": [ + { + "id": 12690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 703, + "name": "dead_tube_coral_fan", + "translation_key": "block.minecraft.dead_tube_coral_fan", + "item_id": 592, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 713, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12692, + "states": [ + { + "id": 12692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 704, + "name": "dead_brain_coral_fan", + "translation_key": "block.minecraft.dead_brain_coral_fan", + "item_id": 593, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 714, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12694, + "states": [ + { + "id": 12694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 705, + "name": "dead_bubble_coral_fan", + "translation_key": "block.minecraft.dead_bubble_coral_fan", + "item_id": 594, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 715, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12696, + "states": [ + { + "id": 12696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 706, + "name": "dead_fire_coral_fan", + "translation_key": "block.minecraft.dead_fire_coral_fan", + "item_id": 595, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 716, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12698, + "states": [ + { + "id": 12698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 707, + "name": "dead_horn_coral_fan", + "translation_key": "block.minecraft.dead_horn_coral_fan", + "item_id": 596, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 717, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12700, + "states": [ + { + "id": 12700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 708, + "name": "tube_coral_fan", + "translation_key": "block.minecraft.tube_coral_fan", + "item_id": 587, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 718, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12702, + "states": [ + { + "id": 12702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 709, + "name": "brain_coral_fan", + "translation_key": "block.minecraft.brain_coral_fan", + "item_id": 588, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 719, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12704, + "states": [ + { + "id": 12704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 710, + "name": "bubble_coral_fan", + "translation_key": "block.minecraft.bubble_coral_fan", + "item_id": 589, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 720, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12706, + "states": [ + { + "id": 12706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 711, + "name": "fire_coral_fan", + "translation_key": "block.minecraft.fire_coral_fan", + "item_id": 590, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 721, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12708, + "states": [ + { + "id": 12708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 712, + "name": "horn_coral_fan", + "translation_key": "block.minecraft.horn_coral_fan", + "item_id": 591, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 722, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12710, + "states": [ + { + "id": 12710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 713, + "name": "dead_tube_coral_wall_fan", + "translation_key": "block.minecraft.dead_tube_coral_wall_fan", + "item_id": 592, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12712, + "states": [ + { + "id": 12712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 714, + "name": "dead_brain_coral_wall_fan", + "translation_key": "block.minecraft.dead_brain_coral_wall_fan", + "item_id": 593, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12720, + "states": [ + { + "id": 12720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 715, + "name": "dead_bubble_coral_wall_fan", + "translation_key": "block.minecraft.dead_bubble_coral_wall_fan", + "item_id": 594, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12728, + "states": [ + { + "id": 12728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 716, + "name": "dead_fire_coral_wall_fan", + "translation_key": "block.minecraft.dead_fire_coral_wall_fan", + "item_id": 595, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12736, + "states": [ + { + "id": 12736, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12737, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12740, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12741, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 717, + "name": "dead_horn_coral_wall_fan", + "translation_key": "block.minecraft.dead_horn_coral_wall_fan", + "item_id": 596, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12744, + "states": [ + { + "id": 12744, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12745, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12748, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12749, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 12751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 718, + "name": "tube_coral_wall_fan", + "translation_key": "block.minecraft.tube_coral_wall_fan", + "item_id": 587, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12752, + "states": [ + { + "id": 12752, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12753, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12756, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12757, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 719, + "name": "brain_coral_wall_fan", + "translation_key": "block.minecraft.brain_coral_wall_fan", + "item_id": 588, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12760, + "states": [ + { + "id": 12760, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12761, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12764, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12765, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 720, + "name": "bubble_coral_wall_fan", + "translation_key": "block.minecraft.bubble_coral_wall_fan", + "item_id": 589, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12768, + "states": [ + { + "id": 12768, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12769, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12772, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12773, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 721, + "name": "fire_coral_wall_fan", + "translation_key": "block.minecraft.fire_coral_wall_fan", + "item_id": 590, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12776, + "states": [ + { + "id": 12776, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12777, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12780, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12781, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 722, + "name": "horn_coral_wall_fan", + "translation_key": "block.minecraft.horn_coral_wall_fan", + "item_id": 591, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12784, + "states": [ + { + "id": 12784, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12785, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12788, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12789, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 723, + "name": "sea_pickle", + "translation_key": "block.minecraft.sea_pickle", + "item_id": 179, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "pickles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12792, + "states": [ + { + "id": 12792, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 225 + ] + }, + { + "id": 12793, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 225 + ] + }, + { + "id": 12794, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 226 + ] + }, + { + "id": 12795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 226 + ] + }, + { + "id": 12796, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 227 + ] + }, + { + "id": 12797, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 227 + ] + }, + { + "id": 12798, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 228 + ] + }, + { + "id": 12799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 228 + ] + } + ] + }, + { + "id": 724, + "name": "blue_ice", + "translation_key": "block.minecraft.blue_ice", + "item_id": 597, + "hardness": 2.8, + "blast_resistance": 2.8, + "slipperiness": 0.989, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12800, + "states": [ + { + "id": 12800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 725, + "name": "conduit", + "translation_key": "block.minecraft.conduit", + "item_id": 598, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12801, + "states": [ + { + "id": 12801, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 229 + ], + "block_entity_type": 25 + }, + { + "id": 12802, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 229 + ], + "block_entity_type": 25 + } + ] + }, + { + "id": 726, + "name": "bamboo_sapling", + "translation_key": "block.minecraft.bamboo_sapling", + "item_id": 0, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12803, + "states": [ + { + "id": 12803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 727, + "name": "bamboo", + "translation_key": "block.minecraft.bamboo", + "item_id": 229, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1" + ] + }, + { + "name": "leaves", + "values": [ + "none", + "small", + "large" + ] + }, + { + "name": "stage", + "values": [ + "0", + "1" + ] + } + ], + "default_state_id": 12804, + "states": [ + { + "id": 12804, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12805, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12808, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12809, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12812, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12813, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + }, + { + "id": 12815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 230 + ] + } + ] + }, + { + "id": 728, + "name": "potted_bamboo", + "translation_key": "block.minecraft.potted_bamboo", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12816, + "states": [ + { + "id": 12816, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 729, + "name": "void_air", + "translation_key": "block.minecraft.void_air", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12817, + "states": [ + { + "id": 12817, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 730, + "name": "cave_air", + "translation_key": "block.minecraft.cave_air", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 12818, + "states": [ + { + "id": 12818, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 731, + "name": "bubble_column", + "translation_key": "block.minecraft.bubble_column", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "drag", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12819, + "states": [ + { + "id": 12819, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 12820, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 732, + "name": "polished_granite_stairs", + "translation_key": "block.minecraft.polished_granite_stairs", + "item_id": 599, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12832, + "states": [ + { + "id": 12821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 733, + "name": "smooth_red_sandstone_stairs", + "translation_key": "block.minecraft.smooth_red_sandstone_stairs", + "item_id": 600, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12912, + "states": [ + { + "id": 12901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 12923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 12933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 12943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 12945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 12949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 12953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 12955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 12959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 12963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 12967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 12971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 12973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 12977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 12979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 12980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 734, + "name": "mossy_stone_brick_stairs", + "translation_key": "block.minecraft.mossy_stone_brick_stairs", + "item_id": 601, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 12992, + "states": [ + { + "id": 12981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 12983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 12985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 12987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 12989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 12991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 12993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 12995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 12997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 12999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 735, + "name": "polished_diorite_stairs", + "translation_key": "block.minecraft.polished_diorite_stairs", + "item_id": 602, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13072, + "states": [ + { + "id": 13061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 736, + "name": "mossy_cobblestone_stairs", + "translation_key": "block.minecraft.mossy_cobblestone_stairs", + "item_id": 603, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13152, + "states": [ + { + "id": 13141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 737, + "name": "end_stone_brick_stairs", + "translation_key": "block.minecraft.end_stone_brick_stairs", + "item_id": 604, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13232, + "states": [ + { + "id": 13221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 738, + "name": "stone_stairs", + "translation_key": "block.minecraft.stone_stairs", + "item_id": 605, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13312, + "states": [ + { + "id": 13301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 739, + "name": "smooth_sandstone_stairs", + "translation_key": "block.minecraft.smooth_sandstone_stairs", + "item_id": 606, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13392, + "states": [ + { + "id": 13381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 740, + "name": "smooth_quartz_stairs", + "translation_key": "block.minecraft.smooth_quartz_stairs", + "item_id": 607, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13472, + "states": [ + { + "id": 13461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 741, + "name": "granite_stairs", + "translation_key": "block.minecraft.granite_stairs", + "item_id": 608, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13552, + "states": [ + { + "id": 13541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 742, + "name": "andesite_stairs", + "translation_key": "block.minecraft.andesite_stairs", + "item_id": 609, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13632, + "states": [ + { + "id": 13621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 743, + "name": "red_nether_brick_stairs", + "translation_key": "block.minecraft.red_nether_brick_stairs", + "item_id": 610, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13712, + "states": [ + { + "id": 13701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 744, + "name": "polished_andesite_stairs", + "translation_key": "block.minecraft.polished_andesite_stairs", + "item_id": 611, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13792, + "states": [ + { + "id": 13781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 745, + "name": "diorite_stairs", + "translation_key": "block.minecraft.diorite_stairs", + "item_id": 612, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13872, + "states": [ + { + "id": 13861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 13863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 13873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 13883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 13893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 13903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 13905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 13907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 13909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 13911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 13913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 13915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 13917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 13919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 13921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 13923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 13925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 13927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 13929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 13931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 13933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 13935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 13937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 13939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 13940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 746, + "name": "polished_granite_slab", + "translation_key": "block.minecraft.polished_granite_slab", + "item_id": 617, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13944, + "states": [ + { + "id": 13941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 747, + "name": "smooth_red_sandstone_slab", + "translation_key": "block.minecraft.smooth_red_sandstone_slab", + "item_id": 618, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13950, + "states": [ + { + "id": 13947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 748, + "name": "mossy_stone_brick_slab", + "translation_key": "block.minecraft.mossy_stone_brick_slab", + "item_id": 619, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13956, + "states": [ + { + "id": 13953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 749, + "name": "polished_diorite_slab", + "translation_key": "block.minecraft.polished_diorite_slab", + "item_id": 620, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13962, + "states": [ + { + "id": 13959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 750, + "name": "mossy_cobblestone_slab", + "translation_key": "block.minecraft.mossy_cobblestone_slab", + "item_id": 621, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13968, + "states": [ + { + "id": 13965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 751, + "name": "end_stone_brick_slab", + "translation_key": "block.minecraft.end_stone_brick_slab", + "item_id": 622, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13974, + "states": [ + { + "id": 13971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 752, + "name": "smooth_sandstone_slab", + "translation_key": "block.minecraft.smooth_sandstone_slab", + "item_id": 623, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13980, + "states": [ + { + "id": 13977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 753, + "name": "smooth_quartz_slab", + "translation_key": "block.minecraft.smooth_quartz_slab", + "item_id": 624, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13986, + "states": [ + { + "id": 13983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 754, + "name": "granite_slab", + "translation_key": "block.minecraft.granite_slab", + "item_id": 625, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13992, + "states": [ + { + "id": 13989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 13994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 755, + "name": "andesite_slab", + "translation_key": "block.minecraft.andesite_slab", + "item_id": 626, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 13998, + "states": [ + { + "id": 13995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 13997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 13999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 14000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 756, + "name": "red_nether_brick_slab", + "translation_key": "block.minecraft.red_nether_brick_slab", + "item_id": 627, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 14004, + "states": [ + { + "id": 14001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 14006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 757, + "name": "polished_andesite_slab", + "translation_key": "block.minecraft.polished_andesite_slab", + "item_id": 628, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 14010, + "states": [ + { + "id": 14007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 14012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 758, + "name": "diorite_slab", + "translation_key": "block.minecraft.diorite_slab", + "item_id": 629, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 14016, + "states": [ + { + "id": 14013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 14015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 14017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 14018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 759, + "name": "brick_wall", + "translation_key": "block.minecraft.brick_wall", + "item_id": 377, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 14022, + "states": [ + { + "id": 14019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 760, + "name": "prismarine_wall", + "translation_key": "block.minecraft.prismarine_wall", + "item_id": 378, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 14346, + "states": [ + { + "id": 14343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 761, + "name": "red_sandstone_wall", + "translation_key": "block.minecraft.red_sandstone_wall", + "item_id": 379, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 14670, + "states": [ + { + "id": 14667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 14695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 14697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 14701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 14703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 14743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 14745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 14749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 14751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 14767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 14773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 14775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 14887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 14889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 14893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 14895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 14911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 14913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 14917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 14919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 14959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 14961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 14965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 14967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 14983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 14985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 14989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 14990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 762, + "name": "mossy_stone_brick_wall", + "translation_key": "block.minecraft.mossy_stone_brick_wall", + "item_id": 380, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 14994, + "states": [ + { + "id": 14991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 14995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 14997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 14998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 14999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 763, + "name": "granite_wall", + "translation_key": "block.minecraft.granite_wall", + "item_id": 381, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 15318, + "states": [ + { + "id": 15315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 764, + "name": "stone_brick_wall", + "translation_key": "block.minecraft.stone_brick_wall", + "item_id": 382, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 15642, + "states": [ + { + "id": 15639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 15715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 15717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 15721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 15723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 15739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 15745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 15747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 15859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 15861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 15865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 15867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 15883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 15885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 15889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 15891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 15931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 15933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 15937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 15939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 15955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 15957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 15961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 15962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 765, + "name": "mud_brick_wall", + "translation_key": "block.minecraft.mud_brick_wall", + "item_id": 383, + "hardness": 1.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 15966, + "states": [ + { + "id": 15963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 15967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 15969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 15973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 15975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 15991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 15993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 15997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 15999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 766, + "name": "nether_brick_wall", + "translation_key": "block.minecraft.nether_brick_wall", + "item_id": 384, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 16290, + "states": [ + { + "id": 16287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 767, + "name": "andesite_wall", + "translation_key": "block.minecraft.andesite_wall", + "item_id": 385, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 16614, + "states": [ + { + "id": 16611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 16831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 16833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 16837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 16839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 16855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 16857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 16861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 16863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 16903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 16905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 16909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 16911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 16927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 16933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 16934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 768, + "name": "red_nether_brick_wall", + "translation_key": "block.minecraft.red_nether_brick_wall", + "item_id": 386, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 16938, + "states": [ + { + "id": 16935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 16939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 16941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 16945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 16947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 16963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 16965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 16969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 16971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 16975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 16977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 16981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 16983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 16993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 16995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 16998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 16999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 769, + "name": "sandstone_wall", + "translation_key": "block.minecraft.sandstone_wall", + "item_id": 387, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 17262, + "states": [ + { + "id": 17259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 770, + "name": "end_stone_brick_wall", + "translation_key": "block.minecraft.end_stone_brick_wall", + "item_id": 388, + "hardness": 3.0, + "blast_resistance": 9.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 17586, + "states": [ + { + "id": 17583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 17803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 17805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 17809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 17811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 17827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 17829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 17833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 17835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 17875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 17877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 17881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 17883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 17899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 17905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 17906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 771, + "name": "diorite_wall", + "translation_key": "block.minecraft.diorite_wall", + "item_id": 389, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 17910, + "states": [ + { + "id": 17907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 17911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 17913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 17917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 17919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 17935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 17937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 17941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 17943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 17983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 17985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 17989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 17991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 17995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 17997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 17998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 17999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 18001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 18004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 18007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 18010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 18013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 18015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 18016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 18019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 18022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 18025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 18124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 18127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 18129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 18130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 18133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 18135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 18151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 18153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 18157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 18159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 18199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 18201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 18205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 18207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 18223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 18225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 18229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 18230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 772, + "name": "scaffolding", + "translation_key": "block.minecraft.scaffolding", + "item_id": 634, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "bottom", + "values": [ + "true", + "false" + ] + }, + { + "name": "distance", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18262, + "states": [ + { + "id": 18231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18257, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18258, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18259, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18260, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18261, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + }, + { + "id": 18262, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 231, + 232, + 233, + 234, + 235, + 236, + 237 + ] + } + ] + }, + { + "id": 773, + "name": "loom", + "translation_key": "block.minecraft.loom", + "item_id": 1145, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 18263, + "states": [ + { + "id": 18263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 774, + "name": "barrel", + "translation_key": "block.minecraft.barrel", + "item_id": 1154, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18268, + "states": [ + { + "id": 18267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + }, + { + "id": 18278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 26 + } + ] + }, + { + "id": 775, + "name": "smoker", + "translation_key": "block.minecraft.smoker", + "item_id": 1155, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18280, + "states": [ + { + "id": 18279, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18281, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18283, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18285, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + }, + { + "id": 18286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 27 + } + ] + }, + { + "id": 776, + "name": "blast_furnace", + "translation_key": "block.minecraft.blast_furnace", + "item_id": 1156, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18288, + "states": [ + { + "id": 18287, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18289, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18291, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18293, + "luminance": 13, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + }, + { + "id": 18294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 28 + } + ] + }, + { + "id": 777, + "name": "cartography_table", + "translation_key": "block.minecraft.cartography_table", + "item_id": 1157, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18295, + "states": [ + { + "id": 18295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 778, + "name": "fletching_table", + "translation_key": "block.minecraft.fletching_table", + "item_id": 1158, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18296, + "states": [ + { + "id": 18296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 779, + "name": "grindstone", + "translation_key": "block.minecraft.grindstone", + "item_id": 1159, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 18301, + "states": [ + { + "id": 18297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 238, + 239, + 240, + 241, + 242, + 243, + 244 + ] + }, + { + "id": 18298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 238, + 239, + 240, + 241, + 242, + 243, + 244 + ] + }, + { + "id": 18299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 245, + 246, + 247, + 248, + 249, + 250, + 251 + ] + }, + { + "id": 18300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 245, + 246, + 247, + 248, + 249, + 250, + 251 + ] + }, + { + "id": 18301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 252, + 253, + 254, + 255, + 256 + ] + }, + { + "id": 18302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 257, + 258, + 259, + 260, + 261 + ] + }, + { + "id": 18303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 262, + 263, + 264, + 265, + 266 + ] + }, + { + "id": 18304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 267, + 268, + 269, + 270, + 271 + ] + }, + { + "id": 18305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 272, + 273, + 274, + 275, + 276 + ] + }, + { + "id": 18306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 272, + 273, + 274, + 275, + 276 + ] + }, + { + "id": 18307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 277, + 278, + 279, + 280, + 281 + ] + }, + { + "id": 18308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 277, + 278, + 279, + 280, + 281 + ] + } + ] + }, + { + "id": 780, + "name": "lectern", + "translation_key": "block.minecraft.lectern", + "item_id": 648, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "has_book", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18312, + "states": [ + { + "id": 18309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + }, + { + "id": 18324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 282 + ], + "block_entity_type": 29 + } + ] + }, + { + "id": 781, + "name": "smithing_table", + "translation_key": "block.minecraft.smithing_table", + "item_id": 1160, + "hardness": 2.5, + "blast_resistance": 2.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18325, + "states": [ + { + "id": 18325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 782, + "name": "stonecutter", + "translation_key": "block.minecraft.stonecutter", + "item_id": 1161, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + } + ], + "default_state_id": 18326, + "states": [ + { + "id": 18326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 283 + ] + }, + { + "id": 18327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 283 + ] + }, + { + "id": 18328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 283 + ] + }, + { + "id": 18329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 283 + ] + } + ] + }, + { + "id": 783, + "name": "bell", + "translation_key": "block.minecraft.bell", + "item_id": 1162, + "hardness": 5.0, + "blast_resistance": 5.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "attachment", + "values": [ + "floor", + "ceiling", + "single_wall", + "double_wall" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18331, + "states": [ + { + "id": 18330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 284 + ], + "block_entity_type": 30 + }, + { + "id": 18331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 284 + ], + "block_entity_type": 30 + }, + { + "id": 18332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 284 + ], + "block_entity_type": 30 + }, + { + "id": 18333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 284 + ], + "block_entity_type": 30 + }, + { + "id": 18334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 285 + ], + "block_entity_type": 30 + }, + { + "id": 18335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 285 + ], + "block_entity_type": 30 + }, + { + "id": 18336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 285 + ], + "block_entity_type": 30 + }, + { + "id": 18337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 285 + ], + "block_entity_type": 30 + }, + { + "id": 18338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 288 + ], + "block_entity_type": 30 + }, + { + "id": 18346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 289 + ], + "block_entity_type": 30 + }, + { + "id": 18347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 289 + ], + "block_entity_type": 30 + }, + { + "id": 18348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 290 + ], + "block_entity_type": 30 + }, + { + "id": 18349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 290 + ], + "block_entity_type": 30 + }, + { + "id": 18350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 291 + ], + "block_entity_type": 30 + }, + { + "id": 18351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 291 + ], + "block_entity_type": 30 + }, + { + "id": 18352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 292 + ], + "block_entity_type": 30 + }, + { + "id": 18353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 292 + ], + "block_entity_type": 30 + }, + { + "id": 18354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 293 + ], + "block_entity_type": 30 + }, + { + "id": 18355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 293 + ], + "block_entity_type": 30 + }, + { + "id": 18356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 293 + ], + "block_entity_type": 30 + }, + { + "id": 18357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 293 + ], + "block_entity_type": 30 + }, + { + "id": 18358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 294 + ], + "block_entity_type": 30 + }, + { + "id": 18359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 294 + ], + "block_entity_type": 30 + }, + { + "id": 18360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 294 + ], + "block_entity_type": 30 + }, + { + "id": 18361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 286, + 287, + 294 + ], + "block_entity_type": 30 + } + ] + }, + { + "id": 784, + "name": "lantern", + "translation_key": "block.minecraft.lantern", + "item_id": 1163, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "hanging", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18365, + "states": [ + { + "id": 18362, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 295, + 296 + ] + }, + { + "id": 18363, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 295, + 296 + ] + }, + { + "id": 18364, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 297, + 298 + ] + }, + { + "id": 18365, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 297, + 298 + ] + } + ] + }, + { + "id": 785, + "name": "soul_lantern", + "translation_key": "block.minecraft.soul_lantern", + "item_id": 1164, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "hanging", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18369, + "states": [ + { + "id": 18366, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 295, + 296 + ] + }, + { + "id": 18367, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 295, + 296 + ] + }, + { + "id": 18368, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 297, + 298 + ] + }, + { + "id": 18369, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 297, + 298 + ] + } + ] + }, + { + "id": 786, + "name": "campfire", + "translation_key": "block.minecraft.campfire", + "item_id": 1167, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "signal_fire", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18373, + "states": [ + { + "id": 18370, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18371, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18372, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18373, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18378, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18379, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18380, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18381, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18386, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18387, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18388, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18389, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18390, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18391, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18392, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18393, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18394, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18395, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18396, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18397, + "luminance": 15, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18398, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18399, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18400, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18401, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + } + ] + }, + { + "id": 787, + "name": "soul_campfire", + "translation_key": "block.minecraft.soul_campfire", + "item_id": 1168, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "signal_fire", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18405, + "states": [ + { + "id": 18402, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18403, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18404, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18405, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18406, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18407, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18408, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18409, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18410, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18411, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18412, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18413, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18414, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18415, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18416, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18417, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18418, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18419, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18420, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18421, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18426, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18427, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18428, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18429, + "luminance": 10, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + }, + { + "id": 18433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 299 + ], + "block_entity_type": 32 + } + ] + }, + { + "id": 788, + "name": "sweet_berry_bush", + "translation_key": "block.minecraft.sweet_berry_bush", + "item_id": 1165, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3" + ] + } + ], + "default_state_id": 18434, + "states": [ + { + "id": 18434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 789, + "name": "warped_stem", + "translation_key": "block.minecraft.warped_stem", + "item_id": 121, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18439, + "states": [ + { + "id": 18438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 790, + "name": "stripped_warped_stem", + "translation_key": "block.minecraft.stripped_warped_stem", + "item_id": 132, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18442, + "states": [ + { + "id": 18441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 791, + "name": "warped_hyphae", + "translation_key": "block.minecraft.warped_hyphae", + "item_id": 153, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18445, + "states": [ + { + "id": 18444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 792, + "name": "stripped_warped_hyphae", + "translation_key": "block.minecraft.stripped_warped_hyphae", + "item_id": 142, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18448, + "states": [ + { + "id": 18447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 793, + "name": "warped_nylium", + "translation_key": "block.minecraft.warped_nylium", + "item_id": 21, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18450, + "states": [ + { + "id": 18450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 794, + "name": "warped_fungus", + "translation_key": "block.minecraft.warped_fungus", + "item_id": 215, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18451, + "states": [ + { + "id": 18451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 795, + "name": "warped_wart_block", + "translation_key": "block.minecraft.warped_wart_block", + "item_id": 496, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18452, + "states": [ + { + "id": 18452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 796, + "name": "warped_roots", + "translation_key": "block.minecraft.warped_roots", + "item_id": 217, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18453, + "states": [ + { + "id": 18453, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 797, + "name": "nether_sprouts", + "translation_key": "block.minecraft.nether_sprouts", + "item_id": 218, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18454, + "states": [ + { + "id": 18454, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 798, + "name": "crimson_stem", + "translation_key": "block.minecraft.crimson_stem", + "item_id": 120, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18456, + "states": [ + { + "id": 18455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 799, + "name": "stripped_crimson_stem", + "translation_key": "block.minecraft.stripped_crimson_stem", + "item_id": 131, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18459, + "states": [ + { + "id": 18458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 800, + "name": "crimson_hyphae", + "translation_key": "block.minecraft.crimson_hyphae", + "item_id": 152, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18462, + "states": [ + { + "id": 18461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 801, + "name": "stripped_crimson_hyphae", + "translation_key": "block.minecraft.stripped_crimson_hyphae", + "item_id": 141, + "hardness": 2.0, + "blast_resistance": 2.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 18465, + "states": [ + { + "id": 18464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 802, + "name": "crimson_nylium", + "translation_key": "block.minecraft.crimson_nylium", + "item_id": 20, + "hardness": 0.4, + "blast_resistance": 0.4, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18467, + "states": [ + { + "id": 18467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 803, + "name": "crimson_fungus", + "translation_key": "block.minecraft.crimson_fungus", + "item_id": 214, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18468, + "states": [ + { + "id": 18468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 804, + "name": "shroomlight", + "translation_key": "block.minecraft.shroomlight", + "item_id": 1169, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18469, + "states": [ + { + "id": 18469, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 805, + "name": "weeping_vines", + "translation_key": "block.minecraft.weeping_vines", + "item_id": 219, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25" + ] + } + ], + "default_state_id": 18470, + "states": [ + { + "id": 18470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 806, + "name": "weeping_vines_plant", + "translation_key": "block.minecraft.weeping_vines_plant", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18496, + "states": [ + { + "id": 18496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 807, + "name": "twisting_vines", + "translation_key": "block.minecraft.twisting_vines", + "item_id": 220, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25" + ] + } + ], + "default_state_id": 18497, + "states": [ + { + "id": 18497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 808, + "name": "twisting_vines_plant", + "translation_key": "block.minecraft.twisting_vines_plant", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18523, + "states": [ + { + "id": 18523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 809, + "name": "crimson_roots", + "translation_key": "block.minecraft.crimson_roots", + "item_id": 216, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18524, + "states": [ + { + "id": 18524, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 810, + "name": "crimson_planks", + "translation_key": "block.minecraft.crimson_planks", + "item_id": 32, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18525, + "states": [ + { + "id": 18525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 811, + "name": "warped_planks", + "translation_key": "block.minecraft.warped_planks", + "item_id": 33, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 18526, + "states": [ + { + "id": 18526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 812, + "name": "crimson_slab", + "translation_key": "block.minecraft.crimson_slab", + "item_id": 240, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18530, + "states": [ + { + "id": 18527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 18528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 18529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 18530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 18531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 813, + "name": "warped_slab", + "translation_key": "block.minecraft.warped_slab", + "item_id": 241, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18536, + "states": [ + { + "id": 18533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 18534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 18535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 18536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 18537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 18538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 814, + "name": "crimson_pressure_plate", + "translation_key": "block.minecraft.crimson_pressure_plate", + "item_id": 686, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18540, + "states": [ + { + "id": 18539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 815, + "name": "warped_pressure_plate", + "translation_key": "block.minecraft.warped_pressure_plate", + "item_id": 687, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18542, + "states": [ + { + "id": 18541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 816, + "name": "crimson_fence", + "translation_key": "block.minecraft.crimson_fence", + "item_id": 298, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18574, + "states": [ + { + "id": 18543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 18544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 18545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 18546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 18547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 18548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 18549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 18550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 18551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 18552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 18553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 18554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 18555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 18557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 18559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 18560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 18562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 18564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 18565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 18566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 18567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 18568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 18569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 18570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 18571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 18572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 18573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 18574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 817, + "name": "warped_fence", + "translation_key": "block.minecraft.warped_fence", + "item_id": 299, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18606, + "states": [ + { + "id": 18575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 18576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 18577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76, + 77 + ] + }, + { + "id": 18578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78, + 79 + ] + }, + { + "id": 18579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 18580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 18581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 76 + ] + }, + { + "id": 18582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80, + 79 + ] + }, + { + "id": 18583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 18584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 18585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75, + 77 + ] + }, + { + "id": 18586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81, + 79 + ] + }, + { + "id": 18587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 18589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 82 + ] + }, + { + "id": 18591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 18592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76, + 77 + ] + }, + { + "id": 18594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 18596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 18597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 76 + ] + }, + { + "id": 18598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 80 + ] + }, + { + "id": 18599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 18600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 18601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83, + 77 + ] + }, + { + "id": 18602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 81 + ] + }, + { + "id": 18603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 18604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + }, + { + "id": 18605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 83 + ] + }, + { + "id": 18606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 84 + ] + } + ] + }, + { + "id": 818, + "name": "crimson_trapdoor", + "translation_key": "block.minecraft.crimson_trapdoor", + "item_id": 710, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18622, + "states": [ + { + "id": 18607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18608, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18609, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18612, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18613, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18616, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18617, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18620, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18621, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18624, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18625, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18628, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18629, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18632, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18633, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18636, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18637, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18640, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18641, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18644, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18645, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18648, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18649, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18652, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18653, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18656, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18657, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18660, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18661, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18664, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18665, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18668, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18669, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 819, + "name": "warped_trapdoor", + "translation_key": "block.minecraft.warped_trapdoor", + "item_id": 711, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18686, + "states": [ + { + "id": 18671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18672, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18673, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18676, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18677, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18680, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18681, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 18683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18684, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18685, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18688, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18689, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18692, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18693, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18696, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18697, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 18699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18700, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18701, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18704, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18705, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18708, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18709, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18712, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18713, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 18715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18716, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18717, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18720, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18721, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18724, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18725, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 92 + ] + }, + { + "id": 18727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18728, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18729, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 18731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18732, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18733, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + }, + { + "id": 18734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 93 + ] + } + ] + }, + { + "id": 820, + "name": "crimson_fence_gate", + "translation_key": "block.minecraft.crimson_fence_gate", + "item_id": 721, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18742, + "states": [ + { + "id": 18735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 821, + "name": "warped_fence_gate", + "translation_key": "block.minecraft.warped_fence_gate", + "item_id": 722, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "in_wall", + "values": [ + "true", + "false" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18774, + "states": [ + { + "id": 18767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 75 + ] + }, + { + "id": 18783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 18797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + }, + { + "id": 18798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 78 + ] + } + ] + }, + { + "id": 822, + "name": "crimson_stairs", + "translation_key": "block.minecraft.crimson_stairs", + "item_id": 371, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18810, + "states": [ + { + "id": 18799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 18800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 18801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 18810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 18811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 18820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 18821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 18830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 18831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 18840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 18841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 18850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 18851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 18860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 18861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 18870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 18871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 823, + "name": "warped_stairs", + "translation_key": "block.minecraft.warped_stairs", + "item_id": 372, + "hardness": 2.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18890, + "states": [ + { + "id": 18879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 18880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 18881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 18890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 18891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 18900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 18901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 18910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 18911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 18920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 18921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 18923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 18925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 18927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 18929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 18930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 18931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 18933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 18935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 18937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 18939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 18940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 18941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 18943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 18945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 18947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 18949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 18950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 18951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 18953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 18955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 18957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 18958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 824, + "name": "crimson_button", + "translation_key": "block.minecraft.crimson_button", + "item_id": 671, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18968, + "states": [ + { + "id": 18959, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18960, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18961, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18962, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18963, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18964, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18965, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18966, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18967, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18968, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18969, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18970, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18971, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18972, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18973, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18974, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18975, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18976, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18977, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18978, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18979, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18980, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18981, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18982, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 825, + "name": "warped_button", + "translation_key": "block.minecraft.warped_button", + "item_id": 672, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 18992, + "states": [ + { + "id": 18983, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18984, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18985, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18986, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18987, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18988, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18989, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18990, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18991, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18992, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18993, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18994, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18995, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18996, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18997, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18998, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 18999, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19000, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19001, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19002, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19003, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19004, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19005, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 19006, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 826, + "name": "crimson_door", + "translation_key": "block.minecraft.crimson_door", + "item_id": 698, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19018, + "states": [ + { + "id": 19007, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19008, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19009, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19010, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19011, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19012, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19013, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19014, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19015, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19016, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19017, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19018, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19019, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19020, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19021, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19022, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19023, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19024, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19025, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19026, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19027, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19028, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19029, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19030, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19031, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19032, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19033, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19034, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19035, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19036, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19037, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19038, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19039, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19040, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19041, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19042, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19043, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19044, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19045, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19046, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19047, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19048, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19049, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19050, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19051, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19052, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19053, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19054, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19055, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19056, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19057, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19058, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19059, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19060, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19061, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19062, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19063, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19064, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19065, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19066, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19067, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19068, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19069, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19070, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 827, + "name": "warped_door", + "translation_key": "block.minecraft.warped_door", + "item_id": 699, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "hinge", + "values": [ + "left", + "right" + ] + }, + { + "name": "open", + "values": [ + "true", + "false" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19082, + "states": [ + { + "id": 19071, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19072, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19073, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19074, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19075, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19076, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19077, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19078, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19079, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19080, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19081, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19082, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19083, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19084, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19085, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19086, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19087, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19088, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19089, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19090, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19091, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19092, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19093, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19094, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19095, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19096, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19097, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19098, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19099, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19100, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19101, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19102, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19103, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19104, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19105, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19108, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19109, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19110, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19111, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19112, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19113, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19114, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19115, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19116, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19118, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 66 + ] + }, + { + "id": 19119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 67 + ] + }, + { + "id": 19129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 65 + ] + }, + { + "id": 19133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + }, + { + "id": 19134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 64 + ] + } + ] + }, + { + "id": 828, + "name": "crimson_sign", + "translation_key": "block.minecraft.crimson_sign", + "item_id": 855, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 830, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19136, + "states": [ + { + "id": 19135, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19136, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19137, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19138, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19139, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19140, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19141, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19142, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19143, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19144, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19145, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19146, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19147, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19148, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19149, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19150, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19151, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19152, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19153, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19154, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19155, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19156, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19157, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19158, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19159, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19160, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19161, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19162, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19163, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19164, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19165, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19166, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 829, + "name": "warped_sign", + "translation_key": "block.minecraft.warped_sign", + "item_id": 856, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "wall_variant_id": 831, + "properties": [ + { + "name": "rotation", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19168, + "states": [ + { + "id": 19167, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19168, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19169, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19170, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19171, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19172, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19173, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19174, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19175, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19176, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19177, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19178, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19179, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19180, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19181, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19182, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19183, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19184, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19185, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19186, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19187, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19188, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19189, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19190, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19191, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19192, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19193, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19194, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19195, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19196, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19197, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19198, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 830, + "name": "crimson_wall_sign", + "translation_key": "block.minecraft.crimson_sign", + "item_id": 855, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19200, + "states": [ + { + "id": 19199, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19200, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19201, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19202, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19203, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19204, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19205, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19206, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 831, + "name": "warped_wall_sign", + "translation_key": "block.minecraft.warped_sign", + "item_id": 856, + "hardness": 1.0, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19208, + "states": [ + { + "id": 19207, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19208, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19209, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19210, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19211, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19212, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19213, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + }, + { + "id": 19214, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [], + "block_entity_type": 7 + } + ] + }, + { + "id": 832, + "name": "structure_block", + "translation_key": "block.minecraft.structure_block", + "item_id": 754, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "mode", + "values": [ + "save", + "load", + "corner", + "data" + ] + } + ], + "default_state_id": 19216, + "states": [ + { + "id": 19215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 20 + }, + { + "id": 19216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 20 + }, + { + "id": 19217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 20 + }, + { + "id": 19218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 20 + } + ] + }, + { + "id": 833, + "name": "jigsaw", + "translation_key": "block.minecraft.jigsaw", + "item_id": 755, + "hardness": -1.0, + "blast_resistance": 3600000.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "orientation", + "values": [ + "down_east", + "down_north", + "down_south", + "down_west", + "up_east", + "up_north", + "up_south", + "up_west", + "west_up", + "east_up", + "north_up", + "south_up" + ] + } + ], + "default_state_id": 19229, + "states": [ + { + "id": 19219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + }, + { + "id": 19230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 31 + } + ] + }, + { + "id": 834, + "name": "composter", + "translation_key": "block.minecraft.composter", + "item_id": 1153, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8" + ] + } + ], + "default_state_id": 19231, + "states": [ + { + "id": 19231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + }, + { + "id": 19239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 70, + 300, + 301, + 302, + 303 + ] + } + ] + }, + { + "id": 835, + "name": "target", + "translation_key": "block.minecraft.target", + "item_id": 649, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + } + ], + "default_state_id": 19240, + "states": [ + { + "id": 19240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 836, + "name": "bee_nest", + "translation_key": "block.minecraft.bee_nest", + "item_id": 1171, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "honey_level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5" + ] + } + ], + "default_state_id": 19256, + "states": [ + { + "id": 19256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + } + ] + }, + { + "id": 837, + "name": "beehive", + "translation_key": "block.minecraft.beehive", + "item_id": 1172, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "honey_level", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5" + ] + } + ], + "default_state_id": 19280, + "states": [ + { + "id": 19280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + }, + { + "id": 19303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 33 + } + ] + }, + { + "id": 838, + "name": "honey_block", + "translation_key": "block.minecraft.honey_block", + "item_id": 643, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 0.4, + "jump_factor": 0.5, + "properties": [], + "default_state_id": 19304, + "states": [ + { + "id": 19304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 74 + ] + } + ] + }, + { + "id": 839, + "name": "honeycomb_block", + "translation_key": "block.minecraft.honeycomb_block", + "item_id": 1174, + "hardness": 0.6, + "blast_resistance": 0.6, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19305, + "states": [ + { + "id": 19305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 840, + "name": "netherite_block", + "translation_key": "block.minecraft.netherite_block", + "item_id": 78, + "hardness": 50.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19306, + "states": [ + { + "id": 19306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 841, + "name": "ancient_debris", + "translation_key": "block.minecraft.ancient_debris", + "item_id": 67, + "hardness": 30.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19307, + "states": [ + { + "id": 19307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 842, + "name": "crying_obsidian", + "translation_key": "block.minecraft.crying_obsidian", + "item_id": 1176, + "hardness": 50.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19308, + "states": [ + { + "id": 19308, + "luminance": 10, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 843, + "name": "respawn_anchor", + "translation_key": "block.minecraft.respawn_anchor", + "item_id": 1189, + "hardness": 50.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "charges", + "values": [ + "0", + "1", + "2", + "3", + "4" + ] + } + ], + "default_state_id": 19309, + "states": [ + { + "id": 19309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19310, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19311, + "luminance": 7, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19312, + "luminance": 11, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19313, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 844, + "name": "potted_crimson_fungus", + "translation_key": "block.minecraft.potted_crimson_fungus", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19314, + "states": [ + { + "id": 19314, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 845, + "name": "potted_warped_fungus", + "translation_key": "block.minecraft.potted_warped_fungus", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19315, + "states": [ + { + "id": 19315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 846, + "name": "potted_crimson_roots", + "translation_key": "block.minecraft.potted_crimson_roots", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19316, + "states": [ + { + "id": 19316, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 847, + "name": "potted_warped_roots", + "translation_key": "block.minecraft.potted_warped_roots", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19317, + "states": [ + { + "id": 19317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 848, + "name": "lodestone", + "translation_key": "block.minecraft.lodestone", + "item_id": 1175, + "hardness": 3.5, + "blast_resistance": 3.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19318, + "states": [ + { + "id": 19318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 849, + "name": "blackstone", + "translation_key": "block.minecraft.blackstone", + "item_id": 1177, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19319, + "states": [ + { + "id": 19319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 850, + "name": "blackstone_stairs", + "translation_key": "block.minecraft.blackstone_stairs", + "item_id": 1179, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19331, + "states": [ + { + "id": 19320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 19321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 19322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 19331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 19332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 19341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 19342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 19351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 19352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 19361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 19362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 19371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 19372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 19381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 19382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 19391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 19392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 851, + "name": "blackstone_wall", + "translation_key": "block.minecraft.blackstone_wall", + "item_id": 390, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 19403, + "states": [ + { + "id": 19400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 19401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 19404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 19407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 19410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 852, + "name": "blackstone_slab", + "translation_key": "block.minecraft.blackstone_slab", + "item_id": 1178, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19727, + "states": [ + { + "id": 19724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 19725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 19726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 19727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 19728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 853, + "name": "polished_blackstone", + "translation_key": "block.minecraft.polished_blackstone", + "item_id": 1181, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19730, + "states": [ + { + "id": 19730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 854, + "name": "polished_blackstone_bricks", + "translation_key": "block.minecraft.polished_blackstone_bricks", + "item_id": 1185, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19731, + "states": [ + { + "id": 19731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 855, + "name": "cracked_polished_blackstone_bricks", + "translation_key": "block.minecraft.cracked_polished_blackstone_bricks", + "item_id": 1188, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19732, + "states": [ + { + "id": 19732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 856, + "name": "chiseled_polished_blackstone", + "translation_key": "block.minecraft.chiseled_polished_blackstone", + "item_id": 1184, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 19733, + "states": [ + { + "id": 19733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 857, + "name": "polished_blackstone_brick_slab", + "translation_key": "block.minecraft.polished_blackstone_brick_slab", + "item_id": 1186, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19737, + "states": [ + { + "id": 19734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 19735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 19736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 19737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 19738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 19739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 858, + "name": "polished_blackstone_brick_stairs", + "translation_key": "block.minecraft.polished_blackstone_brick_stairs", + "item_id": 1187, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 19751, + "states": [ + { + "id": 19740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 19741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 19742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 19751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 19752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 19761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 19762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 19771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 19772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 19781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 19782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 19784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 19786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 19788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 19790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 19791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 19792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 19794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 19796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 19798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 19800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 19801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 19802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 19804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 19806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 19808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 19810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 19811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 19812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 19814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 19816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 19818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 19819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 859, + "name": "polished_blackstone_brick_wall", + "translation_key": "block.minecraft.polished_blackstone_brick_wall", + "item_id": 392, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 19823, + "states": [ + { + "id": 19820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 19821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 19824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 19826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 19827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 19830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 19832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 19848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 19850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 19854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 19856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 19896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 19898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 19902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 19904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 19920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 19926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 19928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 19932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 19934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 19938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 19940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 19956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 19958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 19962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 19964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 19968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 19970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 19974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 19976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 19992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 19994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 19998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 19999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 860, + "name": "gilded_blackstone", + "translation_key": "block.minecraft.gilded_blackstone", + "item_id": 1180, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20144, + "states": [ + { + "id": 20144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 861, + "name": "polished_blackstone_stairs", + "translation_key": "block.minecraft.polished_blackstone_stairs", + "item_id": 1183, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20156, + "states": [ + { + "id": 20145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 20146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 20147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 20148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 20149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 20150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 20151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 20152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 20153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 20154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 20155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 20156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 20157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 20158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 20159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 20160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 20161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 20162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 20163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 20164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 20165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 20166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 20167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 20168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 20169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 20170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 20171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 20172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 20173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 20174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 20175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 20176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 20177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 20178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 20179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 20180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 20181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 20182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 20183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 20184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 20185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 20186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 20187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 20188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 20189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 20190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 20191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 20192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 20193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 20194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 20195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 20196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 20197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 20198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 20199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 20200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 20201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 20202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 20203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 20204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 20205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 20206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 20207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 20208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 20209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 20210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 20211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 20212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 20213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 20214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 20215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 20216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 20217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 20218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 20219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 20220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 20221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 20222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 20223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 20224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 862, + "name": "polished_blackstone_slab", + "translation_key": "block.minecraft.polished_blackstone_slab", + "item_id": 1182, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20228, + "states": [ + { + "id": 20225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 20226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 20227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 20228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 20229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 20230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 863, + "name": "polished_blackstone_pressure_plate", + "translation_key": "block.minecraft.polished_blackstone_pressure_plate", + "item_id": 674, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20232, + "states": [ + { + "id": 20231, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 20232, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 864, + "name": "polished_blackstone_button", + "translation_key": "block.minecraft.polished_blackstone_button", + "item_id": 661, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "face", + "values": [ + "floor", + "wall", + "ceiling" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20242, + "states": [ + { + "id": 20233, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20234, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20235, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20236, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20237, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20238, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20239, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20240, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20241, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20242, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20243, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20244, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20245, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20246, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20247, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20248, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20249, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20250, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20251, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20252, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20253, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20254, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20255, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 20256, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 865, + "name": "polished_blackstone_wall", + "translation_key": "block.minecraft.polished_blackstone_wall", + "item_id": 391, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 20260, + "states": [ + { + "id": 20257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 20258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 20259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 20260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 20261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 20262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 20263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 20264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 20265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 20266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 20267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 20268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 20269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 20270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 20273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 20276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 20279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 20282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 20285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 20287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 20288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 20291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 20293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 20294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 20297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 20300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 20303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 20330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 20333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 20335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 20336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 20339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 20341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 20357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 20363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 20365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 20477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 20479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 20483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 20485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 20501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 20503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 20507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 20509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 20549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 20551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 20555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 20557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 20573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 20575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 20579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 20580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 866, + "name": "chiseled_nether_bricks", + "translation_key": "block.minecraft.chiseled_nether_bricks", + "item_id": 346, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20581, + "states": [ + { + "id": 20581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 867, + "name": "cracked_nether_bricks", + "translation_key": "block.minecraft.cracked_nether_bricks", + "item_id": 345, + "hardness": 2.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20582, + "states": [ + { + "id": 20582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 868, + "name": "quartz_bricks", + "translation_key": "block.minecraft.quartz_bricks", + "item_id": 402, + "hardness": 0.8, + "blast_resistance": 0.8, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20583, + "states": [ + { + "id": 20583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 869, + "name": "candle", + "translation_key": "block.minecraft.candle", + "item_id": 1190, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20587, + "states": [ + { + "id": 20584, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20585, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20586, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20587, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20588, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20589, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20590, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20591, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20592, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20593, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20594, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20595, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20596, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20597, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20598, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20599, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 870, + "name": "white_candle", + "translation_key": "block.minecraft.white_candle", + "item_id": 1191, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20603, + "states": [ + { + "id": 20600, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20601, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20602, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20603, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20604, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20605, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20606, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20607, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20608, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20609, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20610, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20611, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20612, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20613, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20614, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20615, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 871, + "name": "orange_candle", + "translation_key": "block.minecraft.orange_candle", + "item_id": 1192, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20619, + "states": [ + { + "id": 20616, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20617, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20618, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20619, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20620, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20621, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20622, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20623, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20624, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20625, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20626, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20627, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20628, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20629, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20630, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20631, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 872, + "name": "magenta_candle", + "translation_key": "block.minecraft.magenta_candle", + "item_id": 1193, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20635, + "states": [ + { + "id": 20632, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20633, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20634, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20635, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20636, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20637, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20638, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20639, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20640, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20641, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20642, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20643, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20644, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20645, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20646, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20647, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 873, + "name": "light_blue_candle", + "translation_key": "block.minecraft.light_blue_candle", + "item_id": 1194, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20651, + "states": [ + { + "id": 20648, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20649, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20650, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20651, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20652, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20653, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20654, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20655, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20656, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20657, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20658, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20659, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20660, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20661, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20662, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20663, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 874, + "name": "yellow_candle", + "translation_key": "block.minecraft.yellow_candle", + "item_id": 1195, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20667, + "states": [ + { + "id": 20664, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20665, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20666, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20667, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20668, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20669, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20670, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20671, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20672, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20673, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20674, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20675, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20676, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20677, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20678, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20679, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 875, + "name": "lime_candle", + "translation_key": "block.minecraft.lime_candle", + "item_id": 1196, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20683, + "states": [ + { + "id": 20680, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20681, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20682, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20683, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20684, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20685, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20686, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20687, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20688, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20689, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20690, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20691, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20692, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20693, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20694, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20695, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 876, + "name": "pink_candle", + "translation_key": "block.minecraft.pink_candle", + "item_id": 1197, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20699, + "states": [ + { + "id": 20696, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20697, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20698, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20699, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20700, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20701, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20702, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20703, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20704, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20705, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20706, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20707, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20708, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20709, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20710, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20711, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 877, + "name": "gray_candle", + "translation_key": "block.minecraft.gray_candle", + "item_id": 1198, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20715, + "states": [ + { + "id": 20712, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20713, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20714, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20715, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20716, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20717, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20718, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20719, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20720, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20721, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20722, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20723, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20724, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20725, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20726, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20727, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 878, + "name": "light_gray_candle", + "translation_key": "block.minecraft.light_gray_candle", + "item_id": 1199, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20731, + "states": [ + { + "id": 20728, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20729, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20730, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20731, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20732, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20733, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20734, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20735, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20736, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20737, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20738, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20739, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20740, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20741, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20742, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20743, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 879, + "name": "cyan_candle", + "translation_key": "block.minecraft.cyan_candle", + "item_id": 1200, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20747, + "states": [ + { + "id": 20744, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20745, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20746, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20747, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20748, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20749, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20750, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20751, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20752, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20753, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20754, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20755, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20756, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20757, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20758, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20759, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 880, + "name": "purple_candle", + "translation_key": "block.minecraft.purple_candle", + "item_id": 1201, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20763, + "states": [ + { + "id": 20760, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20761, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20762, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20763, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20764, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20765, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20766, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20767, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20768, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20769, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20770, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20771, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20772, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20773, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20774, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20775, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 881, + "name": "blue_candle", + "translation_key": "block.minecraft.blue_candle", + "item_id": 1202, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20779, + "states": [ + { + "id": 20776, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20777, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20778, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20779, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20780, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20781, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20782, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20783, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20784, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20785, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20786, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20787, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20788, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20789, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20790, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20791, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 882, + "name": "brown_candle", + "translation_key": "block.minecraft.brown_candle", + "item_id": 1203, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20795, + "states": [ + { + "id": 20792, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20793, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20794, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20795, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20796, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20797, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20798, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20799, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20800, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20801, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20802, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20803, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20804, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20805, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20806, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20807, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 883, + "name": "green_candle", + "translation_key": "block.minecraft.green_candle", + "item_id": 1204, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20811, + "states": [ + { + "id": 20808, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20809, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20810, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20811, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20812, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20813, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20814, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20815, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20816, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20817, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20818, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20819, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20820, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20821, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20822, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20823, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 884, + "name": "red_candle", + "translation_key": "block.minecraft.red_candle", + "item_id": 1205, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20827, + "states": [ + { + "id": 20824, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20825, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20826, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20827, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20828, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20829, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20830, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20831, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20832, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20833, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20834, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20835, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20836, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20837, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20838, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20839, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 885, + "name": "black_candle", + "translation_key": "block.minecraft.black_candle", + "item_id": 1206, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "candles", + "values": [ + "1", + "2", + "3", + "4" + ] + }, + { + "name": "lit", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20843, + "states": [ + { + "id": 20840, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20841, + "luminance": 3, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20842, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20843, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 304 + ] + }, + { + "id": 20844, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20845, + "luminance": 6, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20846, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20847, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 305 + ] + }, + { + "id": 20848, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20849, + "luminance": 9, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20850, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20851, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 306 + ] + }, + { + "id": 20852, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20853, + "luminance": 12, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20854, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + }, + { + "id": 20855, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 307 + ] + } + ] + }, + { + "id": 886, + "name": "candle_cake", + "translation_key": "block.minecraft.candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20857, + "states": [ + { + "id": 20856, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 887, + "name": "white_candle_cake", + "translation_key": "block.minecraft.white_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20859, + "states": [ + { + "id": 20858, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 888, + "name": "orange_candle_cake", + "translation_key": "block.minecraft.orange_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20861, + "states": [ + { + "id": 20860, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 889, + "name": "magenta_candle_cake", + "translation_key": "block.minecraft.magenta_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20863, + "states": [ + { + "id": 20862, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 890, + "name": "light_blue_candle_cake", + "translation_key": "block.minecraft.light_blue_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20865, + "states": [ + { + "id": 20864, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 891, + "name": "yellow_candle_cake", + "translation_key": "block.minecraft.yellow_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20867, + "states": [ + { + "id": 20866, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 892, + "name": "lime_candle_cake", + "translation_key": "block.minecraft.lime_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20869, + "states": [ + { + "id": 20868, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 893, + "name": "pink_candle_cake", + "translation_key": "block.minecraft.pink_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20871, + "states": [ + { + "id": 20870, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 894, + "name": "gray_candle_cake", + "translation_key": "block.minecraft.gray_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20873, + "states": [ + { + "id": 20872, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 895, + "name": "light_gray_candle_cake", + "translation_key": "block.minecraft.light_gray_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20875, + "states": [ + { + "id": 20874, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 896, + "name": "cyan_candle_cake", + "translation_key": "block.minecraft.cyan_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20877, + "states": [ + { + "id": 20876, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 897, + "name": "purple_candle_cake", + "translation_key": "block.minecraft.purple_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20879, + "states": [ + { + "id": 20878, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 898, + "name": "blue_candle_cake", + "translation_key": "block.minecraft.blue_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20881, + "states": [ + { + "id": 20880, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 899, + "name": "brown_candle_cake", + "translation_key": "block.minecraft.brown_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20883, + "states": [ + { + "id": 20882, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 900, + "name": "green_candle_cake", + "translation_key": "block.minecraft.green_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20885, + "states": [ + { + "id": 20884, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 901, + "name": "red_candle_cake", + "translation_key": "block.minecraft.red_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20887, + "states": [ + { + "id": 20886, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 902, + "name": "black_candle_cake", + "translation_key": "block.minecraft.black_candle_cake", + "item_id": 0, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "lit", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20889, + "states": [ + { + "id": 20888, + "luminance": 3, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + }, + { + "id": 20889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 85, + 308 + ] + } + ] + }, + { + "id": 903, + "name": "amethyst_block", + "translation_key": "block.minecraft.amethyst_block", + "item_id": 72, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20890, + "states": [ + { + "id": 20890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 904, + "name": "budding_amethyst", + "translation_key": "block.minecraft.budding_amethyst", + "item_id": 73, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20891, + "states": [ + { + "id": 20891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 905, + "name": "amethyst_cluster", + "translation_key": "block.minecraft.amethyst_cluster", + "item_id": 1210, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20901, + "states": [ + { + "id": 20892, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 309 + ] + }, + { + "id": 20893, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 309 + ] + }, + { + "id": 20894, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 310 + ] + }, + { + "id": 20895, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 310 + ] + }, + { + "id": 20896, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 311 + ] + }, + { + "id": 20897, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 311 + ] + }, + { + "id": 20898, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 312 + ] + }, + { + "id": 20899, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 312 + ] + }, + { + "id": 20900, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 313 + ] + }, + { + "id": 20901, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 313 + ] + }, + { + "id": 20902, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 314 + ] + }, + { + "id": 20903, + "luminance": 5, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 314 + ] + } + ] + }, + { + "id": 906, + "name": "large_amethyst_bud", + "translation_key": "block.minecraft.large_amethyst_bud", + "item_id": 1209, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20913, + "states": [ + { + "id": 20904, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 315 + ] + }, + { + "id": 20905, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 315 + ] + }, + { + "id": 20906, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 316 + ] + }, + { + "id": 20907, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 316 + ] + }, + { + "id": 20908, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 317 + ] + }, + { + "id": 20909, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 317 + ] + }, + { + "id": 20910, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 318 + ] + }, + { + "id": 20911, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 318 + ] + }, + { + "id": 20912, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 319 + ] + }, + { + "id": 20913, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 319 + ] + }, + { + "id": 20914, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 320 + ] + }, + { + "id": 20915, + "luminance": 4, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 320 + ] + } + ] + }, + { + "id": 907, + "name": "medium_amethyst_bud", + "translation_key": "block.minecraft.medium_amethyst_bud", + "item_id": 1208, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20925, + "states": [ + { + "id": 20916, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 321 + ] + }, + { + "id": 20917, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 321 + ] + }, + { + "id": 20918, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 322 + ] + }, + { + "id": 20919, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 322 + ] + }, + { + "id": 20920, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 323 + ] + }, + { + "id": 20921, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 323 + ] + }, + { + "id": 20922, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 324 + ] + }, + { + "id": 20923, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 324 + ] + }, + { + "id": 20924, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 325 + ] + }, + { + "id": 20925, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 325 + ] + }, + { + "id": 20926, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 326 + ] + }, + { + "id": 20927, + "luminance": 2, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 326 + ] + } + ] + }, + { + "id": 908, + "name": "small_amethyst_bud", + "translation_key": "block.minecraft.small_amethyst_bud", + "item_id": 1207, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20937, + "states": [ + { + "id": 20928, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 327 + ] + }, + { + "id": 20929, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 327 + ] + }, + { + "id": 20930, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 328 + ] + }, + { + "id": 20931, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 328 + ] + }, + { + "id": 20932, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 329 + ] + }, + { + "id": 20933, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 329 + ] + }, + { + "id": 20934, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 330 + ] + }, + { + "id": 20935, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 330 + ] + }, + { + "id": 20936, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 331 + ] + }, + { + "id": 20937, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 331 + ] + }, + { + "id": 20938, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 126 + ] + }, + { + "id": 20939, + "luminance": 1, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 126 + ] + } + ] + }, + { + "id": 909, + "name": "tuff", + "translation_key": "block.minecraft.tuff", + "item_id": 12, + "hardness": 1.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20940, + "states": [ + { + "id": 20940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 910, + "name": "calcite", + "translation_key": "block.minecraft.calcite", + "item_id": 11, + "hardness": 0.75, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20941, + "states": [ + { + "id": 20941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 911, + "name": "tinted_glass", + "translation_key": "block.minecraft.tinted_glass", + "item_id": 167, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20942, + "states": [ + { + "id": 20942, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 912, + "name": "powder_snow", + "translation_key": "block.minecraft.powder_snow", + "item_id": 871, + "hardness": 0.25, + "blast_resistance": 0.25, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 20943, + "states": [ + { + "id": 20943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 913, + "name": "sculk_sensor", + "translation_key": "block.minecraft.sculk_sensor", + "item_id": 653, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "sculk_sensor_phase", + "values": [ + "inactive", + "active", + "cooldown" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 20945, + "states": [ + { + "id": 20944, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20945, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20946, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20947, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20948, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20949, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20950, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20951, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20952, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20953, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20954, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20955, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20956, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20957, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20958, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20959, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20960, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20961, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20962, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20963, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20964, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20965, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20966, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20967, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20968, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20969, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20970, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20971, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20972, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20973, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20974, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20975, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20976, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20977, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20978, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20979, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20980, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20981, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20982, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20983, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20984, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20985, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20986, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20987, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20988, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20989, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20990, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20991, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20992, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20993, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20994, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20995, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20996, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20997, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20998, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 20999, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21000, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21001, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21002, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21003, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21004, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21005, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21006, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21007, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21008, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21009, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21010, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21011, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21012, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21013, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21014, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21015, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21016, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21017, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21018, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21019, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21020, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21021, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21022, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21023, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21024, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21025, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21026, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21027, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21028, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21029, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21030, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21031, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21032, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21033, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21034, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21035, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21036, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21037, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21038, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + }, + { + "id": 21039, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 34 + } + ] + }, + { + "id": 914, + "name": "calibrated_sculk_sensor", + "translation_key": "block.minecraft.calibrated_sculk_sensor", + "item_id": 654, + "hardness": 1.5, + "blast_resistance": 1.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "power", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15" + ] + }, + { + "name": "sculk_sensor_phase", + "values": [ + "inactive", + "active", + "cooldown" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21041, + "states": [ + { + "id": 21040, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21041, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21042, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21043, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21044, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21045, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21046, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21047, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21048, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21049, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21050, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21051, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21052, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21053, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21054, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21055, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21056, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21057, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21058, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21059, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21060, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21061, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21062, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21063, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21064, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21065, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21066, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21067, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21068, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21069, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21070, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21071, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21072, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21073, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21074, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21075, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21076, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21077, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21078, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21079, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21080, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21081, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21082, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21083, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21084, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21085, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21086, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21087, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21088, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21089, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21090, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21091, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21092, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21093, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21094, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21095, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21096, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21097, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21098, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21099, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21100, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21101, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21102, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21103, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21104, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21105, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21106, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21107, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21108, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21109, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21110, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21111, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21112, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21113, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21114, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21115, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21116, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21117, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21118, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21119, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21120, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21121, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21122, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21123, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21124, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21125, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21126, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21127, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21128, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21129, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21130, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21131, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21132, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21133, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21134, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21135, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21136, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21137, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21138, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21139, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21140, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21141, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21142, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21143, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21144, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21145, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21146, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21147, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21148, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21149, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21150, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21151, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21152, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21153, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21154, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21155, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21156, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21157, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21158, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21159, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21160, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21161, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21162, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21163, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21164, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21165, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21166, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21167, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21168, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21169, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21170, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21171, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21172, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21173, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21174, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21175, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21176, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21177, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21178, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21179, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21180, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21181, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21182, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21183, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21184, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21185, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21186, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21187, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21188, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21189, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21190, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21191, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21192, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21193, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21194, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21195, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21196, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21197, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21198, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21199, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21200, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21201, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21202, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21203, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21204, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21205, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21206, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21207, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21208, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21209, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21210, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21211, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21212, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21213, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21214, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21215, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21216, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21217, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21218, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21219, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21220, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21221, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21222, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21223, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21224, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21225, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21226, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21227, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21228, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21229, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21230, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21231, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21232, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21233, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21234, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21235, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21236, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21237, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21238, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21239, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21240, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21241, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21242, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21243, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21244, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21245, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21246, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21247, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21248, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21249, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21250, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21251, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21252, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21253, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21254, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21255, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21256, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21257, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21258, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21259, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21260, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21261, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21262, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21263, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21264, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21265, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21266, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21267, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21268, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21269, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21270, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21271, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21272, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21273, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21274, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21275, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21276, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21277, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21278, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21279, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21280, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21281, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21282, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21283, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21284, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21285, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21286, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21287, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21288, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21289, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21290, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21291, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21292, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21293, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21294, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21295, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21296, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21297, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21298, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21299, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21300, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21301, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21302, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21303, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21304, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21305, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21306, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21307, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21308, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21309, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21310, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21311, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21312, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21313, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21314, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21315, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21316, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21317, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21318, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21319, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21320, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21321, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21322, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21323, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21324, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21325, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21326, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21327, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21328, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21329, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21330, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21331, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21332, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21333, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21334, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21335, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21336, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21337, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21338, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21339, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21340, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21341, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21342, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21343, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21344, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21345, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21346, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21347, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21348, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21349, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21350, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21351, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21352, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21353, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21354, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21355, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21356, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21357, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21358, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21359, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21360, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21361, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21362, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21363, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21364, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21365, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21366, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21367, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21368, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21369, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21370, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21371, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21372, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21373, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21374, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21375, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21376, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21377, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21378, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21379, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21380, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21381, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21382, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21383, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21384, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21385, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21386, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21387, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21388, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21389, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21390, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21391, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21392, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21393, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21394, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21395, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21396, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21397, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21398, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21399, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21400, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21401, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21402, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21403, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21404, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21405, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21406, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21407, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21408, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21409, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21410, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21411, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21412, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21413, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21414, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21415, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21416, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21417, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21418, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21419, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21420, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21421, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21422, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + }, + { + "id": 21423, + "luminance": 1, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 35 + } + ] + }, + { + "id": 915, + "name": "sculk", + "translation_key": "block.minecraft.sculk", + "item_id": 349, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21424, + "states": [ + { + "id": 21424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 916, + "name": "sculk_vein", + "translation_key": "block.minecraft.sculk_vein", + "item_id": 350, + "hardness": 0.2, + "blast_resistance": 0.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "down", + "values": [ + "true", + "false" + ] + }, + { + "name": "east", + "values": [ + "true", + "false" + ] + }, + { + "name": "north", + "values": [ + "true", + "false" + ] + }, + { + "name": "south", + "values": [ + "true", + "false" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21552, + "states": [ + { + "id": 21425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21445, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21446, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21447, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21448, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21449, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21450, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21451, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21452, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21453, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21454, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21455, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21456, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21457, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21458, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21459, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21460, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21461, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21462, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21463, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21464, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21465, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21466, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21467, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21468, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21469, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21470, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21471, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21472, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21473, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21474, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21475, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21476, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21477, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21478, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21479, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21480, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21481, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21482, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21483, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21484, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21485, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21486, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21487, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21488, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21489, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21490, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21491, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21492, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21493, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21494, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21495, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21496, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21497, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21498, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21499, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21500, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21501, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21502, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21503, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21504, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21505, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21506, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21507, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21508, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21509, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21510, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21511, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21512, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21513, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21514, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21515, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21516, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21517, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21518, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21519, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21520, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21521, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21522, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21523, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21524, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21525, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21526, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21527, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21528, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21529, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21530, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21531, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21532, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21533, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21534, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21535, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21536, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21537, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21538, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21539, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21540, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21541, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21542, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21543, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21544, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21545, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21546, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21547, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21548, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21549, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21550, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21551, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 21552, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + } + ] + }, + { + "id": 917, + "name": "sculk_catalyst", + "translation_key": "block.minecraft.sculk_catalyst", + "item_id": 351, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "bloom", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21554, + "states": [ + { + "id": 21553, + "luminance": 6, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 36 + }, + { + "id": 21554, + "luminance": 6, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ], + "block_entity_type": 36 + } + ] + }, + { + "id": 918, + "name": "sculk_shrieker", + "translation_key": "block.minecraft.sculk_shrieker", + "item_id": 352, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "can_summon", + "values": [ + "true", + "false" + ] + }, + { + "name": "shrieking", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21562, + "states": [ + { + "id": 21555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + }, + { + "id": 21562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ], + "block_entity_type": 37 + } + ] + }, + { + "id": 919, + "name": "oxidized_copper", + "translation_key": "block.minecraft.oxidized_copper", + "item_id": 81, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21563, + "states": [ + { + "id": 21563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 920, + "name": "weathered_copper", + "translation_key": "block.minecraft.weathered_copper", + "item_id": 80, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21564, + "states": [ + { + "id": 21564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 921, + "name": "exposed_copper", + "translation_key": "block.minecraft.exposed_copper", + "item_id": 79, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21565, + "states": [ + { + "id": 21565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 922, + "name": "copper_block", + "translation_key": "block.minecraft.copper_block", + "item_id": 75, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21566, + "states": [ + { + "id": 21566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 923, + "name": "copper_ore", + "translation_key": "block.minecraft.copper_ore", + "item_id": 53, + "hardness": 3.0, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21567, + "states": [ + { + "id": 21567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 924, + "name": "deepslate_copper_ore", + "translation_key": "block.minecraft.deepslate_copper_ore", + "item_id": 54, + "hardness": 4.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21568, + "states": [ + { + "id": 21568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 925, + "name": "oxidized_cut_copper", + "translation_key": "block.minecraft.oxidized_cut_copper", + "item_id": 85, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21569, + "states": [ + { + "id": 21569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 926, + "name": "weathered_cut_copper", + "translation_key": "block.minecraft.weathered_cut_copper", + "item_id": 84, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21570, + "states": [ + { + "id": 21570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 927, + "name": "exposed_cut_copper", + "translation_key": "block.minecraft.exposed_cut_copper", + "item_id": 83, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21571, + "states": [ + { + "id": 21571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 928, + "name": "cut_copper", + "translation_key": "block.minecraft.cut_copper", + "item_id": 82, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21572, + "states": [ + { + "id": 21572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 929, + "name": "oxidized_cut_copper_stairs", + "translation_key": "block.minecraft.oxidized_cut_copper_stairs", + "item_id": 89, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21584, + "states": [ + { + "id": 21573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 930, + "name": "weathered_cut_copper_stairs", + "translation_key": "block.minecraft.weathered_cut_copper_stairs", + "item_id": 88, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21664, + "states": [ + { + "id": 21653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 931, + "name": "exposed_cut_copper_stairs", + "translation_key": "block.minecraft.exposed_cut_copper_stairs", + "item_id": 87, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21744, + "states": [ + { + "id": 21733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 932, + "name": "cut_copper_stairs", + "translation_key": "block.minecraft.cut_copper_stairs", + "item_id": 86, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21824, + "states": [ + { + "id": 21813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 933, + "name": "oxidized_cut_copper_slab", + "translation_key": "block.minecraft.oxidized_cut_copper_slab", + "item_id": 93, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21896, + "states": [ + { + "id": 21893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 21898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 934, + "name": "weathered_cut_copper_slab", + "translation_key": "block.minecraft.weathered_cut_copper_slab", + "item_id": 92, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21902, + "states": [ + { + "id": 21899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 21904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 935, + "name": "exposed_cut_copper_slab", + "translation_key": "block.minecraft.exposed_cut_copper_slab", + "item_id": 91, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21908, + "states": [ + { + "id": 21905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 21910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 936, + "name": "cut_copper_slab", + "translation_key": "block.minecraft.cut_copper_slab", + "item_id": 90, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21914, + "states": [ + { + "id": 21911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 21913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 21915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 21916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 937, + "name": "waxed_copper_block", + "translation_key": "block.minecraft.waxed_copper_block", + "item_id": 94, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21917, + "states": [ + { + "id": 21917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 938, + "name": "waxed_weathered_copper", + "translation_key": "block.minecraft.waxed_weathered_copper", + "item_id": 96, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21918, + "states": [ + { + "id": 21918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 939, + "name": "waxed_exposed_copper", + "translation_key": "block.minecraft.waxed_exposed_copper", + "item_id": 95, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21919, + "states": [ + { + "id": 21919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 940, + "name": "waxed_oxidized_copper", + "translation_key": "block.minecraft.waxed_oxidized_copper", + "item_id": 97, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21920, + "states": [ + { + "id": 21920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 941, + "name": "waxed_oxidized_cut_copper", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper", + "item_id": 101, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21921, + "states": [ + { + "id": 21921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 942, + "name": "waxed_weathered_cut_copper", + "translation_key": "block.minecraft.waxed_weathered_cut_copper", + "item_id": 100, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21922, + "states": [ + { + "id": 21922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 943, + "name": "waxed_exposed_cut_copper", + "translation_key": "block.minecraft.waxed_exposed_cut_copper", + "item_id": 99, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21923, + "states": [ + { + "id": 21923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 944, + "name": "waxed_cut_copper", + "translation_key": "block.minecraft.waxed_cut_copper", + "item_id": 98, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 21924, + "states": [ + { + "id": 21924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 945, + "name": "waxed_oxidized_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper_stairs", + "item_id": 105, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 21936, + "states": [ + { + "id": 21925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 21927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 21937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 21945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 21947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 21957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 21959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 21963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 21967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 21969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 21971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 21973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 21975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 21977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 21979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 21981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 21983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 21985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 21987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 21989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 21991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 21993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 21995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 21997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 21999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 946, + "name": "waxed_weathered_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_weathered_cut_copper_stairs", + "item_id": 104, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22016, + "states": [ + { + "id": 22005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 947, + "name": "waxed_exposed_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_exposed_cut_copper_stairs", + "item_id": 103, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22096, + "states": [ + { + "id": 22085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 948, + "name": "waxed_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_cut_copper_stairs", + "item_id": 102, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22176, + "states": [ + { + "id": 22165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 949, + "name": "waxed_oxidized_cut_copper_slab", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper_slab", + "item_id": 109, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22248, + "states": [ + { + "id": 22245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 950, + "name": "waxed_weathered_cut_copper_slab", + "translation_key": "block.minecraft.waxed_weathered_cut_copper_slab", + "item_id": 108, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22254, + "states": [ + { + "id": 22251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 951, + "name": "waxed_exposed_cut_copper_slab", + "translation_key": "block.minecraft.waxed_exposed_cut_copper_slab", + "item_id": 107, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22260, + "states": [ + { + "id": 22257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 952, + "name": "waxed_cut_copper_slab", + "translation_key": "block.minecraft.waxed_cut_copper_slab", + "item_id": 106, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22266, + "states": [ + { + "id": 22263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 953, + "name": "lightning_rod", + "translation_key": "block.minecraft.lightning_rod", + "item_id": 651, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "east", + "south", + "west", + "up", + "down" + ] + }, + { + "name": "powered", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22288, + "states": [ + { + "id": 22269, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22270, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22271, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22272, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22273, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22274, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22275, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22276, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22277, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22278, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22279, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22280, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 203 + ] + }, + { + "id": 22281, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22282, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22283, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22284, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 204 + ] + }, + { + "id": 22285, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22286, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22287, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22288, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22289, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22290, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22291, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + }, + { + "id": 22292, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 32 + ] + } + ] + }, + { + "id": 954, + "name": "pointed_dripstone", + "translation_key": "block.minecraft.pointed_dripstone", + "item_id": 1211, + "hardness": 1.5, + "blast_resistance": 3.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "thickness", + "values": [ + "tip_merge", + "tip", + "frustum", + "middle", + "base" + ] + }, + { + "name": "vertical_direction", + "values": [ + "up", + "down" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22298, + "states": [ + { + "id": 22293, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 332 + ] + }, + { + "id": 22294, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 332 + ] + }, + { + "id": 22295, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 332 + ] + }, + { + "id": 22296, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 332 + ] + }, + { + "id": 22297, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 333 + ] + }, + { + "id": 22298, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 333 + ] + }, + { + "id": 22299, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 334 + ] + }, + { + "id": 22300, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 334 + ] + }, + { + "id": 22301, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 335 + ] + }, + { + "id": 22302, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 335 + ] + }, + { + "id": 22303, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 335 + ] + }, + { + "id": 22304, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 335 + ] + }, + { + "id": 22305, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 336 + ] + }, + { + "id": 22306, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 336 + ] + }, + { + "id": 22307, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 336 + ] + }, + { + "id": 22308, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 336 + ] + }, + { + "id": 22309, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 337 + ] + }, + { + "id": 22310, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 337 + ] + }, + { + "id": 22311, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 337 + ] + }, + { + "id": 22312, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 337 + ] + } + ] + }, + { + "id": 955, + "name": "dripstone_block", + "translation_key": "block.minecraft.dripstone_block", + "item_id": 13, + "hardness": 1.5, + "blast_resistance": 1.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22313, + "states": [ + { + "id": 22313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 956, + "name": "cave_vines", + "translation_key": "block.minecraft.cave_vines", + "item_id": 1166, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "age", + "values": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25" + ] + }, + { + "name": "berries", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22315, + "states": [ + { + "id": 22314, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22315, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22316, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22317, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22318, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22319, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22320, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22321, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22322, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22323, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22324, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22325, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22326, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22327, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22328, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22329, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22330, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22331, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22332, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22333, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22334, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22335, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22336, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22337, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22338, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22339, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22340, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22341, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22342, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22343, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22344, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22345, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22346, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22347, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22348, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22349, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22350, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22351, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22352, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22353, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22354, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22355, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22356, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22357, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22358, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22359, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22360, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22361, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22362, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22363, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22364, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22365, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 957, + "name": "cave_vines_plant", + "translation_key": "block.minecraft.cave_vines_plant", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "berries", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22367, + "states": [ + { + "id": 22366, + "luminance": 14, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22367, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 958, + "name": "spore_blossom", + "translation_key": "block.minecraft.spore_blossom", + "item_id": 211, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22368, + "states": [ + { + "id": 22368, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 959, + "name": "azalea", + "translation_key": "block.minecraft.azalea", + "item_id": 175, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22369, + "states": [ + { + "id": 22369, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 32, + 338, + 339, + 340, + 341 + ] + } + ] + }, + { + "id": 960, + "name": "flowering_azalea", + "translation_key": "block.minecraft.flowering_azalea", + "item_id": 176, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22370, + "states": [ + { + "id": 22370, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 32, + 338, + 339, + 340, + 341 + ] + } + ] + }, + { + "id": 961, + "name": "moss_carpet", + "translation_key": "block.minecraft.moss_carpet", + "item_id": 223, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22371, + "states": [ + { + "id": 22371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 202 + ] + } + ] + }, + { + "id": 962, + "name": "pink_petals", + "translation_key": "block.minecraft.pink_petals", + "item_id": 224, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "flower_amount", + "values": [ + "1", + "2", + "3", + "4" + ] + } + ], + "default_state_id": 22372, + "states": [ + { + "id": 22372, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22373, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22374, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22375, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22376, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22377, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22378, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22379, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22380, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22381, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22382, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22383, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22384, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22385, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22386, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22387, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 963, + "name": "moss_block", + "translation_key": "block.minecraft.moss_block", + "item_id": 225, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22388, + "states": [ + { + "id": 22388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 964, + "name": "big_dripleaf", + "translation_key": "block.minecraft.big_dripleaf", + "item_id": 227, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "tilt", + "values": [ + "none", + "unstable", + "partial", + "full" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22390, + "states": [ + { + "id": 22389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 342 + ] + }, + { + "id": 22417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 343 + ] + }, + { + "id": 22419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 965, + "name": "big_dripleaf_stem", + "translation_key": "block.minecraft.big_dripleaf_stem", + "item_id": 227, + "hardness": 0.1, + "blast_resistance": 0.1, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22422, + "states": [ + { + "id": 22421, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22422, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22423, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22424, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22425, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22426, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22427, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22428, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 966, + "name": "small_dripleaf", + "translation_key": "block.minecraft.small_dripleaf", + "item_id": 228, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "upper", + "lower" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22432, + "states": [ + { + "id": 22429, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22430, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22431, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22432, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22433, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22434, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22435, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22436, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22437, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22438, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22439, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22440, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22441, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22442, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22443, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22444, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 967, + "name": "hanging_roots", + "translation_key": "block.minecraft.hanging_roots", + "item_id": 226, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22446, + "states": [ + { + "id": 22445, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + }, + { + "id": 22446, + "luminance": 0, + "opaque": false, + "replaceable": true, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 968, + "name": "rooted_dirt", + "translation_key": "block.minecraft.rooted_dirt", + "item_id": 18, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22447, + "states": [ + { + "id": 22447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 969, + "name": "mud", + "translation_key": "block.minecraft.mud", + "item_id": 19, + "hardness": 0.5, + "blast_resistance": 0.5, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22448, + "states": [ + { + "id": 22448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 73 + ] + } + ] + }, + { + "id": 970, + "name": "deepslate", + "translation_key": "block.minecraft.deepslate", + "item_id": 8, + "hardness": 3.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 22450, + "states": [ + { + "id": 22449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 971, + "name": "cobbled_deepslate", + "translation_key": "block.minecraft.cobbled_deepslate", + "item_id": 9, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22452, + "states": [ + { + "id": 22452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 972, + "name": "cobbled_deepslate_stairs", + "translation_key": "block.minecraft.cobbled_deepslate_stairs", + "item_id": 613, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22464, + "states": [ + { + "id": 22453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 973, + "name": "cobbled_deepslate_slab", + "translation_key": "block.minecraft.cobbled_deepslate_slab", + "item_id": 630, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22536, + "states": [ + { + "id": 22533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 974, + "name": "cobbled_deepslate_wall", + "translation_key": "block.minecraft.cobbled_deepslate_wall", + "item_id": 393, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 22542, + "states": [ + { + "id": 22539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 22540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 22543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 22546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 22549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 22645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 22647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 22648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 22651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 22654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 22657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 22756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 22759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 22761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 22762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 22765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 22767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 22783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 22785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 22789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 22791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 22831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 22833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 22837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 22839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 22855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 22857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 22861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 22862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 975, + "name": "polished_deepslate", + "translation_key": "block.minecraft.polished_deepslate", + "item_id": 10, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 22863, + "states": [ + { + "id": 22863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 976, + "name": "polished_deepslate_stairs", + "translation_key": "block.minecraft.polished_deepslate_stairs", + "item_id": 614, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22875, + "states": [ + { + "id": 22864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 22866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 22876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 22886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 22896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 22906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 22908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 22910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 22912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 22914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 22916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 22918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 22920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 22922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 22924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 22926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 22928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 22930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 22932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 22934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 22936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 22938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 22940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 22942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 22943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 977, + "name": "polished_deepslate_slab", + "translation_key": "block.minecraft.polished_deepslate_slab", + "item_id": 631, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 22947, + "states": [ + { + "id": 22944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 22946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 22948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 22949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 978, + "name": "polished_deepslate_wall", + "translation_key": "block.minecraft.polished_deepslate_wall", + "item_id": 394, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 22953, + "states": [ + { + "id": 22950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 22951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 22954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 22956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 22957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 22960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 22962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 22978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 22980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 22984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 22986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 22990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 22992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 22996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 22998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 22999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23106, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23107, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23108, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23109, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23110, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23111, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23112, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23113, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23114, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23115, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23116, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23117, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23119, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23120, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23121, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23122, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23123, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23124, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23125, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23126, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23127, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23128, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23129, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23130, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23131, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23132, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23133, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23134, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23135, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23136, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23137, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23138, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23139, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23140, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23141, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23142, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23143, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23144, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23145, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23146, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23147, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23148, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23149, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23150, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23151, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23152, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23153, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23154, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23155, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23156, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23157, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23158, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23159, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23160, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23161, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23162, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23163, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23164, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23165, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23166, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23167, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23168, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23169, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23170, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23171, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23172, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23173, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23174, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23175, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23176, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23177, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23178, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23179, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23180, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23181, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23182, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23183, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23184, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23185, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23186, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23187, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23188, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23189, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23190, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23191, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23192, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23193, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23194, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23195, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23196, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23197, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23198, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23199, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23200, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23201, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23202, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23203, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23204, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23205, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23206, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23207, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23208, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23209, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23210, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23211, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23212, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23213, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23214, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23215, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23216, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23217, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23218, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23219, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23220, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23221, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23222, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23223, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23224, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23225, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23226, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23227, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23228, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23229, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23230, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23231, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23232, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23233, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23234, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23235, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23236, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23237, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23238, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23239, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23240, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23241, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23242, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23243, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23244, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23245, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23246, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23247, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23248, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23249, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23250, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23251, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23252, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23253, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23254, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23255, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23256, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23257, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23258, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23259, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23260, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23261, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23262, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23263, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23264, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23265, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23266, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23267, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23268, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23269, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23270, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23271, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23272, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23273, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 979, + "name": "deepslate_tiles", + "translation_key": "block.minecraft.deepslate_tiles", + "item_id": 326, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 23274, + "states": [ + { + "id": 23274, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 980, + "name": "deepslate_tile_stairs", + "translation_key": "block.minecraft.deepslate_tile_stairs", + "item_id": 616, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 23286, + "states": [ + { + "id": 23275, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 23276, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 23277, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23278, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23279, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23280, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23281, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23282, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23283, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23284, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23285, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 23286, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 23287, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23288, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23289, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23290, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23291, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23292, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23293, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23294, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23295, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 23296, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 23297, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23298, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23299, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23300, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23301, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23302, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23303, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23304, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23305, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 23306, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 23307, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23308, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23309, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23310, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23311, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23312, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23313, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23314, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23315, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 23316, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 23317, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23318, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23319, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23320, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23321, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23322, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23323, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23324, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23325, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 23326, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 23327, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23328, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23329, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23330, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23331, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23332, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23333, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23334, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23335, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 23336, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 23337, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23338, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23339, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23340, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23341, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23342, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23343, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23344, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23345, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 23346, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 23347, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23348, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23349, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23350, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23351, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23352, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23353, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23354, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 981, + "name": "deepslate_tile_slab", + "translation_key": "block.minecraft.deepslate_tile_slab", + "item_id": 633, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 23358, + "states": [ + { + "id": 23355, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 23356, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 23357, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 23358, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 23359, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 23360, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 982, + "name": "deepslate_tile_wall", + "translation_key": "block.minecraft.deepslate_tile_wall", + "item_id": 396, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 23364, + "states": [ + { + "id": 23361, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 23362, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23363, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23364, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 23365, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23366, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23367, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 23368, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23369, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23370, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 23371, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23372, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23373, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23374, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23375, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23376, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23377, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23378, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23379, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23380, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23381, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23382, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23383, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23384, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23385, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23386, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23387, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23388, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23389, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23390, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23391, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23392, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23393, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23394, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23395, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23396, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23397, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23398, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23399, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23400, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23401, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23402, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23403, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23404, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23405, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23406, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23407, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23408, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23409, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23410, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23411, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23412, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23413, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23414, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23415, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23416, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23417, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23418, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23419, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23420, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23421, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23422, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23423, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23424, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23425, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23426, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23427, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23428, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23429, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23430, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23431, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23432, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23433, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23434, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23435, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23436, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23437, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23438, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23439, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23440, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23441, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23442, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23443, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23444, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23445, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23446, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23447, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23448, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23449, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23450, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23451, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23452, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23453, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23454, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23455, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23456, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23457, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23458, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23459, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23460, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23461, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23462, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23463, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23464, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23465, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23466, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23467, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23468, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23469, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23470, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23471, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23472, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23473, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23474, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23475, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23476, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23477, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23478, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23479, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23480, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23481, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23482, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23483, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23484, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23485, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23486, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23487, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23488, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23489, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23490, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23491, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23492, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23493, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23494, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23495, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23496, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23497, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23498, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23499, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23500, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23501, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23502, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23503, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23504, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23505, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23506, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23507, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23508, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23509, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23510, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23511, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23512, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23513, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23514, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23515, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23516, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23517, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23518, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23519, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23520, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23521, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23522, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23523, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23524, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23525, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23526, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23527, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23528, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23529, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23530, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23531, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23532, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23533, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23534, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23535, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23536, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23537, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23538, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23539, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23540, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23541, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23542, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23543, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23544, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23545, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23546, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23547, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23548, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23549, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23550, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23551, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23552, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23553, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23554, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23555, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23556, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23557, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23558, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23559, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23560, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23561, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23562, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23563, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23564, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23565, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23566, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23567, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23568, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23569, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23570, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23571, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23572, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23573, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23574, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23575, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23576, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23577, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23578, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23579, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23580, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23581, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23582, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23583, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23584, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23585, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23586, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23587, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23588, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23589, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23590, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23591, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23592, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23593, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23594, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23595, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23596, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23597, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23598, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23599, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23600, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23601, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23602, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23603, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23604, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23605, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23606, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23607, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23608, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23609, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23610, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23611, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23612, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23613, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23614, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23615, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23616, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23617, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23618, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23619, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23620, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23621, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23622, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23623, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23624, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23625, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23626, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23627, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23628, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23629, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23630, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23631, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23632, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23633, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23634, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23635, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23636, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23637, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23638, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23639, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23640, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23641, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23642, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23643, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23644, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23645, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23646, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23647, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23648, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23649, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23650, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23651, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23652, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23653, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23654, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23655, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23656, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23657, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23658, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23659, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23660, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23661, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23662, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23663, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23664, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23665, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23666, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23667, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23668, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23669, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23670, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23671, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23672, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23673, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23674, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23675, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23676, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23677, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23678, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23679, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23680, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23681, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23682, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23683, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23684, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 983, + "name": "deepslate_bricks", + "translation_key": "block.minecraft.deepslate_bricks", + "item_id": 324, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 23685, + "states": [ + { + "id": 23685, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 984, + "name": "deepslate_brick_stairs", + "translation_key": "block.minecraft.deepslate_brick_stairs", + "item_id": 615, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "half", + "values": [ + "top", + "bottom" + ] + }, + { + "name": "shape", + "values": [ + "straight", + "inner_left", + "inner_right", + "outer_left", + "outer_right" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 23697, + "states": [ + { + "id": 23686, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 23687, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 42 + ] + }, + { + "id": 23688, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23689, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23690, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23691, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23692, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23693, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23694, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23695, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23696, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 23697, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52 + ] + }, + { + "id": 23698, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23699, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23700, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23701, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23702, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23703, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23704, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23705, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23706, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 23707, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 52 + ] + }, + { + "id": 23708, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23709, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23710, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23711, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23712, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23713, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23714, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23715, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23716, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 23717, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42 + ] + }, + { + "id": 23718, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23719, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23720, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23721, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23722, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23723, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23724, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23725, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23726, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 23727, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 56 + ] + }, + { + "id": 23728, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23729, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 46, + 49 + ] + }, + { + "id": 23730, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23731, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 43, + 44, + 45 + ] + }, + { + "id": 23732, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23733, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 55, + 52, + 45 + ] + }, + { + "id": 23734, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23735, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 48, + 42, + 49 + ] + }, + { + "id": 23736, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 23737, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50 + ] + }, + { + "id": 23738, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23739, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 45 + ] + }, + { + "id": 23740, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23741, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 50, + 49 + ] + }, + { + "id": 23742, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23743, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 47 + ] + }, + { + "id": 23744, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23745, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 53 + ] + }, + { + "id": 23746, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 23747, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 57, + 50 + ] + }, + { + "id": 23748, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23749, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 41, + 46, + 47 + ] + }, + { + "id": 23750, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23751, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 54, + 44, + 53 + ] + }, + { + "id": 23752, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23753, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 44, + 50, + 45 + ] + }, + { + "id": 23754, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23755, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 46, + 50, + 49 + ] + }, + { + "id": 23756, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 23757, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 56 + ] + }, + { + "id": 23758, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23759, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 52, + 45 + ] + }, + { + "id": 23760, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23761, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 42, + 49 + ] + }, + { + "id": 23762, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23763, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 49 + ] + }, + { + "id": 23764, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + }, + { + "id": 23765, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51, + 45 + ] + } + ] + }, + { + "id": 985, + "name": "deepslate_brick_slab", + "translation_key": "block.minecraft.deepslate_brick_slab", + "item_id": 632, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "type", + "values": [ + "top", + "bottom", + "double" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 23769, + "states": [ + { + "id": 23766, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 23767, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 201 + ] + }, + { + "id": 23768, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 23769, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 51 + ] + }, + { + "id": 23770, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 23771, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 986, + "name": "deepslate_brick_wall", + "translation_key": "block.minecraft.deepslate_brick_wall", + "item_id": 395, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "east", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "north", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "south", + "values": [ + "none", + "low", + "tall" + ] + }, + { + "name": "up", + "values": [ + "true", + "false" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + }, + { + "name": "west", + "values": [ + "none", + "low", + "tall" + ] + } + ], + "default_state_id": 23775, + "states": [ + { + "id": 23772, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 23773, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23774, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23775, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140 + ] + }, + { + "id": 23776, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23777, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143 + ] + }, + { + "id": 23778, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 23779, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23780, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23781, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [] + }, + { + "id": 23782, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23783, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144 + ] + }, + { + "id": 23784, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23785, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23786, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23787, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23788, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23789, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23790, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23791, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23792, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23793, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23794, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23795, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23796, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23797, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23798, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23799, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145 + ] + }, + { + "id": 23800, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23801, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 145 + ] + }, + { + "id": 23802, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23803, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23804, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23805, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146 + ] + }, + { + "id": 23806, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23807, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 147 + ] + }, + { + "id": 23808, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23809, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23810, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23811, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23812, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23813, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23814, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23815, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23816, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23817, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23818, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23819, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23820, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23821, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23822, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23823, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23824, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23825, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23826, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23827, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23828, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23829, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23830, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23831, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23832, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23833, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23834, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23835, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23836, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23837, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23838, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23839, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23840, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23841, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23842, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23843, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23844, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23845, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23846, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23847, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148 + ] + }, + { + "id": 23848, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23849, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148 + ] + }, + { + "id": 23850, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23851, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23852, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23853, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149 + ] + }, + { + "id": 23854, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23855, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150 + ] + }, + { + "id": 23856, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23857, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23858, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23859, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23860, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23861, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23862, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23863, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23864, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23865, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23866, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23867, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23868, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23869, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23870, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23871, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145 + ] + }, + { + "id": 23872, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23873, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 141, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23874, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23875, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23876, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23877, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151 + ] + }, + { + "id": 23878, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23879, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 144, + 150, + 147 + ] + }, + { + "id": 23880, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23881, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23882, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23883, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23884, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23885, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23886, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23887, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23888, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23889, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23890, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23891, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23892, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23893, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23894, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23895, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23896, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23897, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23898, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23899, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23900, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23901, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23902, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23903, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23904, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23905, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23906, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23907, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 23908, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23909, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 23910, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23911, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23912, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23913, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 23914, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23915, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 23916, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23917, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23918, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23919, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23920, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23921, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23922, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23923, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23924, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23925, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23926, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23927, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23928, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23929, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23930, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23931, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23932, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23933, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23934, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23935, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23936, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23937, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23938, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23939, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23940, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23941, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23942, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23943, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23944, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23945, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23946, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23947, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23948, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23949, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23950, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23951, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23952, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23953, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23954, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23955, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 23956, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23957, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 23958, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23959, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23960, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23961, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 23962, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23963, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 23964, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23965, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23966, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23967, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23968, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23969, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23970, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23971, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23972, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23973, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23974, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23975, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23976, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23977, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23978, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23979, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 23980, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23981, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 23982, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23983, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23984, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23985, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 23986, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23987, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 23988, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23989, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23990, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23991, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 152 + ] + }, + { + "id": 23992, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23993, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143 + ] + }, + { + "id": 23994, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23995, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23996, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23997, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 154 + ] + }, + { + "id": 23998, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 23999, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153 + ] + }, + { + "id": 24000, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 24001, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24002, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24003, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 24004, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24005, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24006, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 24007, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24008, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24009, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 24010, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24011, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24012, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 24013, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24014, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24015, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 145, + 152 + ] + }, + { + "id": 24016, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24017, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 145 + ] + }, + { + "id": 24018, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 24019, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24020, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24021, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 146, + 155 + ] + }, + { + "id": 24022, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24023, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 147 + ] + }, + { + "id": 24024, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 24025, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24026, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24027, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 24028, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24029, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24030, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 24031, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24032, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24033, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 24034, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24035, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24036, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24037, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24038, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24039, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24040, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24041, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24042, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24043, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24044, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24045, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24046, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24047, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24048, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24049, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24050, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24051, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24052, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24053, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24054, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24055, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24056, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24057, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24058, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24059, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24060, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 24061, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24062, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24063, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 152 + ] + }, + { + "id": 24064, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24065, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148 + ] + }, + { + "id": 24066, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 24067, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24068, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24069, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 149, + 155 + ] + }, + { + "id": 24070, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24071, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150 + ] + }, + { + "id": 24072, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24073, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24074, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24075, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24076, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24077, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24078, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24079, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24080, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24081, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24082, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24083, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24084, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24085, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24086, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24087, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 140, + 148, + 145, + 152 + ] + }, + { + "id": 24088, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24089, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 142, + 143, + 148, + 145 + ] + }, + { + "id": 24090, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24091, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24092, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24093, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 151, + 155 + ] + }, + { + "id": 24094, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + }, + { + "id": 24095, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 153, + 150, + 147 + ] + } + ] + }, + { + "id": 987, + "name": "chiseled_deepslate", + "translation_key": "block.minecraft.chiseled_deepslate", + "item_id": 328, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24096, + "states": [ + { + "id": 24096, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 988, + "name": "cracked_deepslate_bricks", + "translation_key": "block.minecraft.cracked_deepslate_bricks", + "item_id": 325, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24097, + "states": [ + { + "id": 24097, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 989, + "name": "cracked_deepslate_tiles", + "translation_key": "block.minecraft.cracked_deepslate_tiles", + "item_id": 327, + "hardness": 3.5, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24098, + "states": [ + { + "id": 24098, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 990, + "name": "infested_deepslate", + "translation_key": "block.minecraft.infested_deepslate", + "item_id": 317, + "hardness": 1.5, + "blast_resistance": 0.75, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 24100, + "states": [ + { + "id": 24099, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24100, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24101, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 991, + "name": "smooth_basalt", + "translation_key": "block.minecraft.smooth_basalt", + "item_id": 308, + "hardness": 1.25, + "blast_resistance": 4.2, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24102, + "states": [ + { + "id": 24102, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 992, + "name": "raw_iron_block", + "translation_key": "block.minecraft.raw_iron_block", + "item_id": 69, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24103, + "states": [ + { + "id": 24103, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 993, + "name": "raw_copper_block", + "translation_key": "block.minecraft.raw_copper_block", + "item_id": 70, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24104, + "states": [ + { + "id": 24104, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 994, + "name": "raw_gold_block", + "translation_key": "block.minecraft.raw_gold_block", + "item_id": 71, + "hardness": 5.0, + "blast_resistance": 6.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24105, + "states": [ + { + "id": 24105, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 995, + "name": "potted_azalea_bush", + "translation_key": "block.minecraft.potted_azalea_bush", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24106, + "states": [ + { + "id": 24106, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 996, + "name": "potted_flowering_azalea_bush", + "translation_key": "block.minecraft.potted_flowering_azalea_bush", + "item_id": 0, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24107, + "states": [ + { + "id": 24107, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [ + 156 + ] + } + ] + }, + { + "id": 997, + "name": "ochre_froglight", + "translation_key": "block.minecraft.ochre_froglight", + "item_id": 1212, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 24109, + "states": [ + { + "id": 24108, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24109, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24110, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 998, + "name": "verdant_froglight", + "translation_key": "block.minecraft.verdant_froglight", + "item_id": 1213, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 24112, + "states": [ + { + "id": 24111, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24112, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24113, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 999, + "name": "pearlescent_froglight", + "translation_key": "block.minecraft.pearlescent_froglight", + "item_id": 1214, + "hardness": 0.3, + "blast_resistance": 0.3, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "axis", + "values": [ + "x", + "y", + "z" + ] + } + ], + "default_state_id": 24115, + "states": [ + { + "id": 24114, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24115, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + }, + { + "id": 24116, + "luminance": 15, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 1000, + "name": "frogspawn", + "translation_key": "block.minecraft.frogspawn", + "item_id": 1215, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24117, + "states": [ + { + "id": 24117, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": false, + "collision_shapes": [] + } + ] + }, + { + "id": 1001, + "name": "reinforced_deepslate", + "translation_key": "block.minecraft.reinforced_deepslate", + "item_id": 329, + "hardness": 55.0, + "blast_resistance": 1200.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [], + "default_state_id": 24118, + "states": [ + { + "id": 24118, + "luminance": 0, + "opaque": true, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 0 + ] + } + ] + }, + { + "id": 1002, + "name": "decorated_pot", + "translation_key": "block.minecraft.decorated_pot", + "item_id": 266, + "hardness": 0.0, + "blast_resistance": 0.0, + "slipperiness": 0.6, + "speed_factor": 1.0, + "jump_factor": 1.0, + "properties": [ + { + "name": "cracked", + "values": [ + "true", + "false" + ] + }, + { + "name": "facing", + "values": [ + "north", + "south", + "west", + "east" + ] + }, + { + "name": "waterlogged", + "values": [ + "true", + "false" + ] + } + ], + "default_state_id": 24128, + "states": [ + { + "id": 24119, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24120, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24121, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24122, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24123, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24124, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24125, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24126, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24127, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24128, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24129, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24130, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24131, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24132, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24133, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + }, + { + "id": 24134, + "luminance": 0, + "opaque": false, + "replaceable": false, + "blocks_motion": true, + "collision_shapes": [ + 127 + ], + "block_entity_type": 40 + } + ] + } + ] +} \ No newline at end of file diff --git a/vendor/valence/crates/valence_generated/extracted/effects.json b/vendor/valence/crates/valence_generated/extracted/effects.json new file mode 100644 index 00000000..5d955573 --- /dev/null +++ b/vendor/valence/crates/valence_generated/extracted/effects.json @@ -0,0 +1,338 @@ +[ + { + "id": 1, + "name": "speed", + "translation_key": "effect.minecraft.speed", + "color": 3402751, + "instant": false, + "category": "Beneficial", + "attribute_modifiers": [ + { + "attribute": 3, + "operation": 2, + "value": 0.20000000298023224, + "uuid": "91aeaa56-376b-4498-935b-2f7f68070635" + } + ] + }, + { + "id": 2, + "name": "slowness", + "translation_key": "effect.minecraft.slowness", + "color": 9154528, + "instant": false, + "category": "Harmful", + "attribute_modifiers": [ + { + "attribute": 3, + "operation": 2, + "value": -0.15000000596046448, + "uuid": "7107de5e-7ce8-4030-940e-514c1f160890" + } + ] + }, + { + "id": 3, + "name": "haste", + "translation_key": "effect.minecraft.haste", + "color": 14270531, + "instant": false, + "category": "Beneficial", + "attribute_modifiers": [ + { + "attribute": 7, + "operation": 2, + "value": 0.10000000149011612, + "uuid": "af8b6e3f-3328-4c0a-aa36-5ba2bb9dbef3" + } + ] + }, + { + "id": 4, + "name": "mining_fatigue", + "translation_key": "effect.minecraft.mining_fatigue", + "color": 4866583, + "instant": false, + "category": "Harmful", + "attribute_modifiers": [ + { + "attribute": 7, + "operation": 2, + "value": -0.10000000149011612, + "uuid": "55fced67-e92a-486e-9800-b47f202c4386" + } + ] + }, + { + "id": 5, + "name": "strength", + "translation_key": "effect.minecraft.strength", + "color": 16762624, + "instant": false, + "category": "Beneficial", + "attribute_modifiers": [ + { + "attribute": 5, + "operation": 0, + "value": 0.0, + "uuid": "648d7064-6a60-4f59-8abe-c2c23a6dd7a9" + } + ] + }, + { + "id": 6, + "name": "instant_health", + "translation_key": "effect.minecraft.instant_health", + "color": 16262179, + "instant": true, + "category": "Beneficial" + }, + { + "id": 7, + "name": "instant_damage", + "translation_key": "effect.minecraft.instant_damage", + "color": 11101546, + "instant": true, + "category": "Harmful" + }, + { + "id": 8, + "name": "jump_boost", + "translation_key": "effect.minecraft.jump_boost", + "color": 16646020, + "instant": false, + "category": "Beneficial" + }, + { + "id": 9, + "name": "nausea", + "translation_key": "effect.minecraft.nausea", + "color": 5578058, + "instant": false, + "category": "Harmful" + }, + { + "id": 10, + "name": "regeneration", + "translation_key": "effect.minecraft.regeneration", + "color": 13458603, + "instant": false, + "category": "Beneficial" + }, + { + "id": 11, + "name": "resistance", + "translation_key": "effect.minecraft.resistance", + "color": 9520880, + "instant": false, + "category": "Beneficial" + }, + { + "id": 12, + "name": "fire_resistance", + "translation_key": "effect.minecraft.fire_resistance", + "color": 16750848, + "instant": false, + "category": "Beneficial" + }, + { + "id": 13, + "name": "water_breathing", + "translation_key": "effect.minecraft.water_breathing", + "color": 10017472, + "instant": false, + "category": "Beneficial" + }, + { + "id": 14, + "name": "invisibility", + "translation_key": "effect.minecraft.invisibility", + "color": 16185078, + "instant": false, + "category": "Beneficial" + }, + { + "id": 15, + "name": "blindness", + "translation_key": "effect.minecraft.blindness", + "color": 2039587, + "instant": false, + "category": "Harmful" + }, + { + "id": 16, + "name": "night_vision", + "translation_key": "effect.minecraft.night_vision", + "color": 12779366, + "instant": false, + "category": "Beneficial" + }, + { + "id": 17, + "name": "hunger", + "translation_key": "effect.minecraft.hunger", + "color": 5797459, + "instant": false, + "category": "Harmful" + }, + { + "id": 18, + "name": "weakness", + "translation_key": "effect.minecraft.weakness", + "color": 4738376, + "instant": false, + "category": "Harmful", + "attribute_modifiers": [ + { + "attribute": 5, + "operation": 0, + "value": 0.0, + "uuid": "22653b89-116e-49dc-9b6b-9971489b5be5" + } + ] + }, + { + "id": 19, + "name": "poison", + "translation_key": "effect.minecraft.poison", + "color": 8889187, + "instant": false, + "category": "Harmful" + }, + { + "id": 20, + "name": "wither", + "translation_key": "effect.minecraft.wither", + "color": 7561558, + "instant": false, + "category": "Harmful" + }, + { + "id": 21, + "name": "health_boost", + "translation_key": "effect.minecraft.health_boost", + "color": 16284963, + "instant": false, + "category": "Beneficial", + "attribute_modifiers": [ + { + "attribute": 0, + "operation": 0, + "value": 4.0, + "uuid": "5d6f0ba2-1186-46ac-b896-c61c5cee99cc" + } + ] + }, + { + "id": 22, + "name": "absorption", + "translation_key": "effect.minecraft.absorption", + "color": 2445989, + "instant": false, + "category": "Beneficial" + }, + { + "id": 23, + "name": "saturation", + "translation_key": "effect.minecraft.saturation", + "color": 16262179, + "instant": true, + "category": "Beneficial" + }, + { + "id": 24, + "name": "glowing", + "translation_key": "effect.minecraft.glowing", + "color": 9740385, + "instant": false, + "category": "Neutral" + }, + { + "id": 25, + "name": "levitation", + "translation_key": "effect.minecraft.levitation", + "color": 13565951, + "instant": false, + "category": "Harmful" + }, + { + "id": 26, + "name": "luck", + "translation_key": "effect.minecraft.luck", + "color": 5882118, + "instant": false, + "category": "Beneficial", + "attribute_modifiers": [ + { + "attribute": 10, + "operation": 0, + "value": 1.0, + "uuid": "03c3c89d-7037-4b42-869f-b146bcb64d2e" + } + ] + }, + { + "id": 27, + "name": "unluck", + "translation_key": "effect.minecraft.unluck", + "color": 12624973, + "instant": false, + "category": "Harmful", + "attribute_modifiers": [ + { + "attribute": 10, + "operation": 0, + "value": -1.0, + "uuid": "cc5af142-2bd2-4215-b636-2605aed11727" + } + ] + }, + { + "id": 28, + "name": "slow_falling", + "translation_key": "effect.minecraft.slow_falling", + "color": 15978425, + "instant": false, + "category": "Beneficial" + }, + { + "id": 29, + "name": "conduit_power", + "translation_key": "effect.minecraft.conduit_power", + "color": 1950417, + "instant": false, + "category": "Beneficial" + }, + { + "id": 30, + "name": "dolphins_grace", + "translation_key": "effect.minecraft.dolphins_grace", + "color": 8954814, + "instant": false, + "category": "Beneficial" + }, + { + "id": 31, + "name": "bad_omen", + "translation_key": "effect.minecraft.bad_omen", + "color": 745784, + "instant": false, + "category": "Neutral" + }, + { + "id": 32, + "name": "hero_of_the_village", + "translation_key": "effect.minecraft.hero_of_the_village", + "color": 4521796, + "instant": false, + "category": "Beneficial" + }, + { + "id": 33, + "name": "darkness", + "translation_key": "effect.minecraft.darkness", + "color": 2696993, + "instant": false, + "category": "Harmful" + } +] \ No newline at end of file diff --git a/vendor/valence/crates/valence_generated/extracted/items.json b/vendor/valence/crates/valence_generated/extracted/items.json new file mode 100644 index 00000000..caca6930 --- /dev/null +++ b/vendor/valence/crates/valence_generated/extracted/items.json @@ -0,0 +1,11701 @@ +[ + { + "id": 0, + "name": "air", + "translation_key": "block.minecraft.air", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1, + "name": "stone", + "translation_key": "block.minecraft.stone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 2, + "name": "granite", + "translation_key": "block.minecraft.granite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 3, + "name": "polished_granite", + "translation_key": "block.minecraft.polished_granite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 4, + "name": "diorite", + "translation_key": "block.minecraft.diorite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 5, + "name": "polished_diorite", + "translation_key": "block.minecraft.polished_diorite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 6, + "name": "andesite", + "translation_key": "block.minecraft.andesite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 7, + "name": "polished_andesite", + "translation_key": "block.minecraft.polished_andesite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 8, + "name": "deepslate", + "translation_key": "block.minecraft.deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 9, + "name": "cobbled_deepslate", + "translation_key": "block.minecraft.cobbled_deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 10, + "name": "polished_deepslate", + "translation_key": "block.minecraft.polished_deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 11, + "name": "calcite", + "translation_key": "block.minecraft.calcite", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 12, + "name": "tuff", + "translation_key": "block.minecraft.tuff", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 13, + "name": "dripstone_block", + "translation_key": "block.minecraft.dripstone_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 14, + "name": "grass_block", + "translation_key": "block.minecraft.grass_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 15, + "name": "dirt", + "translation_key": "block.minecraft.dirt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 16, + "name": "coarse_dirt", + "translation_key": "block.minecraft.coarse_dirt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 17, + "name": "podzol", + "translation_key": "block.minecraft.podzol", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 18, + "name": "rooted_dirt", + "translation_key": "block.minecraft.rooted_dirt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 19, + "name": "mud", + "translation_key": "block.minecraft.mud", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 20, + "name": "crimson_nylium", + "translation_key": "block.minecraft.crimson_nylium", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 21, + "name": "warped_nylium", + "translation_key": "block.minecraft.warped_nylium", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 22, + "name": "cobblestone", + "translation_key": "block.minecraft.cobblestone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 23, + "name": "oak_planks", + "translation_key": "block.minecraft.oak_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 24, + "name": "spruce_planks", + "translation_key": "block.minecraft.spruce_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 25, + "name": "birch_planks", + "translation_key": "block.minecraft.birch_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 26, + "name": "jungle_planks", + "translation_key": "block.minecraft.jungle_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 27, + "name": "acacia_planks", + "translation_key": "block.minecraft.acacia_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 28, + "name": "cherry_planks", + "translation_key": "block.minecraft.cherry_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 29, + "name": "dark_oak_planks", + "translation_key": "block.minecraft.dark_oak_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 30, + "name": "mangrove_planks", + "translation_key": "block.minecraft.mangrove_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 31, + "name": "bamboo_planks", + "translation_key": "block.minecraft.bamboo_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 32, + "name": "crimson_planks", + "translation_key": "block.minecraft.crimson_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 33, + "name": "warped_planks", + "translation_key": "block.minecraft.warped_planks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 34, + "name": "bamboo_mosaic", + "translation_key": "block.minecraft.bamboo_mosaic", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 35, + "name": "oak_sapling", + "translation_key": "block.minecraft.oak_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 36, + "name": "spruce_sapling", + "translation_key": "block.minecraft.spruce_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 37, + "name": "birch_sapling", + "translation_key": "block.minecraft.birch_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 38, + "name": "jungle_sapling", + "translation_key": "block.minecraft.jungle_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 39, + "name": "acacia_sapling", + "translation_key": "block.minecraft.acacia_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 40, + "name": "cherry_sapling", + "translation_key": "block.minecraft.cherry_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 41, + "name": "dark_oak_sapling", + "translation_key": "block.minecraft.dark_oak_sapling", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 42, + "name": "mangrove_propagule", + "translation_key": "block.minecraft.mangrove_propagule", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 43, + "name": "bedrock", + "translation_key": "block.minecraft.bedrock", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 44, + "name": "sand", + "translation_key": "block.minecraft.sand", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 45, + "name": "suspicious_sand", + "translation_key": "block.minecraft.suspicious_sand", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 46, + "name": "suspicious_gravel", + "translation_key": "block.minecraft.suspicious_gravel", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 47, + "name": "red_sand", + "translation_key": "block.minecraft.red_sand", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 48, + "name": "gravel", + "translation_key": "block.minecraft.gravel", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 49, + "name": "coal_ore", + "translation_key": "block.minecraft.coal_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 50, + "name": "deepslate_coal_ore", + "translation_key": "block.minecraft.deepslate_coal_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 51, + "name": "iron_ore", + "translation_key": "block.minecraft.iron_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 52, + "name": "deepslate_iron_ore", + "translation_key": "block.minecraft.deepslate_iron_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 53, + "name": "copper_ore", + "translation_key": "block.minecraft.copper_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 54, + "name": "deepslate_copper_ore", + "translation_key": "block.minecraft.deepslate_copper_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 55, + "name": "gold_ore", + "translation_key": "block.minecraft.gold_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 56, + "name": "deepslate_gold_ore", + "translation_key": "block.minecraft.deepslate_gold_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 57, + "name": "redstone_ore", + "translation_key": "block.minecraft.redstone_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 58, + "name": "deepslate_redstone_ore", + "translation_key": "block.minecraft.deepslate_redstone_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 59, + "name": "emerald_ore", + "translation_key": "block.minecraft.emerald_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 60, + "name": "deepslate_emerald_ore", + "translation_key": "block.minecraft.deepslate_emerald_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 61, + "name": "lapis_ore", + "translation_key": "block.minecraft.lapis_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 62, + "name": "deepslate_lapis_ore", + "translation_key": "block.minecraft.deepslate_lapis_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 63, + "name": "diamond_ore", + "translation_key": "block.minecraft.diamond_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 64, + "name": "deepslate_diamond_ore", + "translation_key": "block.minecraft.deepslate_diamond_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 65, + "name": "nether_gold_ore", + "translation_key": "block.minecraft.nether_gold_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 66, + "name": "nether_quartz_ore", + "translation_key": "block.minecraft.nether_quartz_ore", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 67, + "name": "ancient_debris", + "translation_key": "block.minecraft.ancient_debris", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": true + }, + { + "id": 68, + "name": "coal_block", + "translation_key": "block.minecraft.coal_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 69, + "name": "raw_iron_block", + "translation_key": "block.minecraft.raw_iron_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 70, + "name": "raw_copper_block", + "translation_key": "block.minecraft.raw_copper_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 71, + "name": "raw_gold_block", + "translation_key": "block.minecraft.raw_gold_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 72, + "name": "amethyst_block", + "translation_key": "block.minecraft.amethyst_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 73, + "name": "budding_amethyst", + "translation_key": "block.minecraft.budding_amethyst", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 74, + "name": "iron_block", + "translation_key": "block.minecraft.iron_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 75, + "name": "copper_block", + "translation_key": "block.minecraft.copper_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 76, + "name": "gold_block", + "translation_key": "block.minecraft.gold_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 77, + "name": "diamond_block", + "translation_key": "block.minecraft.diamond_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 78, + "name": "netherite_block", + "translation_key": "block.minecraft.netherite_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": true + }, + { + "id": 79, + "name": "exposed_copper", + "translation_key": "block.minecraft.exposed_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 80, + "name": "weathered_copper", + "translation_key": "block.minecraft.weathered_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 81, + "name": "oxidized_copper", + "translation_key": "block.minecraft.oxidized_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 82, + "name": "cut_copper", + "translation_key": "block.minecraft.cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 83, + "name": "exposed_cut_copper", + "translation_key": "block.minecraft.exposed_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 84, + "name": "weathered_cut_copper", + "translation_key": "block.minecraft.weathered_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 85, + "name": "oxidized_cut_copper", + "translation_key": "block.minecraft.oxidized_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 86, + "name": "cut_copper_stairs", + "translation_key": "block.minecraft.cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 87, + "name": "exposed_cut_copper_stairs", + "translation_key": "block.minecraft.exposed_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 88, + "name": "weathered_cut_copper_stairs", + "translation_key": "block.minecraft.weathered_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 89, + "name": "oxidized_cut_copper_stairs", + "translation_key": "block.minecraft.oxidized_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 90, + "name": "cut_copper_slab", + "translation_key": "block.minecraft.cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 91, + "name": "exposed_cut_copper_slab", + "translation_key": "block.minecraft.exposed_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 92, + "name": "weathered_cut_copper_slab", + "translation_key": "block.minecraft.weathered_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 93, + "name": "oxidized_cut_copper_slab", + "translation_key": "block.minecraft.oxidized_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 94, + "name": "waxed_copper_block", + "translation_key": "block.minecraft.waxed_copper_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 95, + "name": "waxed_exposed_copper", + "translation_key": "block.minecraft.waxed_exposed_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 96, + "name": "waxed_weathered_copper", + "translation_key": "block.minecraft.waxed_weathered_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 97, + "name": "waxed_oxidized_copper", + "translation_key": "block.minecraft.waxed_oxidized_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 98, + "name": "waxed_cut_copper", + "translation_key": "block.minecraft.waxed_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 99, + "name": "waxed_exposed_cut_copper", + "translation_key": "block.minecraft.waxed_exposed_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 100, + "name": "waxed_weathered_cut_copper", + "translation_key": "block.minecraft.waxed_weathered_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 101, + "name": "waxed_oxidized_cut_copper", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 102, + "name": "waxed_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 103, + "name": "waxed_exposed_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_exposed_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 104, + "name": "waxed_weathered_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_weathered_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 105, + "name": "waxed_oxidized_cut_copper_stairs", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 106, + "name": "waxed_cut_copper_slab", + "translation_key": "block.minecraft.waxed_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 107, + "name": "waxed_exposed_cut_copper_slab", + "translation_key": "block.minecraft.waxed_exposed_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 108, + "name": "waxed_weathered_cut_copper_slab", + "translation_key": "block.minecraft.waxed_weathered_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 109, + "name": "waxed_oxidized_cut_copper_slab", + "translation_key": "block.minecraft.waxed_oxidized_cut_copper_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 110, + "name": "oak_log", + "translation_key": "block.minecraft.oak_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 111, + "name": "spruce_log", + "translation_key": "block.minecraft.spruce_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 112, + "name": "birch_log", + "translation_key": "block.minecraft.birch_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 113, + "name": "jungle_log", + "translation_key": "block.minecraft.jungle_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 114, + "name": "acacia_log", + "translation_key": "block.minecraft.acacia_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 115, + "name": "cherry_log", + "translation_key": "block.minecraft.cherry_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 116, + "name": "dark_oak_log", + "translation_key": "block.minecraft.dark_oak_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 117, + "name": "mangrove_log", + "translation_key": "block.minecraft.mangrove_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 118, + "name": "mangrove_roots", + "translation_key": "block.minecraft.mangrove_roots", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 119, + "name": "muddy_mangrove_roots", + "translation_key": "block.minecraft.muddy_mangrove_roots", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 120, + "name": "crimson_stem", + "translation_key": "block.minecraft.crimson_stem", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 121, + "name": "warped_stem", + "translation_key": "block.minecraft.warped_stem", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 122, + "name": "bamboo_block", + "translation_key": "block.minecraft.bamboo_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 123, + "name": "stripped_oak_log", + "translation_key": "block.minecraft.stripped_oak_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 124, + "name": "stripped_spruce_log", + "translation_key": "block.minecraft.stripped_spruce_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 125, + "name": "stripped_birch_log", + "translation_key": "block.minecraft.stripped_birch_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 126, + "name": "stripped_jungle_log", + "translation_key": "block.minecraft.stripped_jungle_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 127, + "name": "stripped_acacia_log", + "translation_key": "block.minecraft.stripped_acacia_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 128, + "name": "stripped_cherry_log", + "translation_key": "block.minecraft.stripped_cherry_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 129, + "name": "stripped_dark_oak_log", + "translation_key": "block.minecraft.stripped_dark_oak_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 130, + "name": "stripped_mangrove_log", + "translation_key": "block.minecraft.stripped_mangrove_log", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 131, + "name": "stripped_crimson_stem", + "translation_key": "block.minecraft.stripped_crimson_stem", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 132, + "name": "stripped_warped_stem", + "translation_key": "block.minecraft.stripped_warped_stem", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 133, + "name": "stripped_oak_wood", + "translation_key": "block.minecraft.stripped_oak_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 134, + "name": "stripped_spruce_wood", + "translation_key": "block.minecraft.stripped_spruce_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 135, + "name": "stripped_birch_wood", + "translation_key": "block.minecraft.stripped_birch_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 136, + "name": "stripped_jungle_wood", + "translation_key": "block.minecraft.stripped_jungle_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 137, + "name": "stripped_acacia_wood", + "translation_key": "block.minecraft.stripped_acacia_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 138, + "name": "stripped_cherry_wood", + "translation_key": "block.minecraft.stripped_cherry_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 139, + "name": "stripped_dark_oak_wood", + "translation_key": "block.minecraft.stripped_dark_oak_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 140, + "name": "stripped_mangrove_wood", + "translation_key": "block.minecraft.stripped_mangrove_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 141, + "name": "stripped_crimson_hyphae", + "translation_key": "block.minecraft.stripped_crimson_hyphae", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 142, + "name": "stripped_warped_hyphae", + "translation_key": "block.minecraft.stripped_warped_hyphae", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 143, + "name": "stripped_bamboo_block", + "translation_key": "block.minecraft.stripped_bamboo_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 144, + "name": "oak_wood", + "translation_key": "block.minecraft.oak_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 145, + "name": "spruce_wood", + "translation_key": "block.minecraft.spruce_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 146, + "name": "birch_wood", + "translation_key": "block.minecraft.birch_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 147, + "name": "jungle_wood", + "translation_key": "block.minecraft.jungle_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 148, + "name": "acacia_wood", + "translation_key": "block.minecraft.acacia_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 149, + "name": "cherry_wood", + "translation_key": "block.minecraft.cherry_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 150, + "name": "dark_oak_wood", + "translation_key": "block.minecraft.dark_oak_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 151, + "name": "mangrove_wood", + "translation_key": "block.minecraft.mangrove_wood", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 152, + "name": "crimson_hyphae", + "translation_key": "block.minecraft.crimson_hyphae", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 153, + "name": "warped_hyphae", + "translation_key": "block.minecraft.warped_hyphae", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 154, + "name": "oak_leaves", + "translation_key": "block.minecraft.oak_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 155, + "name": "spruce_leaves", + "translation_key": "block.minecraft.spruce_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 156, + "name": "birch_leaves", + "translation_key": "block.minecraft.birch_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 157, + "name": "jungle_leaves", + "translation_key": "block.minecraft.jungle_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 158, + "name": "acacia_leaves", + "translation_key": "block.minecraft.acacia_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 159, + "name": "cherry_leaves", + "translation_key": "block.minecraft.cherry_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 160, + "name": "dark_oak_leaves", + "translation_key": "block.minecraft.dark_oak_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 161, + "name": "mangrove_leaves", + "translation_key": "block.minecraft.mangrove_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 162, + "name": "azalea_leaves", + "translation_key": "block.minecraft.azalea_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 163, + "name": "flowering_azalea_leaves", + "translation_key": "block.minecraft.flowering_azalea_leaves", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 164, + "name": "sponge", + "translation_key": "block.minecraft.sponge", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 165, + "name": "wet_sponge", + "translation_key": "block.minecraft.wet_sponge", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 166, + "name": "glass", + "translation_key": "block.minecraft.glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 167, + "name": "tinted_glass", + "translation_key": "block.minecraft.tinted_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 168, + "name": "lapis_block", + "translation_key": "block.minecraft.lapis_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 169, + "name": "sandstone", + "translation_key": "block.minecraft.sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 170, + "name": "chiseled_sandstone", + "translation_key": "block.minecraft.chiseled_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 171, + "name": "cut_sandstone", + "translation_key": "block.minecraft.cut_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 172, + "name": "cobweb", + "translation_key": "block.minecraft.cobweb", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 173, + "name": "grass", + "translation_key": "block.minecraft.grass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 174, + "name": "fern", + "translation_key": "block.minecraft.fern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 175, + "name": "azalea", + "translation_key": "block.minecraft.azalea", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 176, + "name": "flowering_azalea", + "translation_key": "block.minecraft.flowering_azalea", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 177, + "name": "dead_bush", + "translation_key": "block.minecraft.dead_bush", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 178, + "name": "seagrass", + "translation_key": "block.minecraft.seagrass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 179, + "name": "sea_pickle", + "translation_key": "block.minecraft.sea_pickle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 180, + "name": "white_wool", + "translation_key": "block.minecraft.white_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 181, + "name": "orange_wool", + "translation_key": "block.minecraft.orange_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 182, + "name": "magenta_wool", + "translation_key": "block.minecraft.magenta_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 183, + "name": "light_blue_wool", + "translation_key": "block.minecraft.light_blue_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 184, + "name": "yellow_wool", + "translation_key": "block.minecraft.yellow_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 185, + "name": "lime_wool", + "translation_key": "block.minecraft.lime_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 186, + "name": "pink_wool", + "translation_key": "block.minecraft.pink_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 187, + "name": "gray_wool", + "translation_key": "block.minecraft.gray_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 188, + "name": "light_gray_wool", + "translation_key": "block.minecraft.light_gray_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 189, + "name": "cyan_wool", + "translation_key": "block.minecraft.cyan_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 190, + "name": "purple_wool", + "translation_key": "block.minecraft.purple_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 191, + "name": "blue_wool", + "translation_key": "block.minecraft.blue_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 192, + "name": "brown_wool", + "translation_key": "block.minecraft.brown_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 193, + "name": "green_wool", + "translation_key": "block.minecraft.green_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 194, + "name": "red_wool", + "translation_key": "block.minecraft.red_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 195, + "name": "black_wool", + "translation_key": "block.minecraft.black_wool", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 196, + "name": "dandelion", + "translation_key": "block.minecraft.dandelion", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 197, + "name": "poppy", + "translation_key": "block.minecraft.poppy", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 198, + "name": "blue_orchid", + "translation_key": "block.minecraft.blue_orchid", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 199, + "name": "allium", + "translation_key": "block.minecraft.allium", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 200, + "name": "azure_bluet", + "translation_key": "block.minecraft.azure_bluet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 201, + "name": "red_tulip", + "translation_key": "block.minecraft.red_tulip", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 202, + "name": "orange_tulip", + "translation_key": "block.minecraft.orange_tulip", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 203, + "name": "white_tulip", + "translation_key": "block.minecraft.white_tulip", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 204, + "name": "pink_tulip", + "translation_key": "block.minecraft.pink_tulip", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 205, + "name": "oxeye_daisy", + "translation_key": "block.minecraft.oxeye_daisy", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 206, + "name": "cornflower", + "translation_key": "block.minecraft.cornflower", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 207, + "name": "lily_of_the_valley", + "translation_key": "block.minecraft.lily_of_the_valley", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 208, + "name": "wither_rose", + "translation_key": "block.minecraft.wither_rose", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 209, + "name": "torchflower", + "translation_key": "block.minecraft.torchflower", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 210, + "name": "pitcher_plant", + "translation_key": "block.minecraft.pitcher_plant", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 211, + "name": "spore_blossom", + "translation_key": "block.minecraft.spore_blossom", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 212, + "name": "brown_mushroom", + "translation_key": "block.minecraft.brown_mushroom", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 213, + "name": "red_mushroom", + "translation_key": "block.minecraft.red_mushroom", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 214, + "name": "crimson_fungus", + "translation_key": "block.minecraft.crimson_fungus", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 215, + "name": "warped_fungus", + "translation_key": "block.minecraft.warped_fungus", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 216, + "name": "crimson_roots", + "translation_key": "block.minecraft.crimson_roots", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 217, + "name": "warped_roots", + "translation_key": "block.minecraft.warped_roots", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 218, + "name": "nether_sprouts", + "translation_key": "block.minecraft.nether_sprouts", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 219, + "name": "weeping_vines", + "translation_key": "block.minecraft.weeping_vines", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 220, + "name": "twisting_vines", + "translation_key": "block.minecraft.twisting_vines", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 221, + "name": "sugar_cane", + "translation_key": "block.minecraft.sugar_cane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 222, + "name": "kelp", + "translation_key": "block.minecraft.kelp", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 223, + "name": "moss_carpet", + "translation_key": "block.minecraft.moss_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 224, + "name": "pink_petals", + "translation_key": "block.minecraft.pink_petals", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 225, + "name": "moss_block", + "translation_key": "block.minecraft.moss_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 226, + "name": "hanging_roots", + "translation_key": "block.minecraft.hanging_roots", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 227, + "name": "big_dripleaf", + "translation_key": "block.minecraft.big_dripleaf", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 228, + "name": "small_dripleaf", + "translation_key": "block.minecraft.small_dripleaf", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 229, + "name": "bamboo", + "translation_key": "block.minecraft.bamboo", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 230, + "name": "oak_slab", + "translation_key": "block.minecraft.oak_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 231, + "name": "spruce_slab", + "translation_key": "block.minecraft.spruce_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 232, + "name": "birch_slab", + "translation_key": "block.minecraft.birch_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 233, + "name": "jungle_slab", + "translation_key": "block.minecraft.jungle_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 234, + "name": "acacia_slab", + "translation_key": "block.minecraft.acacia_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 235, + "name": "cherry_slab", + "translation_key": "block.minecraft.cherry_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 236, + "name": "dark_oak_slab", + "translation_key": "block.minecraft.dark_oak_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 237, + "name": "mangrove_slab", + "translation_key": "block.minecraft.mangrove_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 238, + "name": "bamboo_slab", + "translation_key": "block.minecraft.bamboo_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 239, + "name": "bamboo_mosaic_slab", + "translation_key": "block.minecraft.bamboo_mosaic_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 240, + "name": "crimson_slab", + "translation_key": "block.minecraft.crimson_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 241, + "name": "warped_slab", + "translation_key": "block.minecraft.warped_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 242, + "name": "stone_slab", + "translation_key": "block.minecraft.stone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 243, + "name": "smooth_stone_slab", + "translation_key": "block.minecraft.smooth_stone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 244, + "name": "sandstone_slab", + "translation_key": "block.minecraft.sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 245, + "name": "cut_sandstone_slab", + "translation_key": "block.minecraft.cut_sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 246, + "name": "petrified_oak_slab", + "translation_key": "block.minecraft.petrified_oak_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 247, + "name": "cobblestone_slab", + "translation_key": "block.minecraft.cobblestone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 248, + "name": "brick_slab", + "translation_key": "block.minecraft.brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 249, + "name": "stone_brick_slab", + "translation_key": "block.minecraft.stone_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 250, + "name": "mud_brick_slab", + "translation_key": "block.minecraft.mud_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 251, + "name": "nether_brick_slab", + "translation_key": "block.minecraft.nether_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 252, + "name": "quartz_slab", + "translation_key": "block.minecraft.quartz_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 253, + "name": "red_sandstone_slab", + "translation_key": "block.minecraft.red_sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 254, + "name": "cut_red_sandstone_slab", + "translation_key": "block.minecraft.cut_red_sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 255, + "name": "purpur_slab", + "translation_key": "block.minecraft.purpur_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 256, + "name": "prismarine_slab", + "translation_key": "block.minecraft.prismarine_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 257, + "name": "prismarine_brick_slab", + "translation_key": "block.minecraft.prismarine_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 258, + "name": "dark_prismarine_slab", + "translation_key": "block.minecraft.dark_prismarine_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 259, + "name": "smooth_quartz", + "translation_key": "block.minecraft.smooth_quartz", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 260, + "name": "smooth_red_sandstone", + "translation_key": "block.minecraft.smooth_red_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 261, + "name": "smooth_sandstone", + "translation_key": "block.minecraft.smooth_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 262, + "name": "smooth_stone", + "translation_key": "block.minecraft.smooth_stone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 263, + "name": "bricks", + "translation_key": "block.minecraft.bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 264, + "name": "bookshelf", + "translation_key": "block.minecraft.bookshelf", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 265, + "name": "chiseled_bookshelf", + "translation_key": "block.minecraft.chiseled_bookshelf", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 266, + "name": "decorated_pot", + "translation_key": "block.minecraft.decorated_pot", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 267, + "name": "mossy_cobblestone", + "translation_key": "block.minecraft.mossy_cobblestone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 268, + "name": "obsidian", + "translation_key": "block.minecraft.obsidian", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 269, + "name": "torch", + "translation_key": "block.minecraft.torch", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 270, + "name": "end_rod", + "translation_key": "block.minecraft.end_rod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 271, + "name": "chorus_plant", + "translation_key": "block.minecraft.chorus_plant", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 272, + "name": "chorus_flower", + "translation_key": "block.minecraft.chorus_flower", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 273, + "name": "purpur_block", + "translation_key": "block.minecraft.purpur_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 274, + "name": "purpur_pillar", + "translation_key": "block.minecraft.purpur_pillar", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 275, + "name": "purpur_stairs", + "translation_key": "block.minecraft.purpur_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 276, + "name": "spawner", + "translation_key": "block.minecraft.spawner", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 277, + "name": "chest", + "translation_key": "block.minecraft.chest", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 278, + "name": "crafting_table", + "translation_key": "block.minecraft.crafting_table", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 279, + "name": "farmland", + "translation_key": "block.minecraft.farmland", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 280, + "name": "furnace", + "translation_key": "block.minecraft.furnace", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 281, + "name": "ladder", + "translation_key": "block.minecraft.ladder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 282, + "name": "cobblestone_stairs", + "translation_key": "block.minecraft.cobblestone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 283, + "name": "snow", + "translation_key": "block.minecraft.snow", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 284, + "name": "ice", + "translation_key": "block.minecraft.ice", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 285, + "name": "snow_block", + "translation_key": "block.minecraft.snow_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 286, + "name": "cactus", + "translation_key": "block.minecraft.cactus", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 287, + "name": "clay", + "translation_key": "block.minecraft.clay", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 288, + "name": "jukebox", + "translation_key": "block.minecraft.jukebox", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 289, + "name": "oak_fence", + "translation_key": "block.minecraft.oak_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 290, + "name": "spruce_fence", + "translation_key": "block.minecraft.spruce_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 291, + "name": "birch_fence", + "translation_key": "block.minecraft.birch_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 292, + "name": "jungle_fence", + "translation_key": "block.minecraft.jungle_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 293, + "name": "acacia_fence", + "translation_key": "block.minecraft.acacia_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 294, + "name": "cherry_fence", + "translation_key": "block.minecraft.cherry_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 295, + "name": "dark_oak_fence", + "translation_key": "block.minecraft.dark_oak_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 296, + "name": "mangrove_fence", + "translation_key": "block.minecraft.mangrove_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 297, + "name": "bamboo_fence", + "translation_key": "block.minecraft.bamboo_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 298, + "name": "crimson_fence", + "translation_key": "block.minecraft.crimson_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 299, + "name": "warped_fence", + "translation_key": "block.minecraft.warped_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 300, + "name": "pumpkin", + "translation_key": "block.minecraft.pumpkin", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 301, + "name": "carved_pumpkin", + "translation_key": "block.minecraft.carved_pumpkin", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 302, + "name": "jack_o_lantern", + "translation_key": "block.minecraft.jack_o_lantern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 303, + "name": "netherrack", + "translation_key": "block.minecraft.netherrack", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 304, + "name": "soul_sand", + "translation_key": "block.minecraft.soul_sand", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 305, + "name": "soul_soil", + "translation_key": "block.minecraft.soul_soil", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 306, + "name": "basalt", + "translation_key": "block.minecraft.basalt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 307, + "name": "polished_basalt", + "translation_key": "block.minecraft.polished_basalt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 308, + "name": "smooth_basalt", + "translation_key": "block.minecraft.smooth_basalt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 309, + "name": "soul_torch", + "translation_key": "block.minecraft.soul_torch", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 310, + "name": "glowstone", + "translation_key": "block.minecraft.glowstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 311, + "name": "infested_stone", + "translation_key": "block.minecraft.infested_stone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 312, + "name": "infested_cobblestone", + "translation_key": "block.minecraft.infested_cobblestone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 313, + "name": "infested_stone_bricks", + "translation_key": "block.minecraft.infested_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 314, + "name": "infested_mossy_stone_bricks", + "translation_key": "block.minecraft.infested_mossy_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 315, + "name": "infested_cracked_stone_bricks", + "translation_key": "block.minecraft.infested_cracked_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 316, + "name": "infested_chiseled_stone_bricks", + "translation_key": "block.minecraft.infested_chiseled_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 317, + "name": "infested_deepslate", + "translation_key": "block.minecraft.infested_deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 318, + "name": "stone_bricks", + "translation_key": "block.minecraft.stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 319, + "name": "mossy_stone_bricks", + "translation_key": "block.minecraft.mossy_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 320, + "name": "cracked_stone_bricks", + "translation_key": "block.minecraft.cracked_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 321, + "name": "chiseled_stone_bricks", + "translation_key": "block.minecraft.chiseled_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 322, + "name": "packed_mud", + "translation_key": "block.minecraft.packed_mud", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 323, + "name": "mud_bricks", + "translation_key": "block.minecraft.mud_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 324, + "name": "deepslate_bricks", + "translation_key": "block.minecraft.deepslate_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 325, + "name": "cracked_deepslate_bricks", + "translation_key": "block.minecraft.cracked_deepslate_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 326, + "name": "deepslate_tiles", + "translation_key": "block.minecraft.deepslate_tiles", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 327, + "name": "cracked_deepslate_tiles", + "translation_key": "block.minecraft.cracked_deepslate_tiles", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 328, + "name": "chiseled_deepslate", + "translation_key": "block.minecraft.chiseled_deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 329, + "name": "reinforced_deepslate", + "translation_key": "block.minecraft.reinforced_deepslate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 330, + "name": "brown_mushroom_block", + "translation_key": "block.minecraft.brown_mushroom_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 331, + "name": "red_mushroom_block", + "translation_key": "block.minecraft.red_mushroom_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 332, + "name": "mushroom_stem", + "translation_key": "block.minecraft.mushroom_stem", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 333, + "name": "iron_bars", + "translation_key": "block.minecraft.iron_bars", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 334, + "name": "chain", + "translation_key": "block.minecraft.chain", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 335, + "name": "glass_pane", + "translation_key": "block.minecraft.glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 336, + "name": "melon", + "translation_key": "block.minecraft.melon", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 337, + "name": "vine", + "translation_key": "block.minecraft.vine", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 338, + "name": "glow_lichen", + "translation_key": "block.minecraft.glow_lichen", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 339, + "name": "brick_stairs", + "translation_key": "block.minecraft.brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 340, + "name": "stone_brick_stairs", + "translation_key": "block.minecraft.stone_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 341, + "name": "mud_brick_stairs", + "translation_key": "block.minecraft.mud_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 342, + "name": "mycelium", + "translation_key": "block.minecraft.mycelium", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 343, + "name": "lily_pad", + "translation_key": "block.minecraft.lily_pad", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 344, + "name": "nether_bricks", + "translation_key": "block.minecraft.nether_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 345, + "name": "cracked_nether_bricks", + "translation_key": "block.minecraft.cracked_nether_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 346, + "name": "chiseled_nether_bricks", + "translation_key": "block.minecraft.chiseled_nether_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 347, + "name": "nether_brick_fence", + "translation_key": "block.minecraft.nether_brick_fence", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 348, + "name": "nether_brick_stairs", + "translation_key": "block.minecraft.nether_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 349, + "name": "sculk", + "translation_key": "block.minecraft.sculk", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 350, + "name": "sculk_vein", + "translation_key": "block.minecraft.sculk_vein", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 351, + "name": "sculk_catalyst", + "translation_key": "block.minecraft.sculk_catalyst", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 352, + "name": "sculk_shrieker", + "translation_key": "block.minecraft.sculk_shrieker", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 353, + "name": "enchanting_table", + "translation_key": "block.minecraft.enchanting_table", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 354, + "name": "end_portal_frame", + "translation_key": "block.minecraft.end_portal_frame", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 355, + "name": "end_stone", + "translation_key": "block.minecraft.end_stone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 356, + "name": "end_stone_bricks", + "translation_key": "block.minecraft.end_stone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 357, + "name": "dragon_egg", + "translation_key": "block.minecraft.dragon_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 358, + "name": "sandstone_stairs", + "translation_key": "block.minecraft.sandstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 359, + "name": "ender_chest", + "translation_key": "block.minecraft.ender_chest", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 360, + "name": "emerald_block", + "translation_key": "block.minecraft.emerald_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 361, + "name": "oak_stairs", + "translation_key": "block.minecraft.oak_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 362, + "name": "spruce_stairs", + "translation_key": "block.minecraft.spruce_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 363, + "name": "birch_stairs", + "translation_key": "block.minecraft.birch_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 364, + "name": "jungle_stairs", + "translation_key": "block.minecraft.jungle_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 365, + "name": "acacia_stairs", + "translation_key": "block.minecraft.acacia_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 366, + "name": "cherry_stairs", + "translation_key": "block.minecraft.cherry_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 367, + "name": "dark_oak_stairs", + "translation_key": "block.minecraft.dark_oak_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 368, + "name": "mangrove_stairs", + "translation_key": "block.minecraft.mangrove_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 369, + "name": "bamboo_stairs", + "translation_key": "block.minecraft.bamboo_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 370, + "name": "bamboo_mosaic_stairs", + "translation_key": "block.minecraft.bamboo_mosaic_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 371, + "name": "crimson_stairs", + "translation_key": "block.minecraft.crimson_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 372, + "name": "warped_stairs", + "translation_key": "block.minecraft.warped_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 373, + "name": "command_block", + "translation_key": "block.minecraft.command_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 374, + "name": "beacon", + "translation_key": "block.minecraft.beacon", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 375, + "name": "cobblestone_wall", + "translation_key": "block.minecraft.cobblestone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 376, + "name": "mossy_cobblestone_wall", + "translation_key": "block.minecraft.mossy_cobblestone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 377, + "name": "brick_wall", + "translation_key": "block.minecraft.brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 378, + "name": "prismarine_wall", + "translation_key": "block.minecraft.prismarine_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 379, + "name": "red_sandstone_wall", + "translation_key": "block.minecraft.red_sandstone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 380, + "name": "mossy_stone_brick_wall", + "translation_key": "block.minecraft.mossy_stone_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 381, + "name": "granite_wall", + "translation_key": "block.minecraft.granite_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 382, + "name": "stone_brick_wall", + "translation_key": "block.minecraft.stone_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 383, + "name": "mud_brick_wall", + "translation_key": "block.minecraft.mud_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 384, + "name": "nether_brick_wall", + "translation_key": "block.minecraft.nether_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 385, + "name": "andesite_wall", + "translation_key": "block.minecraft.andesite_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 386, + "name": "red_nether_brick_wall", + "translation_key": "block.minecraft.red_nether_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 387, + "name": "sandstone_wall", + "translation_key": "block.minecraft.sandstone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 388, + "name": "end_stone_brick_wall", + "translation_key": "block.minecraft.end_stone_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 389, + "name": "diorite_wall", + "translation_key": "block.minecraft.diorite_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 390, + "name": "blackstone_wall", + "translation_key": "block.minecraft.blackstone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 391, + "name": "polished_blackstone_wall", + "translation_key": "block.minecraft.polished_blackstone_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 392, + "name": "polished_blackstone_brick_wall", + "translation_key": "block.minecraft.polished_blackstone_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 393, + "name": "cobbled_deepslate_wall", + "translation_key": "block.minecraft.cobbled_deepslate_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 394, + "name": "polished_deepslate_wall", + "translation_key": "block.minecraft.polished_deepslate_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 395, + "name": "deepslate_brick_wall", + "translation_key": "block.minecraft.deepslate_brick_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 396, + "name": "deepslate_tile_wall", + "translation_key": "block.minecraft.deepslate_tile_wall", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 397, + "name": "anvil", + "translation_key": "block.minecraft.anvil", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 398, + "name": "chipped_anvil", + "translation_key": "block.minecraft.chipped_anvil", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 399, + "name": "damaged_anvil", + "translation_key": "block.minecraft.damaged_anvil", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 400, + "name": "chiseled_quartz_block", + "translation_key": "block.minecraft.chiseled_quartz_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 401, + "name": "quartz_block", + "translation_key": "block.minecraft.quartz_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 402, + "name": "quartz_bricks", + "translation_key": "block.minecraft.quartz_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 403, + "name": "quartz_pillar", + "translation_key": "block.minecraft.quartz_pillar", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 404, + "name": "quartz_stairs", + "translation_key": "block.minecraft.quartz_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 405, + "name": "white_terracotta", + "translation_key": "block.minecraft.white_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 406, + "name": "orange_terracotta", + "translation_key": "block.minecraft.orange_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 407, + "name": "magenta_terracotta", + "translation_key": "block.minecraft.magenta_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 408, + "name": "light_blue_terracotta", + "translation_key": "block.minecraft.light_blue_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 409, + "name": "yellow_terracotta", + "translation_key": "block.minecraft.yellow_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 410, + "name": "lime_terracotta", + "translation_key": "block.minecraft.lime_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 411, + "name": "pink_terracotta", + "translation_key": "block.minecraft.pink_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 412, + "name": "gray_terracotta", + "translation_key": "block.minecraft.gray_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 413, + "name": "light_gray_terracotta", + "translation_key": "block.minecraft.light_gray_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 414, + "name": "cyan_terracotta", + "translation_key": "block.minecraft.cyan_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 415, + "name": "purple_terracotta", + "translation_key": "block.minecraft.purple_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 416, + "name": "blue_terracotta", + "translation_key": "block.minecraft.blue_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 417, + "name": "brown_terracotta", + "translation_key": "block.minecraft.brown_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 418, + "name": "green_terracotta", + "translation_key": "block.minecraft.green_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 419, + "name": "red_terracotta", + "translation_key": "block.minecraft.red_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 420, + "name": "black_terracotta", + "translation_key": "block.minecraft.black_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 421, + "name": "barrier", + "translation_key": "block.minecraft.barrier", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 422, + "name": "light", + "translation_key": "block.minecraft.light", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 423, + "name": "hay_block", + "translation_key": "block.minecraft.hay_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 424, + "name": "white_carpet", + "translation_key": "block.minecraft.white_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 425, + "name": "orange_carpet", + "translation_key": "block.minecraft.orange_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 426, + "name": "magenta_carpet", + "translation_key": "block.minecraft.magenta_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 427, + "name": "light_blue_carpet", + "translation_key": "block.minecraft.light_blue_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 428, + "name": "yellow_carpet", + "translation_key": "block.minecraft.yellow_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 429, + "name": "lime_carpet", + "translation_key": "block.minecraft.lime_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 430, + "name": "pink_carpet", + "translation_key": "block.minecraft.pink_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 431, + "name": "gray_carpet", + "translation_key": "block.minecraft.gray_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 432, + "name": "light_gray_carpet", + "translation_key": "block.minecraft.light_gray_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 433, + "name": "cyan_carpet", + "translation_key": "block.minecraft.cyan_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 434, + "name": "purple_carpet", + "translation_key": "block.minecraft.purple_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 435, + "name": "blue_carpet", + "translation_key": "block.minecraft.blue_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 436, + "name": "brown_carpet", + "translation_key": "block.minecraft.brown_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 437, + "name": "green_carpet", + "translation_key": "block.minecraft.green_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 438, + "name": "red_carpet", + "translation_key": "block.minecraft.red_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 439, + "name": "black_carpet", + "translation_key": "block.minecraft.black_carpet", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 440, + "name": "terracotta", + "translation_key": "block.minecraft.terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 441, + "name": "packed_ice", + "translation_key": "block.minecraft.packed_ice", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 442, + "name": "dirt_path", + "translation_key": "block.minecraft.dirt_path", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 443, + "name": "sunflower", + "translation_key": "block.minecraft.sunflower", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 444, + "name": "lilac", + "translation_key": "block.minecraft.lilac", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 445, + "name": "rose_bush", + "translation_key": "block.minecraft.rose_bush", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 446, + "name": "peony", + "translation_key": "block.minecraft.peony", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 447, + "name": "tall_grass", + "translation_key": "block.minecraft.tall_grass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 448, + "name": "large_fern", + "translation_key": "block.minecraft.large_fern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 449, + "name": "white_stained_glass", + "translation_key": "block.minecraft.white_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 450, + "name": "orange_stained_glass", + "translation_key": "block.minecraft.orange_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 451, + "name": "magenta_stained_glass", + "translation_key": "block.minecraft.magenta_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 452, + "name": "light_blue_stained_glass", + "translation_key": "block.minecraft.light_blue_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 453, + "name": "yellow_stained_glass", + "translation_key": "block.minecraft.yellow_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 454, + "name": "lime_stained_glass", + "translation_key": "block.minecraft.lime_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 455, + "name": "pink_stained_glass", + "translation_key": "block.minecraft.pink_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 456, + "name": "gray_stained_glass", + "translation_key": "block.minecraft.gray_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 457, + "name": "light_gray_stained_glass", + "translation_key": "block.minecraft.light_gray_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 458, + "name": "cyan_stained_glass", + "translation_key": "block.minecraft.cyan_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 459, + "name": "purple_stained_glass", + "translation_key": "block.minecraft.purple_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 460, + "name": "blue_stained_glass", + "translation_key": "block.minecraft.blue_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 461, + "name": "brown_stained_glass", + "translation_key": "block.minecraft.brown_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 462, + "name": "green_stained_glass", + "translation_key": "block.minecraft.green_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 463, + "name": "red_stained_glass", + "translation_key": "block.minecraft.red_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 464, + "name": "black_stained_glass", + "translation_key": "block.minecraft.black_stained_glass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 465, + "name": "white_stained_glass_pane", + "translation_key": "block.minecraft.white_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 466, + "name": "orange_stained_glass_pane", + "translation_key": "block.minecraft.orange_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 467, + "name": "magenta_stained_glass_pane", + "translation_key": "block.minecraft.magenta_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 468, + "name": "light_blue_stained_glass_pane", + "translation_key": "block.minecraft.light_blue_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 469, + "name": "yellow_stained_glass_pane", + "translation_key": "block.minecraft.yellow_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 470, + "name": "lime_stained_glass_pane", + "translation_key": "block.minecraft.lime_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 471, + "name": "pink_stained_glass_pane", + "translation_key": "block.minecraft.pink_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 472, + "name": "gray_stained_glass_pane", + "translation_key": "block.minecraft.gray_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 473, + "name": "light_gray_stained_glass_pane", + "translation_key": "block.minecraft.light_gray_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 474, + "name": "cyan_stained_glass_pane", + "translation_key": "block.minecraft.cyan_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 475, + "name": "purple_stained_glass_pane", + "translation_key": "block.minecraft.purple_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 476, + "name": "blue_stained_glass_pane", + "translation_key": "block.minecraft.blue_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 477, + "name": "brown_stained_glass_pane", + "translation_key": "block.minecraft.brown_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 478, + "name": "green_stained_glass_pane", + "translation_key": "block.minecraft.green_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 479, + "name": "red_stained_glass_pane", + "translation_key": "block.minecraft.red_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 480, + "name": "black_stained_glass_pane", + "translation_key": "block.minecraft.black_stained_glass_pane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 481, + "name": "prismarine", + "translation_key": "block.minecraft.prismarine", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 482, + "name": "prismarine_bricks", + "translation_key": "block.minecraft.prismarine_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 483, + "name": "dark_prismarine", + "translation_key": "block.minecraft.dark_prismarine", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 484, + "name": "prismarine_stairs", + "translation_key": "block.minecraft.prismarine_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 485, + "name": "prismarine_brick_stairs", + "translation_key": "block.minecraft.prismarine_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 486, + "name": "dark_prismarine_stairs", + "translation_key": "block.minecraft.dark_prismarine_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 487, + "name": "sea_lantern", + "translation_key": "block.minecraft.sea_lantern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 488, + "name": "red_sandstone", + "translation_key": "block.minecraft.red_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 489, + "name": "chiseled_red_sandstone", + "translation_key": "block.minecraft.chiseled_red_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 490, + "name": "cut_red_sandstone", + "translation_key": "block.minecraft.cut_red_sandstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 491, + "name": "red_sandstone_stairs", + "translation_key": "block.minecraft.red_sandstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 492, + "name": "repeating_command_block", + "translation_key": "block.minecraft.repeating_command_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 493, + "name": "chain_command_block", + "translation_key": "block.minecraft.chain_command_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 494, + "name": "magma_block", + "translation_key": "block.minecraft.magma_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 495, + "name": "nether_wart_block", + "translation_key": "block.minecraft.nether_wart_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 496, + "name": "warped_wart_block", + "translation_key": "block.minecraft.warped_wart_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 497, + "name": "red_nether_bricks", + "translation_key": "block.minecraft.red_nether_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 498, + "name": "bone_block", + "translation_key": "block.minecraft.bone_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 499, + "name": "structure_void", + "translation_key": "block.minecraft.structure_void", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 500, + "name": "shulker_box", + "translation_key": "block.minecraft.shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 501, + "name": "white_shulker_box", + "translation_key": "block.minecraft.white_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 502, + "name": "orange_shulker_box", + "translation_key": "block.minecraft.orange_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 503, + "name": "magenta_shulker_box", + "translation_key": "block.minecraft.magenta_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 504, + "name": "light_blue_shulker_box", + "translation_key": "block.minecraft.light_blue_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 505, + "name": "yellow_shulker_box", + "translation_key": "block.minecraft.yellow_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 506, + "name": "lime_shulker_box", + "translation_key": "block.minecraft.lime_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 507, + "name": "pink_shulker_box", + "translation_key": "block.minecraft.pink_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 508, + "name": "gray_shulker_box", + "translation_key": "block.minecraft.gray_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 509, + "name": "light_gray_shulker_box", + "translation_key": "block.minecraft.light_gray_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 510, + "name": "cyan_shulker_box", + "translation_key": "block.minecraft.cyan_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 511, + "name": "purple_shulker_box", + "translation_key": "block.minecraft.purple_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 512, + "name": "blue_shulker_box", + "translation_key": "block.minecraft.blue_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 513, + "name": "brown_shulker_box", + "translation_key": "block.minecraft.brown_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 514, + "name": "green_shulker_box", + "translation_key": "block.minecraft.green_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 515, + "name": "red_shulker_box", + "translation_key": "block.minecraft.red_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 516, + "name": "black_shulker_box", + "translation_key": "block.minecraft.black_shulker_box", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 517, + "name": "white_glazed_terracotta", + "translation_key": "block.minecraft.white_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 518, + "name": "orange_glazed_terracotta", + "translation_key": "block.minecraft.orange_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 519, + "name": "magenta_glazed_terracotta", + "translation_key": "block.minecraft.magenta_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 520, + "name": "light_blue_glazed_terracotta", + "translation_key": "block.minecraft.light_blue_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 521, + "name": "yellow_glazed_terracotta", + "translation_key": "block.minecraft.yellow_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 522, + "name": "lime_glazed_terracotta", + "translation_key": "block.minecraft.lime_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 523, + "name": "pink_glazed_terracotta", + "translation_key": "block.minecraft.pink_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 524, + "name": "gray_glazed_terracotta", + "translation_key": "block.minecraft.gray_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 525, + "name": "light_gray_glazed_terracotta", + "translation_key": "block.minecraft.light_gray_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 526, + "name": "cyan_glazed_terracotta", + "translation_key": "block.minecraft.cyan_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 527, + "name": "purple_glazed_terracotta", + "translation_key": "block.minecraft.purple_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 528, + "name": "blue_glazed_terracotta", + "translation_key": "block.minecraft.blue_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 529, + "name": "brown_glazed_terracotta", + "translation_key": "block.minecraft.brown_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 530, + "name": "green_glazed_terracotta", + "translation_key": "block.minecraft.green_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 531, + "name": "red_glazed_terracotta", + "translation_key": "block.minecraft.red_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 532, + "name": "black_glazed_terracotta", + "translation_key": "block.minecraft.black_glazed_terracotta", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 533, + "name": "white_concrete", + "translation_key": "block.minecraft.white_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 534, + "name": "orange_concrete", + "translation_key": "block.minecraft.orange_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 535, + "name": "magenta_concrete", + "translation_key": "block.minecraft.magenta_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 536, + "name": "light_blue_concrete", + "translation_key": "block.minecraft.light_blue_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 537, + "name": "yellow_concrete", + "translation_key": "block.minecraft.yellow_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 538, + "name": "lime_concrete", + "translation_key": "block.minecraft.lime_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 539, + "name": "pink_concrete", + "translation_key": "block.minecraft.pink_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 540, + "name": "gray_concrete", + "translation_key": "block.minecraft.gray_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 541, + "name": "light_gray_concrete", + "translation_key": "block.minecraft.light_gray_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 542, + "name": "cyan_concrete", + "translation_key": "block.minecraft.cyan_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 543, + "name": "purple_concrete", + "translation_key": "block.minecraft.purple_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 544, + "name": "blue_concrete", + "translation_key": "block.minecraft.blue_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 545, + "name": "brown_concrete", + "translation_key": "block.minecraft.brown_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 546, + "name": "green_concrete", + "translation_key": "block.minecraft.green_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 547, + "name": "red_concrete", + "translation_key": "block.minecraft.red_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 548, + "name": "black_concrete", + "translation_key": "block.minecraft.black_concrete", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 549, + "name": "white_concrete_powder", + "translation_key": "block.minecraft.white_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 550, + "name": "orange_concrete_powder", + "translation_key": "block.minecraft.orange_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 551, + "name": "magenta_concrete_powder", + "translation_key": "block.minecraft.magenta_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 552, + "name": "light_blue_concrete_powder", + "translation_key": "block.minecraft.light_blue_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 553, + "name": "yellow_concrete_powder", + "translation_key": "block.minecraft.yellow_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 554, + "name": "lime_concrete_powder", + "translation_key": "block.minecraft.lime_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 555, + "name": "pink_concrete_powder", + "translation_key": "block.minecraft.pink_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 556, + "name": "gray_concrete_powder", + "translation_key": "block.minecraft.gray_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 557, + "name": "light_gray_concrete_powder", + "translation_key": "block.minecraft.light_gray_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 558, + "name": "cyan_concrete_powder", + "translation_key": "block.minecraft.cyan_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 559, + "name": "purple_concrete_powder", + "translation_key": "block.minecraft.purple_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 560, + "name": "blue_concrete_powder", + "translation_key": "block.minecraft.blue_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 561, + "name": "brown_concrete_powder", + "translation_key": "block.minecraft.brown_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 562, + "name": "green_concrete_powder", + "translation_key": "block.minecraft.green_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 563, + "name": "red_concrete_powder", + "translation_key": "block.minecraft.red_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 564, + "name": "black_concrete_powder", + "translation_key": "block.minecraft.black_concrete_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 565, + "name": "turtle_egg", + "translation_key": "block.minecraft.turtle_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 566, + "name": "sniffer_egg", + "translation_key": "block.minecraft.sniffer_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 567, + "name": "dead_tube_coral_block", + "translation_key": "block.minecraft.dead_tube_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 568, + "name": "dead_brain_coral_block", + "translation_key": "block.minecraft.dead_brain_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 569, + "name": "dead_bubble_coral_block", + "translation_key": "block.minecraft.dead_bubble_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 570, + "name": "dead_fire_coral_block", + "translation_key": "block.minecraft.dead_fire_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 571, + "name": "dead_horn_coral_block", + "translation_key": "block.minecraft.dead_horn_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 572, + "name": "tube_coral_block", + "translation_key": "block.minecraft.tube_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 573, + "name": "brain_coral_block", + "translation_key": "block.minecraft.brain_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 574, + "name": "bubble_coral_block", + "translation_key": "block.minecraft.bubble_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 575, + "name": "fire_coral_block", + "translation_key": "block.minecraft.fire_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 576, + "name": "horn_coral_block", + "translation_key": "block.minecraft.horn_coral_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 577, + "name": "tube_coral", + "translation_key": "block.minecraft.tube_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 578, + "name": "brain_coral", + "translation_key": "block.minecraft.brain_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 579, + "name": "bubble_coral", + "translation_key": "block.minecraft.bubble_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 580, + "name": "fire_coral", + "translation_key": "block.minecraft.fire_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 581, + "name": "horn_coral", + "translation_key": "block.minecraft.horn_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 582, + "name": "dead_brain_coral", + "translation_key": "block.minecraft.dead_brain_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 583, + "name": "dead_bubble_coral", + "translation_key": "block.minecraft.dead_bubble_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 584, + "name": "dead_fire_coral", + "translation_key": "block.minecraft.dead_fire_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 585, + "name": "dead_horn_coral", + "translation_key": "block.minecraft.dead_horn_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 586, + "name": "dead_tube_coral", + "translation_key": "block.minecraft.dead_tube_coral", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 587, + "name": "tube_coral_fan", + "translation_key": "block.minecraft.tube_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 588, + "name": "brain_coral_fan", + "translation_key": "block.minecraft.brain_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 589, + "name": "bubble_coral_fan", + "translation_key": "block.minecraft.bubble_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 590, + "name": "fire_coral_fan", + "translation_key": "block.minecraft.fire_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 591, + "name": "horn_coral_fan", + "translation_key": "block.minecraft.horn_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 592, + "name": "dead_tube_coral_fan", + "translation_key": "block.minecraft.dead_tube_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 593, + "name": "dead_brain_coral_fan", + "translation_key": "block.minecraft.dead_brain_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 594, + "name": "dead_bubble_coral_fan", + "translation_key": "block.minecraft.dead_bubble_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 595, + "name": "dead_fire_coral_fan", + "translation_key": "block.minecraft.dead_fire_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 596, + "name": "dead_horn_coral_fan", + "translation_key": "block.minecraft.dead_horn_coral_fan", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 597, + "name": "blue_ice", + "translation_key": "block.minecraft.blue_ice", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 598, + "name": "conduit", + "translation_key": "block.minecraft.conduit", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 599, + "name": "polished_granite_stairs", + "translation_key": "block.minecraft.polished_granite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 600, + "name": "smooth_red_sandstone_stairs", + "translation_key": "block.minecraft.smooth_red_sandstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 601, + "name": "mossy_stone_brick_stairs", + "translation_key": "block.minecraft.mossy_stone_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 602, + "name": "polished_diorite_stairs", + "translation_key": "block.minecraft.polished_diorite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 603, + "name": "mossy_cobblestone_stairs", + "translation_key": "block.minecraft.mossy_cobblestone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 604, + "name": "end_stone_brick_stairs", + "translation_key": "block.minecraft.end_stone_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 605, + "name": "stone_stairs", + "translation_key": "block.minecraft.stone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 606, + "name": "smooth_sandstone_stairs", + "translation_key": "block.minecraft.smooth_sandstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 607, + "name": "smooth_quartz_stairs", + "translation_key": "block.minecraft.smooth_quartz_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 608, + "name": "granite_stairs", + "translation_key": "block.minecraft.granite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 609, + "name": "andesite_stairs", + "translation_key": "block.minecraft.andesite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 610, + "name": "red_nether_brick_stairs", + "translation_key": "block.minecraft.red_nether_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 611, + "name": "polished_andesite_stairs", + "translation_key": "block.minecraft.polished_andesite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 612, + "name": "diorite_stairs", + "translation_key": "block.minecraft.diorite_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 613, + "name": "cobbled_deepslate_stairs", + "translation_key": "block.minecraft.cobbled_deepslate_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 614, + "name": "polished_deepslate_stairs", + "translation_key": "block.minecraft.polished_deepslate_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 615, + "name": "deepslate_brick_stairs", + "translation_key": "block.minecraft.deepslate_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 616, + "name": "deepslate_tile_stairs", + "translation_key": "block.minecraft.deepslate_tile_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 617, + "name": "polished_granite_slab", + "translation_key": "block.minecraft.polished_granite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 618, + "name": "smooth_red_sandstone_slab", + "translation_key": "block.minecraft.smooth_red_sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 619, + "name": "mossy_stone_brick_slab", + "translation_key": "block.minecraft.mossy_stone_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 620, + "name": "polished_diorite_slab", + "translation_key": "block.minecraft.polished_diorite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 621, + "name": "mossy_cobblestone_slab", + "translation_key": "block.minecraft.mossy_cobblestone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 622, + "name": "end_stone_brick_slab", + "translation_key": "block.minecraft.end_stone_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 623, + "name": "smooth_sandstone_slab", + "translation_key": "block.minecraft.smooth_sandstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 624, + "name": "smooth_quartz_slab", + "translation_key": "block.minecraft.smooth_quartz_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 625, + "name": "granite_slab", + "translation_key": "block.minecraft.granite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 626, + "name": "andesite_slab", + "translation_key": "block.minecraft.andesite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 627, + "name": "red_nether_brick_slab", + "translation_key": "block.minecraft.red_nether_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 628, + "name": "polished_andesite_slab", + "translation_key": "block.minecraft.polished_andesite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 629, + "name": "diorite_slab", + "translation_key": "block.minecraft.diorite_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 630, + "name": "cobbled_deepslate_slab", + "translation_key": "block.minecraft.cobbled_deepslate_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 631, + "name": "polished_deepslate_slab", + "translation_key": "block.minecraft.polished_deepslate_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 632, + "name": "deepslate_brick_slab", + "translation_key": "block.minecraft.deepslate_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 633, + "name": "deepslate_tile_slab", + "translation_key": "block.minecraft.deepslate_tile_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 634, + "name": "scaffolding", + "translation_key": "block.minecraft.scaffolding", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 635, + "name": "redstone", + "translation_key": "item.minecraft.redstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 636, + "name": "redstone_torch", + "translation_key": "block.minecraft.redstone_torch", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 637, + "name": "redstone_block", + "translation_key": "block.minecraft.redstone_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 638, + "name": "repeater", + "translation_key": "block.minecraft.repeater", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 639, + "name": "comparator", + "translation_key": "block.minecraft.comparator", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 640, + "name": "piston", + "translation_key": "block.minecraft.piston", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 641, + "name": "sticky_piston", + "translation_key": "block.minecraft.sticky_piston", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 642, + "name": "slime_block", + "translation_key": "block.minecraft.slime_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 643, + "name": "honey_block", + "translation_key": "block.minecraft.honey_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 644, + "name": "observer", + "translation_key": "block.minecraft.observer", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 645, + "name": "hopper", + "translation_key": "block.minecraft.hopper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 646, + "name": "dispenser", + "translation_key": "block.minecraft.dispenser", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 647, + "name": "dropper", + "translation_key": "block.minecraft.dropper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 648, + "name": "lectern", + "translation_key": "block.minecraft.lectern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 649, + "name": "target", + "translation_key": "block.minecraft.target", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 650, + "name": "lever", + "translation_key": "block.minecraft.lever", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 651, + "name": "lightning_rod", + "translation_key": "block.minecraft.lightning_rod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 652, + "name": "daylight_detector", + "translation_key": "block.minecraft.daylight_detector", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 653, + "name": "sculk_sensor", + "translation_key": "block.minecraft.sculk_sensor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 654, + "name": "calibrated_sculk_sensor", + "translation_key": "block.minecraft.calibrated_sculk_sensor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 655, + "name": "tripwire_hook", + "translation_key": "block.minecraft.tripwire_hook", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 656, + "name": "trapped_chest", + "translation_key": "block.minecraft.trapped_chest", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 657, + "name": "tnt", + "translation_key": "block.minecraft.tnt", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 658, + "name": "redstone_lamp", + "translation_key": "block.minecraft.redstone_lamp", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 659, + "name": "note_block", + "translation_key": "block.minecraft.note_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 660, + "name": "stone_button", + "translation_key": "block.minecraft.stone_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 661, + "name": "polished_blackstone_button", + "translation_key": "block.minecraft.polished_blackstone_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 662, + "name": "oak_button", + "translation_key": "block.minecraft.oak_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 663, + "name": "spruce_button", + "translation_key": "block.minecraft.spruce_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 664, + "name": "birch_button", + "translation_key": "block.minecraft.birch_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 665, + "name": "jungle_button", + "translation_key": "block.minecraft.jungle_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 666, + "name": "acacia_button", + "translation_key": "block.minecraft.acacia_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 667, + "name": "cherry_button", + "translation_key": "block.minecraft.cherry_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 668, + "name": "dark_oak_button", + "translation_key": "block.minecraft.dark_oak_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 669, + "name": "mangrove_button", + "translation_key": "block.minecraft.mangrove_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 670, + "name": "bamboo_button", + "translation_key": "block.minecraft.bamboo_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 671, + "name": "crimson_button", + "translation_key": "block.minecraft.crimson_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 672, + "name": "warped_button", + "translation_key": "block.minecraft.warped_button", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 673, + "name": "stone_pressure_plate", + "translation_key": "block.minecraft.stone_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 674, + "name": "polished_blackstone_pressure_plate", + "translation_key": "block.minecraft.polished_blackstone_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 675, + "name": "light_weighted_pressure_plate", + "translation_key": "block.minecraft.light_weighted_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 676, + "name": "heavy_weighted_pressure_plate", + "translation_key": "block.minecraft.heavy_weighted_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 677, + "name": "oak_pressure_plate", + "translation_key": "block.minecraft.oak_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 678, + "name": "spruce_pressure_plate", + "translation_key": "block.minecraft.spruce_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 679, + "name": "birch_pressure_plate", + "translation_key": "block.minecraft.birch_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 680, + "name": "jungle_pressure_plate", + "translation_key": "block.minecraft.jungle_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 681, + "name": "acacia_pressure_plate", + "translation_key": "block.minecraft.acacia_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 682, + "name": "cherry_pressure_plate", + "translation_key": "block.minecraft.cherry_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 683, + "name": "dark_oak_pressure_plate", + "translation_key": "block.minecraft.dark_oak_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 684, + "name": "mangrove_pressure_plate", + "translation_key": "block.minecraft.mangrove_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 685, + "name": "bamboo_pressure_plate", + "translation_key": "block.minecraft.bamboo_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 686, + "name": "crimson_pressure_plate", + "translation_key": "block.minecraft.crimson_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 687, + "name": "warped_pressure_plate", + "translation_key": "block.minecraft.warped_pressure_plate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 688, + "name": "iron_door", + "translation_key": "block.minecraft.iron_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 689, + "name": "oak_door", + "translation_key": "block.minecraft.oak_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 690, + "name": "spruce_door", + "translation_key": "block.minecraft.spruce_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 691, + "name": "birch_door", + "translation_key": "block.minecraft.birch_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 692, + "name": "jungle_door", + "translation_key": "block.minecraft.jungle_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 693, + "name": "acacia_door", + "translation_key": "block.minecraft.acacia_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 694, + "name": "cherry_door", + "translation_key": "block.minecraft.cherry_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 695, + "name": "dark_oak_door", + "translation_key": "block.minecraft.dark_oak_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 696, + "name": "mangrove_door", + "translation_key": "block.minecraft.mangrove_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 697, + "name": "bamboo_door", + "translation_key": "block.minecraft.bamboo_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 698, + "name": "crimson_door", + "translation_key": "block.minecraft.crimson_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 699, + "name": "warped_door", + "translation_key": "block.minecraft.warped_door", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 700, + "name": "iron_trapdoor", + "translation_key": "block.minecraft.iron_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 701, + "name": "oak_trapdoor", + "translation_key": "block.minecraft.oak_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 702, + "name": "spruce_trapdoor", + "translation_key": "block.minecraft.spruce_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 703, + "name": "birch_trapdoor", + "translation_key": "block.minecraft.birch_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 704, + "name": "jungle_trapdoor", + "translation_key": "block.minecraft.jungle_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 705, + "name": "acacia_trapdoor", + "translation_key": "block.minecraft.acacia_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 706, + "name": "cherry_trapdoor", + "translation_key": "block.minecraft.cherry_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 707, + "name": "dark_oak_trapdoor", + "translation_key": "block.minecraft.dark_oak_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 708, + "name": "mangrove_trapdoor", + "translation_key": "block.minecraft.mangrove_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 709, + "name": "bamboo_trapdoor", + "translation_key": "block.minecraft.bamboo_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 710, + "name": "crimson_trapdoor", + "translation_key": "block.minecraft.crimson_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 711, + "name": "warped_trapdoor", + "translation_key": "block.minecraft.warped_trapdoor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 712, + "name": "oak_fence_gate", + "translation_key": "block.minecraft.oak_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 713, + "name": "spruce_fence_gate", + "translation_key": "block.minecraft.spruce_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 714, + "name": "birch_fence_gate", + "translation_key": "block.minecraft.birch_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 715, + "name": "jungle_fence_gate", + "translation_key": "block.minecraft.jungle_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 716, + "name": "acacia_fence_gate", + "translation_key": "block.minecraft.acacia_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 717, + "name": "cherry_fence_gate", + "translation_key": "block.minecraft.cherry_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 718, + "name": "dark_oak_fence_gate", + "translation_key": "block.minecraft.dark_oak_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 719, + "name": "mangrove_fence_gate", + "translation_key": "block.minecraft.mangrove_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 720, + "name": "bamboo_fence_gate", + "translation_key": "block.minecraft.bamboo_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 721, + "name": "crimson_fence_gate", + "translation_key": "block.minecraft.crimson_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 722, + "name": "warped_fence_gate", + "translation_key": "block.minecraft.warped_fence_gate", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 723, + "name": "powered_rail", + "translation_key": "block.minecraft.powered_rail", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 724, + "name": "detector_rail", + "translation_key": "block.minecraft.detector_rail", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 725, + "name": "rail", + "translation_key": "block.minecraft.rail", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 726, + "name": "activator_rail", + "translation_key": "block.minecraft.activator_rail", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 727, + "name": "saddle", + "translation_key": "item.minecraft.saddle", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 728, + "name": "minecart", + "translation_key": "item.minecraft.minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 729, + "name": "chest_minecart", + "translation_key": "item.minecraft.chest_minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 730, + "name": "furnace_minecart", + "translation_key": "item.minecraft.furnace_minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 731, + "name": "tnt_minecart", + "translation_key": "item.minecraft.tnt_minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 732, + "name": "hopper_minecart", + "translation_key": "item.minecraft.hopper_minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 733, + "name": "carrot_on_a_stick", + "translation_key": "item.minecraft.carrot_on_a_stick", + "max_stack": 1, + "max_durability": 25, + "enchantability": 0, + "fireproof": false + }, + { + "id": 734, + "name": "warped_fungus_on_a_stick", + "translation_key": "item.minecraft.warped_fungus_on_a_stick", + "max_stack": 1, + "max_durability": 100, + "enchantability": 0, + "fireproof": false + }, + { + "id": 735, + "name": "elytra", + "translation_key": "item.minecraft.elytra", + "max_stack": 1, + "max_durability": 432, + "enchantability": 0, + "fireproof": false + }, + { + "id": 736, + "name": "oak_boat", + "translation_key": "item.minecraft.oak_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 737, + "name": "oak_chest_boat", + "translation_key": "item.minecraft.oak_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 738, + "name": "spruce_boat", + "translation_key": "item.minecraft.spruce_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 739, + "name": "spruce_chest_boat", + "translation_key": "item.minecraft.spruce_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 740, + "name": "birch_boat", + "translation_key": "item.minecraft.birch_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 741, + "name": "birch_chest_boat", + "translation_key": "item.minecraft.birch_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 742, + "name": "jungle_boat", + "translation_key": "item.minecraft.jungle_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 743, + "name": "jungle_chest_boat", + "translation_key": "item.minecraft.jungle_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 744, + "name": "acacia_boat", + "translation_key": "item.minecraft.acacia_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 745, + "name": "acacia_chest_boat", + "translation_key": "item.minecraft.acacia_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 746, + "name": "cherry_boat", + "translation_key": "item.minecraft.cherry_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 747, + "name": "cherry_chest_boat", + "translation_key": "item.minecraft.cherry_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 748, + "name": "dark_oak_boat", + "translation_key": "item.minecraft.dark_oak_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 749, + "name": "dark_oak_chest_boat", + "translation_key": "item.minecraft.dark_oak_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 750, + "name": "mangrove_boat", + "translation_key": "item.minecraft.mangrove_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 751, + "name": "mangrove_chest_boat", + "translation_key": "item.minecraft.mangrove_chest_boat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 752, + "name": "bamboo_raft", + "translation_key": "item.minecraft.bamboo_raft", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 753, + "name": "bamboo_chest_raft", + "translation_key": "item.minecraft.bamboo_chest_raft", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 754, + "name": "structure_block", + "translation_key": "block.minecraft.structure_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 755, + "name": "jigsaw", + "translation_key": "block.minecraft.jigsaw", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 756, + "name": "turtle_helmet", + "translation_key": "item.minecraft.turtle_helmet", + "max_stack": 1, + "max_durability": 275, + "enchantability": 9, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 757, + "name": "scute", + "translation_key": "item.minecraft.scute", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 758, + "name": "flint_and_steel", + "translation_key": "item.minecraft.flint_and_steel", + "max_stack": 1, + "max_durability": 64, + "enchantability": 0, + "fireproof": false + }, + { + "id": 759, + "name": "apple", + "translation_key": "item.minecraft.apple", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 4, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 760, + "name": "bow", + "translation_key": "item.minecraft.bow", + "max_stack": 1, + "max_durability": 384, + "enchantability": 1, + "fireproof": false + }, + { + "id": 761, + "name": "arrow", + "translation_key": "item.minecraft.arrow", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 762, + "name": "coal", + "translation_key": "item.minecraft.coal", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 763, + "name": "charcoal", + "translation_key": "item.minecraft.charcoal", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 764, + "name": "diamond", + "translation_key": "item.minecraft.diamond", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 765, + "name": "emerald", + "translation_key": "item.minecraft.emerald", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 766, + "name": "lapis_lazuli", + "translation_key": "item.minecraft.lapis_lazuli", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 767, + "name": "quartz", + "translation_key": "item.minecraft.quartz", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 768, + "name": "amethyst_shard", + "translation_key": "item.minecraft.amethyst_shard", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 769, + "name": "raw_iron", + "translation_key": "item.minecraft.raw_iron", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 770, + "name": "iron_ingot", + "translation_key": "item.minecraft.iron_ingot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 771, + "name": "raw_copper", + "translation_key": "item.minecraft.raw_copper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 772, + "name": "copper_ingot", + "translation_key": "item.minecraft.copper_ingot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 773, + "name": "raw_gold", + "translation_key": "item.minecraft.raw_gold", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 774, + "name": "gold_ingot", + "translation_key": "item.minecraft.gold_ingot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 775, + "name": "netherite_ingot", + "translation_key": "item.minecraft.netherite_ingot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": true + }, + { + "id": 776, + "name": "netherite_scrap", + "translation_key": "item.minecraft.netherite_scrap", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": true + }, + { + "id": 777, + "name": "wooden_sword", + "translation_key": "item.minecraft.wooden_sword", + "max_stack": 1, + "max_durability": 59, + "enchantability": 15, + "fireproof": false + }, + { + "id": 778, + "name": "wooden_shovel", + "translation_key": "item.minecraft.wooden_shovel", + "max_stack": 1, + "max_durability": 59, + "enchantability": 15, + "fireproof": false + }, + { + "id": 779, + "name": "wooden_pickaxe", + "translation_key": "item.minecraft.wooden_pickaxe", + "max_stack": 1, + "max_durability": 59, + "enchantability": 15, + "fireproof": false + }, + { + "id": 780, + "name": "wooden_axe", + "translation_key": "item.minecraft.wooden_axe", + "max_stack": 1, + "max_durability": 59, + "enchantability": 15, + "fireproof": false + }, + { + "id": 781, + "name": "wooden_hoe", + "translation_key": "item.minecraft.wooden_hoe", + "max_stack": 1, + "max_durability": 59, + "enchantability": 15, + "fireproof": false + }, + { + "id": 782, + "name": "stone_sword", + "translation_key": "item.minecraft.stone_sword", + "max_stack": 1, + "max_durability": 131, + "enchantability": 5, + "fireproof": false + }, + { + "id": 783, + "name": "stone_shovel", + "translation_key": "item.minecraft.stone_shovel", + "max_stack": 1, + "max_durability": 131, + "enchantability": 5, + "fireproof": false + }, + { + "id": 784, + "name": "stone_pickaxe", + "translation_key": "item.minecraft.stone_pickaxe", + "max_stack": 1, + "max_durability": 131, + "enchantability": 5, + "fireproof": false + }, + { + "id": 785, + "name": "stone_axe", + "translation_key": "item.minecraft.stone_axe", + "max_stack": 1, + "max_durability": 131, + "enchantability": 5, + "fireproof": false + }, + { + "id": 786, + "name": "stone_hoe", + "translation_key": "item.minecraft.stone_hoe", + "max_stack": 1, + "max_durability": 131, + "enchantability": 5, + "fireproof": false + }, + { + "id": 787, + "name": "golden_sword", + "translation_key": "item.minecraft.golden_sword", + "max_stack": 1, + "max_durability": 32, + "enchantability": 22, + "fireproof": false + }, + { + "id": 788, + "name": "golden_shovel", + "translation_key": "item.minecraft.golden_shovel", + "max_stack": 1, + "max_durability": 32, + "enchantability": 22, + "fireproof": false + }, + { + "id": 789, + "name": "golden_pickaxe", + "translation_key": "item.minecraft.golden_pickaxe", + "max_stack": 1, + "max_durability": 32, + "enchantability": 22, + "fireproof": false + }, + { + "id": 790, + "name": "golden_axe", + "translation_key": "item.minecraft.golden_axe", + "max_stack": 1, + "max_durability": 32, + "enchantability": 22, + "fireproof": false + }, + { + "id": 791, + "name": "golden_hoe", + "translation_key": "item.minecraft.golden_hoe", + "max_stack": 1, + "max_durability": 32, + "enchantability": 22, + "fireproof": false + }, + { + "id": 792, + "name": "iron_sword", + "translation_key": "item.minecraft.iron_sword", + "max_stack": 1, + "max_durability": 250, + "enchantability": 14, + "fireproof": false + }, + { + "id": 793, + "name": "iron_shovel", + "translation_key": "item.minecraft.iron_shovel", + "max_stack": 1, + "max_durability": 250, + "enchantability": 14, + "fireproof": false + }, + { + "id": 794, + "name": "iron_pickaxe", + "translation_key": "item.minecraft.iron_pickaxe", + "max_stack": 1, + "max_durability": 250, + "enchantability": 14, + "fireproof": false + }, + { + "id": 795, + "name": "iron_axe", + "translation_key": "item.minecraft.iron_axe", + "max_stack": 1, + "max_durability": 250, + "enchantability": 14, + "fireproof": false + }, + { + "id": 796, + "name": "iron_hoe", + "translation_key": "item.minecraft.iron_hoe", + "max_stack": 1, + "max_durability": 250, + "enchantability": 14, + "fireproof": false + }, + { + "id": 797, + "name": "diamond_sword", + "translation_key": "item.minecraft.diamond_sword", + "max_stack": 1, + "max_durability": 1561, + "enchantability": 10, + "fireproof": false + }, + { + "id": 798, + "name": "diamond_shovel", + "translation_key": "item.minecraft.diamond_shovel", + "max_stack": 1, + "max_durability": 1561, + "enchantability": 10, + "fireproof": false + }, + { + "id": 799, + "name": "diamond_pickaxe", + "translation_key": "item.minecraft.diamond_pickaxe", + "max_stack": 1, + "max_durability": 1561, + "enchantability": 10, + "fireproof": false + }, + { + "id": 800, + "name": "diamond_axe", + "translation_key": "item.minecraft.diamond_axe", + "max_stack": 1, + "max_durability": 1561, + "enchantability": 10, + "fireproof": false + }, + { + "id": 801, + "name": "diamond_hoe", + "translation_key": "item.minecraft.diamond_hoe", + "max_stack": 1, + "max_durability": 1561, + "enchantability": 10, + "fireproof": false + }, + { + "id": 802, + "name": "netherite_sword", + "translation_key": "item.minecraft.netherite_sword", + "max_stack": 1, + "max_durability": 2031, + "enchantability": 15, + "fireproof": true + }, + { + "id": 803, + "name": "netherite_shovel", + "translation_key": "item.minecraft.netherite_shovel", + "max_stack": 1, + "max_durability": 2031, + "enchantability": 15, + "fireproof": true + }, + { + "id": 804, + "name": "netherite_pickaxe", + "translation_key": "item.minecraft.netherite_pickaxe", + "max_stack": 1, + "max_durability": 2031, + "enchantability": 15, + "fireproof": true + }, + { + "id": 805, + "name": "netherite_axe", + "translation_key": "item.minecraft.netherite_axe", + "max_stack": 1, + "max_durability": 2031, + "enchantability": 15, + "fireproof": true + }, + { + "id": 806, + "name": "netherite_hoe", + "translation_key": "item.minecraft.netherite_hoe", + "max_stack": 1, + "max_durability": 2031, + "enchantability": 15, + "fireproof": true + }, + { + "id": 807, + "name": "stick", + "translation_key": "item.minecraft.stick", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 808, + "name": "bowl", + "translation_key": "item.minecraft.bowl", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 809, + "name": "mushroom_stew", + "translation_key": "item.minecraft.mushroom_stew", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 810, + "name": "string", + "translation_key": "item.minecraft.string", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 811, + "name": "feather", + "translation_key": "item.minecraft.feather", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 812, + "name": "gunpowder", + "translation_key": "item.minecraft.gunpowder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 813, + "name": "wheat_seeds", + "translation_key": "item.minecraft.wheat_seeds", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 814, + "name": "wheat", + "translation_key": "item.minecraft.wheat", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 815, + "name": "bread", + "translation_key": "item.minecraft.bread", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 5, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 816, + "name": "leather_helmet", + "translation_key": "item.minecraft.leather_helmet", + "max_stack": 1, + "max_durability": 55, + "enchantability": 15, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 817, + "name": "leather_chestplate", + "translation_key": "item.minecraft.leather_chestplate", + "max_stack": 1, + "max_durability": 80, + "enchantability": 15, + "fireproof": false, + "equippable": "chestplate" + }, + { + "id": 818, + "name": "leather_leggings", + "translation_key": "item.minecraft.leather_leggings", + "max_stack": 1, + "max_durability": 75, + "enchantability": 15, + "fireproof": false, + "equippable": "leggings" + }, + { + "id": 819, + "name": "leather_boots", + "translation_key": "item.minecraft.leather_boots", + "max_stack": 1, + "max_durability": 65, + "enchantability": 15, + "fireproof": false, + "equippable": "boots" + }, + { + "id": 820, + "name": "chainmail_helmet", + "translation_key": "item.minecraft.chainmail_helmet", + "max_stack": 1, + "max_durability": 165, + "enchantability": 12, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 821, + "name": "chainmail_chestplate", + "translation_key": "item.minecraft.chainmail_chestplate", + "max_stack": 1, + "max_durability": 240, + "enchantability": 12, + "fireproof": false, + "equippable": "chestplate" + }, + { + "id": 822, + "name": "chainmail_leggings", + "translation_key": "item.minecraft.chainmail_leggings", + "max_stack": 1, + "max_durability": 225, + "enchantability": 12, + "fireproof": false, + "equippable": "leggings" + }, + { + "id": 823, + "name": "chainmail_boots", + "translation_key": "item.minecraft.chainmail_boots", + "max_stack": 1, + "max_durability": 195, + "enchantability": 12, + "fireproof": false, + "equippable": "boots" + }, + { + "id": 824, + "name": "iron_helmet", + "translation_key": "item.minecraft.iron_helmet", + "max_stack": 1, + "max_durability": 165, + "enchantability": 9, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 825, + "name": "iron_chestplate", + "translation_key": "item.minecraft.iron_chestplate", + "max_stack": 1, + "max_durability": 240, + "enchantability": 9, + "fireproof": false, + "equippable": "chestplate" + }, + { + "id": 826, + "name": "iron_leggings", + "translation_key": "item.minecraft.iron_leggings", + "max_stack": 1, + "max_durability": 225, + "enchantability": 9, + "fireproof": false, + "equippable": "leggings" + }, + { + "id": 827, + "name": "iron_boots", + "translation_key": "item.minecraft.iron_boots", + "max_stack": 1, + "max_durability": 195, + "enchantability": 9, + "fireproof": false, + "equippable": "boots" + }, + { + "id": 828, + "name": "diamond_helmet", + "translation_key": "item.minecraft.diamond_helmet", + "max_stack": 1, + "max_durability": 363, + "enchantability": 10, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 829, + "name": "diamond_chestplate", + "translation_key": "item.minecraft.diamond_chestplate", + "max_stack": 1, + "max_durability": 528, + "enchantability": 10, + "fireproof": false, + "equippable": "chestplate" + }, + { + "id": 830, + "name": "diamond_leggings", + "translation_key": "item.minecraft.diamond_leggings", + "max_stack": 1, + "max_durability": 495, + "enchantability": 10, + "fireproof": false, + "equippable": "leggings" + }, + { + "id": 831, + "name": "diamond_boots", + "translation_key": "item.minecraft.diamond_boots", + "max_stack": 1, + "max_durability": 429, + "enchantability": 10, + "fireproof": false, + "equippable": "boots" + }, + { + "id": 832, + "name": "golden_helmet", + "translation_key": "item.minecraft.golden_helmet", + "max_stack": 1, + "max_durability": 77, + "enchantability": 25, + "fireproof": false, + "equippable": "helmet" + }, + { + "id": 833, + "name": "golden_chestplate", + "translation_key": "item.minecraft.golden_chestplate", + "max_stack": 1, + "max_durability": 112, + "enchantability": 25, + "fireproof": false, + "equippable": "chestplate" + }, + { + "id": 834, + "name": "golden_leggings", + "translation_key": "item.minecraft.golden_leggings", + "max_stack": 1, + "max_durability": 105, + "enchantability": 25, + "fireproof": false, + "equippable": "leggings" + }, + { + "id": 835, + "name": "golden_boots", + "translation_key": "item.minecraft.golden_boots", + "max_stack": 1, + "max_durability": 91, + "enchantability": 25, + "fireproof": false, + "equippable": "boots" + }, + { + "id": 836, + "name": "netherite_helmet", + "translation_key": "item.minecraft.netherite_helmet", + "max_stack": 1, + "max_durability": 407, + "enchantability": 15, + "fireproof": true, + "equippable": "helmet" + }, + { + "id": 837, + "name": "netherite_chestplate", + "translation_key": "item.minecraft.netherite_chestplate", + "max_stack": 1, + "max_durability": 592, + "enchantability": 15, + "fireproof": true, + "equippable": "chestplate" + }, + { + "id": 838, + "name": "netherite_leggings", + "translation_key": "item.minecraft.netherite_leggings", + "max_stack": 1, + "max_durability": 555, + "enchantability": 15, + "fireproof": true, + "equippable": "leggings" + }, + { + "id": 839, + "name": "netherite_boots", + "translation_key": "item.minecraft.netherite_boots", + "max_stack": 1, + "max_durability": 481, + "enchantability": 15, + "fireproof": true, + "equippable": "boots" + }, + { + "id": 840, + "name": "flint", + "translation_key": "item.minecraft.flint", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 841, + "name": "porkchop", + "translation_key": "item.minecraft.porkchop", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 3, + "saturation": 0.3, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 842, + "name": "cooked_porkchop", + "translation_key": "item.minecraft.cooked_porkchop", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 8, + "saturation": 0.8, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 843, + "name": "painting", + "translation_key": "item.minecraft.painting", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 844, + "name": "golden_apple", + "translation_key": "item.minecraft.golden_apple", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 4, + "saturation": 1.2, + "always_edible": true, + "meat": false, + "snack": false, + "effects": [ + { + "chance": 1.0, + "translation_key": "effect.minecraft.regeneration" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.absorption" + } + ] + } + }, + { + "id": 845, + "name": "enchanted_golden_apple", + "translation_key": "item.minecraft.enchanted_golden_apple", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 4, + "saturation": 1.2, + "always_edible": true, + "meat": false, + "snack": false, + "effects": [ + { + "chance": 1.0, + "translation_key": "effect.minecraft.regeneration" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.resistance" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.fire_resistance" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.absorption" + } + ] + } + }, + { + "id": 846, + "name": "oak_sign", + "translation_key": "block.minecraft.oak_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 847, + "name": "spruce_sign", + "translation_key": "block.minecraft.spruce_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 848, + "name": "birch_sign", + "translation_key": "block.minecraft.birch_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 849, + "name": "jungle_sign", + "translation_key": "block.minecraft.jungle_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 850, + "name": "acacia_sign", + "translation_key": "block.minecraft.acacia_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 851, + "name": "cherry_sign", + "translation_key": "block.minecraft.cherry_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 852, + "name": "dark_oak_sign", + "translation_key": "block.minecraft.dark_oak_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 853, + "name": "mangrove_sign", + "translation_key": "block.minecraft.mangrove_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 854, + "name": "bamboo_sign", + "translation_key": "block.minecraft.bamboo_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 855, + "name": "crimson_sign", + "translation_key": "block.minecraft.crimson_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 856, + "name": "warped_sign", + "translation_key": "block.minecraft.warped_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 857, + "name": "oak_hanging_sign", + "translation_key": "block.minecraft.oak_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 858, + "name": "spruce_hanging_sign", + "translation_key": "block.minecraft.spruce_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 859, + "name": "birch_hanging_sign", + "translation_key": "block.minecraft.birch_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 860, + "name": "jungle_hanging_sign", + "translation_key": "block.minecraft.jungle_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 861, + "name": "acacia_hanging_sign", + "translation_key": "block.minecraft.acacia_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 862, + "name": "cherry_hanging_sign", + "translation_key": "block.minecraft.cherry_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 863, + "name": "dark_oak_hanging_sign", + "translation_key": "block.minecraft.dark_oak_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 864, + "name": "mangrove_hanging_sign", + "translation_key": "block.minecraft.mangrove_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 865, + "name": "bamboo_hanging_sign", + "translation_key": "block.minecraft.bamboo_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 866, + "name": "crimson_hanging_sign", + "translation_key": "block.minecraft.crimson_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 867, + "name": "warped_hanging_sign", + "translation_key": "block.minecraft.warped_hanging_sign", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 868, + "name": "bucket", + "translation_key": "item.minecraft.bucket", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 869, + "name": "water_bucket", + "translation_key": "item.minecraft.water_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 870, + "name": "lava_bucket", + "translation_key": "item.minecraft.lava_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 871, + "name": "powder_snow_bucket", + "translation_key": "item.minecraft.powder_snow_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 872, + "name": "snowball", + "translation_key": "item.minecraft.snowball", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 873, + "name": "leather", + "translation_key": "item.minecraft.leather", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 874, + "name": "milk_bucket", + "translation_key": "item.minecraft.milk_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 875, + "name": "pufferfish_bucket", + "translation_key": "item.minecraft.pufferfish_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 876, + "name": "salmon_bucket", + "translation_key": "item.minecraft.salmon_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 877, + "name": "cod_bucket", + "translation_key": "item.minecraft.cod_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 878, + "name": "tropical_fish_bucket", + "translation_key": "item.minecraft.tropical_fish_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 879, + "name": "axolotl_bucket", + "translation_key": "item.minecraft.axolotl_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 880, + "name": "tadpole_bucket", + "translation_key": "item.minecraft.tadpole_bucket", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 881, + "name": "brick", + "translation_key": "item.minecraft.brick", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 882, + "name": "clay_ball", + "translation_key": "item.minecraft.clay_ball", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 883, + "name": "dried_kelp_block", + "translation_key": "block.minecraft.dried_kelp_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 884, + "name": "paper", + "translation_key": "item.minecraft.paper", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 885, + "name": "book", + "translation_key": "item.minecraft.book", + "max_stack": 64, + "max_durability": 0, + "enchantability": 1, + "fireproof": false + }, + { + "id": 886, + "name": "slime_ball", + "translation_key": "item.minecraft.slime_ball", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 887, + "name": "egg", + "translation_key": "item.minecraft.egg", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 888, + "name": "compass", + "translation_key": "item.minecraft.compass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 889, + "name": "recovery_compass", + "translation_key": "item.minecraft.recovery_compass", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 890, + "name": "bundle", + "translation_key": "item.minecraft.bundle", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 891, + "name": "fishing_rod", + "translation_key": "item.minecraft.fishing_rod", + "max_stack": 1, + "max_durability": 64, + "enchantability": 1, + "fireproof": false + }, + { + "id": 892, + "name": "clock", + "translation_key": "item.minecraft.clock", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 893, + "name": "spyglass", + "translation_key": "item.minecraft.spyglass", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 894, + "name": "glowstone_dust", + "translation_key": "item.minecraft.glowstone_dust", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 895, + "name": "cod", + "translation_key": "item.minecraft.cod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 896, + "name": "salmon", + "translation_key": "item.minecraft.salmon", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 897, + "name": "tropical_fish", + "translation_key": "item.minecraft.tropical_fish", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 1, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 898, + "name": "pufferfish", + "translation_key": "item.minecraft.pufferfish", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 1, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [ + { + "chance": 1.0, + "translation_key": "effect.minecraft.poison" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.hunger" + }, + { + "chance": 1.0, + "translation_key": "effect.minecraft.nausea" + } + ] + } + }, + { + "id": 899, + "name": "cooked_cod", + "translation_key": "item.minecraft.cooked_cod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 5, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 900, + "name": "cooked_salmon", + "translation_key": "item.minecraft.cooked_salmon", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.8, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 901, + "name": "ink_sac", + "translation_key": "item.minecraft.ink_sac", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 902, + "name": "glow_ink_sac", + "translation_key": "item.minecraft.glow_ink_sac", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 903, + "name": "cocoa_beans", + "translation_key": "item.minecraft.cocoa_beans", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 904, + "name": "white_dye", + "translation_key": "item.minecraft.white_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 905, + "name": "orange_dye", + "translation_key": "item.minecraft.orange_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 906, + "name": "magenta_dye", + "translation_key": "item.minecraft.magenta_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 907, + "name": "light_blue_dye", + "translation_key": "item.minecraft.light_blue_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 908, + "name": "yellow_dye", + "translation_key": "item.minecraft.yellow_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 909, + "name": "lime_dye", + "translation_key": "item.minecraft.lime_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 910, + "name": "pink_dye", + "translation_key": "item.minecraft.pink_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 911, + "name": "gray_dye", + "translation_key": "item.minecraft.gray_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 912, + "name": "light_gray_dye", + "translation_key": "item.minecraft.light_gray_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 913, + "name": "cyan_dye", + "translation_key": "item.minecraft.cyan_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 914, + "name": "purple_dye", + "translation_key": "item.minecraft.purple_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 915, + "name": "blue_dye", + "translation_key": "item.minecraft.blue_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 916, + "name": "brown_dye", + "translation_key": "item.minecraft.brown_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 917, + "name": "green_dye", + "translation_key": "item.minecraft.green_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 918, + "name": "red_dye", + "translation_key": "item.minecraft.red_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 919, + "name": "black_dye", + "translation_key": "item.minecraft.black_dye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 920, + "name": "bone_meal", + "translation_key": "item.minecraft.bone_meal", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 921, + "name": "bone", + "translation_key": "item.minecraft.bone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 922, + "name": "sugar", + "translation_key": "item.minecraft.sugar", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 923, + "name": "cake", + "translation_key": "block.minecraft.cake", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 924, + "name": "white_bed", + "translation_key": "block.minecraft.white_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 925, + "name": "orange_bed", + "translation_key": "block.minecraft.orange_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 926, + "name": "magenta_bed", + "translation_key": "block.minecraft.magenta_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 927, + "name": "light_blue_bed", + "translation_key": "block.minecraft.light_blue_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 928, + "name": "yellow_bed", + "translation_key": "block.minecraft.yellow_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 929, + "name": "lime_bed", + "translation_key": "block.minecraft.lime_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 930, + "name": "pink_bed", + "translation_key": "block.minecraft.pink_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 931, + "name": "gray_bed", + "translation_key": "block.minecraft.gray_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 932, + "name": "light_gray_bed", + "translation_key": "block.minecraft.light_gray_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 933, + "name": "cyan_bed", + "translation_key": "block.minecraft.cyan_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 934, + "name": "purple_bed", + "translation_key": "block.minecraft.purple_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 935, + "name": "blue_bed", + "translation_key": "block.minecraft.blue_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 936, + "name": "brown_bed", + "translation_key": "block.minecraft.brown_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 937, + "name": "green_bed", + "translation_key": "block.minecraft.green_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 938, + "name": "red_bed", + "translation_key": "block.minecraft.red_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 939, + "name": "black_bed", + "translation_key": "block.minecraft.black_bed", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 940, + "name": "cookie", + "translation_key": "item.minecraft.cookie", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 941, + "name": "filled_map", + "translation_key": "item.minecraft.filled_map", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 942, + "name": "shears", + "translation_key": "item.minecraft.shears", + "max_stack": 1, + "max_durability": 238, + "enchantability": 0, + "fireproof": false + }, + { + "id": 943, + "name": "melon_slice", + "translation_key": "item.minecraft.melon_slice", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 944, + "name": "dried_kelp", + "translation_key": "item.minecraft.dried_kelp", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 1, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": true, + "effects": [] + } + }, + { + "id": 945, + "name": "pumpkin_seeds", + "translation_key": "item.minecraft.pumpkin_seeds", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 946, + "name": "melon_seeds", + "translation_key": "item.minecraft.melon_seeds", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 947, + "name": "beef", + "translation_key": "item.minecraft.beef", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 3, + "saturation": 0.3, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 948, + "name": "cooked_beef", + "translation_key": "item.minecraft.cooked_beef", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 8, + "saturation": 0.8, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 949, + "name": "chicken", + "translation_key": "item.minecraft.chicken", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.3, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [ + { + "chance": 0.3, + "translation_key": "effect.minecraft.hunger" + } + ] + } + }, + { + "id": 950, + "name": "cooked_chicken", + "translation_key": "item.minecraft.cooked_chicken", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.6, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 951, + "name": "rotten_flesh", + "translation_key": "item.minecraft.rotten_flesh", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 4, + "saturation": 0.1, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [ + { + "chance": 0.8, + "translation_key": "effect.minecraft.hunger" + } + ] + } + }, + { + "id": 952, + "name": "ender_pearl", + "translation_key": "item.minecraft.ender_pearl", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 953, + "name": "blaze_rod", + "translation_key": "item.minecraft.blaze_rod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 954, + "name": "ghast_tear", + "translation_key": "item.minecraft.ghast_tear", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 955, + "name": "gold_nugget", + "translation_key": "item.minecraft.gold_nugget", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 956, + "name": "nether_wart", + "translation_key": "item.minecraft.nether_wart", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 957, + "name": "potion", + "translation_key": "item.minecraft.potion", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 958, + "name": "glass_bottle", + "translation_key": "item.minecraft.glass_bottle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 959, + "name": "spider_eye", + "translation_key": "item.minecraft.spider_eye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.8, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [ + { + "chance": 1.0, + "translation_key": "effect.minecraft.poison" + } + ] + } + }, + { + "id": 960, + "name": "fermented_spider_eye", + "translation_key": "item.minecraft.fermented_spider_eye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 961, + "name": "blaze_powder", + "translation_key": "item.minecraft.blaze_powder", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 962, + "name": "magma_cream", + "translation_key": "item.minecraft.magma_cream", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 963, + "name": "brewing_stand", + "translation_key": "block.minecraft.brewing_stand", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 964, + "name": "cauldron", + "translation_key": "block.minecraft.cauldron", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 965, + "name": "ender_eye", + "translation_key": "item.minecraft.ender_eye", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 966, + "name": "glistering_melon_slice", + "translation_key": "item.minecraft.glistering_melon_slice", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 967, + "name": "allay_spawn_egg", + "translation_key": "item.minecraft.allay_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 968, + "name": "axolotl_spawn_egg", + "translation_key": "item.minecraft.axolotl_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 969, + "name": "bat_spawn_egg", + "translation_key": "item.minecraft.bat_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 970, + "name": "bee_spawn_egg", + "translation_key": "item.minecraft.bee_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 971, + "name": "blaze_spawn_egg", + "translation_key": "item.minecraft.blaze_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 972, + "name": "cat_spawn_egg", + "translation_key": "item.minecraft.cat_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 973, + "name": "camel_spawn_egg", + "translation_key": "item.minecraft.camel_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 974, + "name": "cave_spider_spawn_egg", + "translation_key": "item.minecraft.cave_spider_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 975, + "name": "chicken_spawn_egg", + "translation_key": "item.minecraft.chicken_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 976, + "name": "cod_spawn_egg", + "translation_key": "item.minecraft.cod_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 977, + "name": "cow_spawn_egg", + "translation_key": "item.minecraft.cow_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 978, + "name": "creeper_spawn_egg", + "translation_key": "item.minecraft.creeper_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 979, + "name": "dolphin_spawn_egg", + "translation_key": "item.minecraft.dolphin_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 980, + "name": "donkey_spawn_egg", + "translation_key": "item.minecraft.donkey_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 981, + "name": "drowned_spawn_egg", + "translation_key": "item.minecraft.drowned_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 982, + "name": "elder_guardian_spawn_egg", + "translation_key": "item.minecraft.elder_guardian_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 983, + "name": "ender_dragon_spawn_egg", + "translation_key": "item.minecraft.ender_dragon_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 984, + "name": "enderman_spawn_egg", + "translation_key": "item.minecraft.enderman_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 985, + "name": "endermite_spawn_egg", + "translation_key": "item.minecraft.endermite_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 986, + "name": "evoker_spawn_egg", + "translation_key": "item.minecraft.evoker_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 987, + "name": "fox_spawn_egg", + "translation_key": "item.minecraft.fox_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 988, + "name": "frog_spawn_egg", + "translation_key": "item.minecraft.frog_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 989, + "name": "ghast_spawn_egg", + "translation_key": "item.minecraft.ghast_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 990, + "name": "glow_squid_spawn_egg", + "translation_key": "item.minecraft.glow_squid_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 991, + "name": "goat_spawn_egg", + "translation_key": "item.minecraft.goat_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 992, + "name": "guardian_spawn_egg", + "translation_key": "item.minecraft.guardian_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 993, + "name": "hoglin_spawn_egg", + "translation_key": "item.minecraft.hoglin_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 994, + "name": "horse_spawn_egg", + "translation_key": "item.minecraft.horse_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 995, + "name": "husk_spawn_egg", + "translation_key": "item.minecraft.husk_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 996, + "name": "iron_golem_spawn_egg", + "translation_key": "item.minecraft.iron_golem_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 997, + "name": "llama_spawn_egg", + "translation_key": "item.minecraft.llama_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 998, + "name": "magma_cube_spawn_egg", + "translation_key": "item.minecraft.magma_cube_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 999, + "name": "mooshroom_spawn_egg", + "translation_key": "item.minecraft.mooshroom_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1000, + "name": "mule_spawn_egg", + "translation_key": "item.minecraft.mule_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1001, + "name": "ocelot_spawn_egg", + "translation_key": "item.minecraft.ocelot_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1002, + "name": "panda_spawn_egg", + "translation_key": "item.minecraft.panda_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1003, + "name": "parrot_spawn_egg", + "translation_key": "item.minecraft.parrot_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1004, + "name": "phantom_spawn_egg", + "translation_key": "item.minecraft.phantom_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1005, + "name": "pig_spawn_egg", + "translation_key": "item.minecraft.pig_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1006, + "name": "piglin_spawn_egg", + "translation_key": "item.minecraft.piglin_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1007, + "name": "piglin_brute_spawn_egg", + "translation_key": "item.minecraft.piglin_brute_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1008, + "name": "pillager_spawn_egg", + "translation_key": "item.minecraft.pillager_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1009, + "name": "polar_bear_spawn_egg", + "translation_key": "item.minecraft.polar_bear_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1010, + "name": "pufferfish_spawn_egg", + "translation_key": "item.minecraft.pufferfish_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1011, + "name": "rabbit_spawn_egg", + "translation_key": "item.minecraft.rabbit_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1012, + "name": "ravager_spawn_egg", + "translation_key": "item.minecraft.ravager_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1013, + "name": "salmon_spawn_egg", + "translation_key": "item.minecraft.salmon_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1014, + "name": "sheep_spawn_egg", + "translation_key": "item.minecraft.sheep_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1015, + "name": "shulker_spawn_egg", + "translation_key": "item.minecraft.shulker_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1016, + "name": "silverfish_spawn_egg", + "translation_key": "item.minecraft.silverfish_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1017, + "name": "skeleton_spawn_egg", + "translation_key": "item.minecraft.skeleton_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1018, + "name": "skeleton_horse_spawn_egg", + "translation_key": "item.minecraft.skeleton_horse_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1019, + "name": "slime_spawn_egg", + "translation_key": "item.minecraft.slime_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1020, + "name": "sniffer_spawn_egg", + "translation_key": "item.minecraft.sniffer_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1021, + "name": "snow_golem_spawn_egg", + "translation_key": "item.minecraft.snow_golem_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1022, + "name": "spider_spawn_egg", + "translation_key": "item.minecraft.spider_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1023, + "name": "squid_spawn_egg", + "translation_key": "item.minecraft.squid_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1024, + "name": "stray_spawn_egg", + "translation_key": "item.minecraft.stray_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1025, + "name": "strider_spawn_egg", + "translation_key": "item.minecraft.strider_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1026, + "name": "tadpole_spawn_egg", + "translation_key": "item.minecraft.tadpole_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1027, + "name": "trader_llama_spawn_egg", + "translation_key": "item.minecraft.trader_llama_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1028, + "name": "tropical_fish_spawn_egg", + "translation_key": "item.minecraft.tropical_fish_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1029, + "name": "turtle_spawn_egg", + "translation_key": "item.minecraft.turtle_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1030, + "name": "vex_spawn_egg", + "translation_key": "item.minecraft.vex_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1031, + "name": "villager_spawn_egg", + "translation_key": "item.minecraft.villager_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1032, + "name": "vindicator_spawn_egg", + "translation_key": "item.minecraft.vindicator_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1033, + "name": "wandering_trader_spawn_egg", + "translation_key": "item.minecraft.wandering_trader_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1034, + "name": "warden_spawn_egg", + "translation_key": "item.minecraft.warden_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1035, + "name": "witch_spawn_egg", + "translation_key": "item.minecraft.witch_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1036, + "name": "wither_spawn_egg", + "translation_key": "item.minecraft.wither_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1037, + "name": "wither_skeleton_spawn_egg", + "translation_key": "item.minecraft.wither_skeleton_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1038, + "name": "wolf_spawn_egg", + "translation_key": "item.minecraft.wolf_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1039, + "name": "zoglin_spawn_egg", + "translation_key": "item.minecraft.zoglin_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1040, + "name": "zombie_spawn_egg", + "translation_key": "item.minecraft.zombie_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1041, + "name": "zombie_horse_spawn_egg", + "translation_key": "item.minecraft.zombie_horse_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1042, + "name": "zombie_villager_spawn_egg", + "translation_key": "item.minecraft.zombie_villager_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1043, + "name": "zombified_piglin_spawn_egg", + "translation_key": "item.minecraft.zombified_piglin_spawn_egg", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1044, + "name": "experience_bottle", + "translation_key": "item.minecraft.experience_bottle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1045, + "name": "fire_charge", + "translation_key": "item.minecraft.fire_charge", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1046, + "name": "writable_book", + "translation_key": "item.minecraft.writable_book", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1047, + "name": "written_book", + "translation_key": "item.minecraft.written_book", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1048, + "name": "item_frame", + "translation_key": "item.minecraft.item_frame", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1049, + "name": "glow_item_frame", + "translation_key": "item.minecraft.glow_item_frame", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1050, + "name": "flower_pot", + "translation_key": "block.minecraft.flower_pot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1051, + "name": "carrot", + "translation_key": "item.minecraft.carrot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 3, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1052, + "name": "potato", + "translation_key": "item.minecraft.potato", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 1, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1053, + "name": "baked_potato", + "translation_key": "item.minecraft.baked_potato", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 5, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1054, + "name": "poisonous_potato", + "translation_key": "item.minecraft.poisonous_potato", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [ + { + "chance": 0.6, + "translation_key": "effect.minecraft.poison" + } + ] + } + }, + { + "id": 1055, + "name": "map", + "translation_key": "item.minecraft.map", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1056, + "name": "golden_carrot", + "translation_key": "item.minecraft.golden_carrot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 1.2, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1057, + "name": "skeleton_skull", + "translation_key": "block.minecraft.skeleton_skull", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1058, + "name": "wither_skeleton_skull", + "translation_key": "block.minecraft.wither_skeleton_skull", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1059, + "name": "player_head", + "translation_key": "block.minecraft.player_head", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1060, + "name": "zombie_head", + "translation_key": "block.minecraft.zombie_head", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1061, + "name": "creeper_head", + "translation_key": "block.minecraft.creeper_head", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1062, + "name": "dragon_head", + "translation_key": "block.minecraft.dragon_head", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1063, + "name": "piglin_head", + "translation_key": "block.minecraft.piglin_head", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1064, + "name": "nether_star", + "translation_key": "item.minecraft.nether_star", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1065, + "name": "pumpkin_pie", + "translation_key": "item.minecraft.pumpkin_pie", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 8, + "saturation": 0.3, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1066, + "name": "firework_rocket", + "translation_key": "item.minecraft.firework_rocket", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1067, + "name": "firework_star", + "translation_key": "item.minecraft.firework_star", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1068, + "name": "enchanted_book", + "translation_key": "item.minecraft.enchanted_book", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1069, + "name": "nether_brick", + "translation_key": "item.minecraft.nether_brick", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1070, + "name": "prismarine_shard", + "translation_key": "item.minecraft.prismarine_shard", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1071, + "name": "prismarine_crystals", + "translation_key": "item.minecraft.prismarine_crystals", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1072, + "name": "rabbit", + "translation_key": "item.minecraft.rabbit", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 3, + "saturation": 0.3, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 1073, + "name": "cooked_rabbit", + "translation_key": "item.minecraft.cooked_rabbit", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 5, + "saturation": 0.6, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 1074, + "name": "rabbit_stew", + "translation_key": "item.minecraft.rabbit_stew", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 10, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1075, + "name": "rabbit_foot", + "translation_key": "item.minecraft.rabbit_foot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1076, + "name": "rabbit_hide", + "translation_key": "item.minecraft.rabbit_hide", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1077, + "name": "armor_stand", + "translation_key": "item.minecraft.armor_stand", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1078, + "name": "iron_horse_armor", + "translation_key": "item.minecraft.iron_horse_armor", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1079, + "name": "golden_horse_armor", + "translation_key": "item.minecraft.golden_horse_armor", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1080, + "name": "diamond_horse_armor", + "translation_key": "item.minecraft.diamond_horse_armor", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1081, + "name": "leather_horse_armor", + "translation_key": "item.minecraft.leather_horse_armor", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1082, + "name": "lead", + "translation_key": "item.minecraft.lead", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1083, + "name": "name_tag", + "translation_key": "item.minecraft.name_tag", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1084, + "name": "command_block_minecart", + "translation_key": "item.minecraft.command_block_minecart", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1085, + "name": "mutton", + "translation_key": "item.minecraft.mutton", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.3, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 1086, + "name": "cooked_mutton", + "translation_key": "item.minecraft.cooked_mutton", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.8, + "always_edible": false, + "meat": true, + "snack": false, + "effects": [] + } + }, + { + "id": 1087, + "name": "white_banner", + "translation_key": "block.minecraft.white_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1088, + "name": "orange_banner", + "translation_key": "block.minecraft.orange_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1089, + "name": "magenta_banner", + "translation_key": "block.minecraft.magenta_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1090, + "name": "light_blue_banner", + "translation_key": "block.minecraft.light_blue_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1091, + "name": "yellow_banner", + "translation_key": "block.minecraft.yellow_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1092, + "name": "lime_banner", + "translation_key": "block.minecraft.lime_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1093, + "name": "pink_banner", + "translation_key": "block.minecraft.pink_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1094, + "name": "gray_banner", + "translation_key": "block.minecraft.gray_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1095, + "name": "light_gray_banner", + "translation_key": "block.minecraft.light_gray_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1096, + "name": "cyan_banner", + "translation_key": "block.minecraft.cyan_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1097, + "name": "purple_banner", + "translation_key": "block.minecraft.purple_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1098, + "name": "blue_banner", + "translation_key": "block.minecraft.blue_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1099, + "name": "brown_banner", + "translation_key": "block.minecraft.brown_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1100, + "name": "green_banner", + "translation_key": "block.minecraft.green_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1101, + "name": "red_banner", + "translation_key": "block.minecraft.red_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1102, + "name": "black_banner", + "translation_key": "block.minecraft.black_banner", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1103, + "name": "end_crystal", + "translation_key": "item.minecraft.end_crystal", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1104, + "name": "chorus_fruit", + "translation_key": "item.minecraft.chorus_fruit", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 4, + "saturation": 0.3, + "always_edible": true, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1105, + "name": "popped_chorus_fruit", + "translation_key": "item.minecraft.popped_chorus_fruit", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1106, + "name": "torchflower_seeds", + "translation_key": "item.minecraft.torchflower_seeds", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1107, + "name": "pitcher_pod", + "translation_key": "item.minecraft.pitcher_pod", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1108, + "name": "beetroot", + "translation_key": "item.minecraft.beetroot", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 1, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1109, + "name": "beetroot_seeds", + "translation_key": "item.minecraft.beetroot_seeds", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1110, + "name": "beetroot_soup", + "translation_key": "item.minecraft.beetroot_soup", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.6, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1111, + "name": "dragon_breath", + "translation_key": "item.minecraft.dragon_breath", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1112, + "name": "splash_potion", + "translation_key": "item.minecraft.splash_potion", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1113, + "name": "spectral_arrow", + "translation_key": "item.minecraft.spectral_arrow", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1114, + "name": "tipped_arrow", + "translation_key": "item.minecraft.tipped_arrow", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1115, + "name": "lingering_potion", + "translation_key": "item.minecraft.lingering_potion", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1116, + "name": "shield", + "translation_key": "item.minecraft.shield", + "max_stack": 1, + "max_durability": 336, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1117, + "name": "totem_of_undying", + "translation_key": "item.minecraft.totem_of_undying", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1118, + "name": "shulker_shell", + "translation_key": "item.minecraft.shulker_shell", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1119, + "name": "iron_nugget", + "translation_key": "item.minecraft.iron_nugget", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1120, + "name": "knowledge_book", + "translation_key": "item.minecraft.knowledge_book", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1121, + "name": "debug_stick", + "translation_key": "item.minecraft.debug_stick", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1122, + "name": "music_disc_13", + "translation_key": "item.minecraft.music_disc_13", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1123, + "name": "music_disc_cat", + "translation_key": "item.minecraft.music_disc_cat", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1124, + "name": "music_disc_blocks", + "translation_key": "item.minecraft.music_disc_blocks", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1125, + "name": "music_disc_chirp", + "translation_key": "item.minecraft.music_disc_chirp", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1126, + "name": "music_disc_far", + "translation_key": "item.minecraft.music_disc_far", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1127, + "name": "music_disc_mall", + "translation_key": "item.minecraft.music_disc_mall", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1128, + "name": "music_disc_mellohi", + "translation_key": "item.minecraft.music_disc_mellohi", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1129, + "name": "music_disc_stal", + "translation_key": "item.minecraft.music_disc_stal", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1130, + "name": "music_disc_strad", + "translation_key": "item.minecraft.music_disc_strad", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1131, + "name": "music_disc_ward", + "translation_key": "item.minecraft.music_disc_ward", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1132, + "name": "music_disc_11", + "translation_key": "item.minecraft.music_disc_11", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1133, + "name": "music_disc_wait", + "translation_key": "item.minecraft.music_disc_wait", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1134, + "name": "music_disc_otherside", + "translation_key": "item.minecraft.music_disc_otherside", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1135, + "name": "music_disc_relic", + "translation_key": "item.minecraft.music_disc_relic", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1136, + "name": "music_disc_5", + "translation_key": "item.minecraft.music_disc_5", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1137, + "name": "music_disc_pigstep", + "translation_key": "item.minecraft.music_disc_pigstep", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1138, + "name": "disc_fragment_5", + "translation_key": "item.minecraft.disc_fragment_5", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1139, + "name": "trident", + "translation_key": "item.minecraft.trident", + "max_stack": 1, + "max_durability": 250, + "enchantability": 1, + "fireproof": false + }, + { + "id": 1140, + "name": "phantom_membrane", + "translation_key": "item.minecraft.phantom_membrane", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1141, + "name": "nautilus_shell", + "translation_key": "item.minecraft.nautilus_shell", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1142, + "name": "heart_of_the_sea", + "translation_key": "item.minecraft.heart_of_the_sea", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1143, + "name": "crossbow", + "translation_key": "item.minecraft.crossbow", + "max_stack": 1, + "max_durability": 465, + "enchantability": 1, + "fireproof": false + }, + { + "id": 1144, + "name": "suspicious_stew", + "translation_key": "item.minecraft.suspicious_stew", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.6, + "always_edible": true, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1145, + "name": "loom", + "translation_key": "block.minecraft.loom", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1146, + "name": "flower_banner_pattern", + "translation_key": "item.minecraft.flower_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1147, + "name": "creeper_banner_pattern", + "translation_key": "item.minecraft.creeper_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1148, + "name": "skull_banner_pattern", + "translation_key": "item.minecraft.skull_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1149, + "name": "mojang_banner_pattern", + "translation_key": "item.minecraft.mojang_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1150, + "name": "globe_banner_pattern", + "translation_key": "item.minecraft.globe_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1151, + "name": "piglin_banner_pattern", + "translation_key": "item.minecraft.piglin_banner_pattern", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1152, + "name": "goat_horn", + "translation_key": "item.minecraft.goat_horn", + "max_stack": 1, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1153, + "name": "composter", + "translation_key": "block.minecraft.composter", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1154, + "name": "barrel", + "translation_key": "block.minecraft.barrel", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1155, + "name": "smoker", + "translation_key": "block.minecraft.smoker", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1156, + "name": "blast_furnace", + "translation_key": "block.minecraft.blast_furnace", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1157, + "name": "cartography_table", + "translation_key": "block.minecraft.cartography_table", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1158, + "name": "fletching_table", + "translation_key": "block.minecraft.fletching_table", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1159, + "name": "grindstone", + "translation_key": "block.minecraft.grindstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1160, + "name": "smithing_table", + "translation_key": "block.minecraft.smithing_table", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1161, + "name": "stonecutter", + "translation_key": "block.minecraft.stonecutter", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1162, + "name": "bell", + "translation_key": "block.minecraft.bell", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1163, + "name": "lantern", + "translation_key": "block.minecraft.lantern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1164, + "name": "soul_lantern", + "translation_key": "block.minecraft.soul_lantern", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1165, + "name": "sweet_berries", + "translation_key": "item.minecraft.sweet_berries", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1166, + "name": "glow_berries", + "translation_key": "item.minecraft.glow_berries", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 2, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1167, + "name": "campfire", + "translation_key": "block.minecraft.campfire", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1168, + "name": "soul_campfire", + "translation_key": "block.minecraft.soul_campfire", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1169, + "name": "shroomlight", + "translation_key": "block.minecraft.shroomlight", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1170, + "name": "honeycomb", + "translation_key": "item.minecraft.honeycomb", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1171, + "name": "bee_nest", + "translation_key": "block.minecraft.bee_nest", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1172, + "name": "beehive", + "translation_key": "block.minecraft.beehive", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1173, + "name": "honey_bottle", + "translation_key": "item.minecraft.honey_bottle", + "max_stack": 16, + "max_durability": 0, + "enchantability": 0, + "fireproof": false, + "food": { + "hunger": 6, + "saturation": 0.1, + "always_edible": false, + "meat": false, + "snack": false, + "effects": [] + } + }, + { + "id": 1174, + "name": "honeycomb_block", + "translation_key": "block.minecraft.honeycomb_block", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1175, + "name": "lodestone", + "translation_key": "block.minecraft.lodestone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1176, + "name": "crying_obsidian", + "translation_key": "block.minecraft.crying_obsidian", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1177, + "name": "blackstone", + "translation_key": "block.minecraft.blackstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1178, + "name": "blackstone_slab", + "translation_key": "block.minecraft.blackstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1179, + "name": "blackstone_stairs", + "translation_key": "block.minecraft.blackstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1180, + "name": "gilded_blackstone", + "translation_key": "block.minecraft.gilded_blackstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1181, + "name": "polished_blackstone", + "translation_key": "block.minecraft.polished_blackstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1182, + "name": "polished_blackstone_slab", + "translation_key": "block.minecraft.polished_blackstone_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1183, + "name": "polished_blackstone_stairs", + "translation_key": "block.minecraft.polished_blackstone_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1184, + "name": "chiseled_polished_blackstone", + "translation_key": "block.minecraft.chiseled_polished_blackstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1185, + "name": "polished_blackstone_bricks", + "translation_key": "block.minecraft.polished_blackstone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1186, + "name": "polished_blackstone_brick_slab", + "translation_key": "block.minecraft.polished_blackstone_brick_slab", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1187, + "name": "polished_blackstone_brick_stairs", + "translation_key": "block.minecraft.polished_blackstone_brick_stairs", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1188, + "name": "cracked_polished_blackstone_bricks", + "translation_key": "block.minecraft.cracked_polished_blackstone_bricks", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1189, + "name": "respawn_anchor", + "translation_key": "block.minecraft.respawn_anchor", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1190, + "name": "candle", + "translation_key": "block.minecraft.candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1191, + "name": "white_candle", + "translation_key": "block.minecraft.white_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1192, + "name": "orange_candle", + "translation_key": "block.minecraft.orange_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1193, + "name": "magenta_candle", + "translation_key": "block.minecraft.magenta_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1194, + "name": "light_blue_candle", + "translation_key": "block.minecraft.light_blue_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1195, + "name": "yellow_candle", + "translation_key": "block.minecraft.yellow_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1196, + "name": "lime_candle", + "translation_key": "block.minecraft.lime_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1197, + "name": "pink_candle", + "translation_key": "block.minecraft.pink_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1198, + "name": "gray_candle", + "translation_key": "block.minecraft.gray_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1199, + "name": "light_gray_candle", + "translation_key": "block.minecraft.light_gray_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1200, + "name": "cyan_candle", + "translation_key": "block.minecraft.cyan_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1201, + "name": "purple_candle", + "translation_key": "block.minecraft.purple_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1202, + "name": "blue_candle", + "translation_key": "block.minecraft.blue_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1203, + "name": "brown_candle", + "translation_key": "block.minecraft.brown_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1204, + "name": "green_candle", + "translation_key": "block.minecraft.green_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1205, + "name": "red_candle", + "translation_key": "block.minecraft.red_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1206, + "name": "black_candle", + "translation_key": "block.minecraft.black_candle", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1207, + "name": "small_amethyst_bud", + "translation_key": "block.minecraft.small_amethyst_bud", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1208, + "name": "medium_amethyst_bud", + "translation_key": "block.minecraft.medium_amethyst_bud", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1209, + "name": "large_amethyst_bud", + "translation_key": "block.minecraft.large_amethyst_bud", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1210, + "name": "amethyst_cluster", + "translation_key": "block.minecraft.amethyst_cluster", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1211, + "name": "pointed_dripstone", + "translation_key": "block.minecraft.pointed_dripstone", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1212, + "name": "ochre_froglight", + "translation_key": "block.minecraft.ochre_froglight", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1213, + "name": "verdant_froglight", + "translation_key": "block.minecraft.verdant_froglight", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1214, + "name": "pearlescent_froglight", + "translation_key": "block.minecraft.pearlescent_froglight", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1215, + "name": "frogspawn", + "translation_key": "block.minecraft.frogspawn", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1216, + "name": "echo_shard", + "translation_key": "item.minecraft.echo_shard", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1217, + "name": "brush", + "translation_key": "item.minecraft.brush", + "max_stack": 1, + "max_durability": 64, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1218, + "name": "netherite_upgrade_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1219, + "name": "sentry_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1220, + "name": "dune_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1221, + "name": "coast_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1222, + "name": "wild_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1223, + "name": "ward_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1224, + "name": "eye_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1225, + "name": "vex_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1226, + "name": "tide_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1227, + "name": "snout_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1228, + "name": "rib_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1229, + "name": "spire_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1230, + "name": "wayfinder_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1231, + "name": "shaper_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1232, + "name": "silence_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1233, + "name": "raiser_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1234, + "name": "host_armor_trim_smithing_template", + "translation_key": "item.minecraft.smithing_template", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1235, + "name": "angler_pottery_sherd", + "translation_key": "item.minecraft.angler_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1236, + "name": "archer_pottery_sherd", + "translation_key": "item.minecraft.archer_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1237, + "name": "arms_up_pottery_sherd", + "translation_key": "item.minecraft.arms_up_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1238, + "name": "blade_pottery_sherd", + "translation_key": "item.minecraft.blade_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1239, + "name": "brewer_pottery_sherd", + "translation_key": "item.minecraft.brewer_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1240, + "name": "burn_pottery_sherd", + "translation_key": "item.minecraft.burn_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1241, + "name": "danger_pottery_sherd", + "translation_key": "item.minecraft.danger_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1242, + "name": "explorer_pottery_sherd", + "translation_key": "item.minecraft.explorer_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1243, + "name": "friend_pottery_sherd", + "translation_key": "item.minecraft.friend_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1244, + "name": "heart_pottery_sherd", + "translation_key": "item.minecraft.heart_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1245, + "name": "heartbreak_pottery_sherd", + "translation_key": "item.minecraft.heartbreak_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1246, + "name": "howl_pottery_sherd", + "translation_key": "item.minecraft.howl_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1247, + "name": "miner_pottery_sherd", + "translation_key": "item.minecraft.miner_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1248, + "name": "mourner_pottery_sherd", + "translation_key": "item.minecraft.mourner_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1249, + "name": "plenty_pottery_sherd", + "translation_key": "item.minecraft.plenty_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1250, + "name": "prize_pottery_sherd", + "translation_key": "item.minecraft.prize_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1251, + "name": "sheaf_pottery_sherd", + "translation_key": "item.minecraft.sheaf_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1252, + "name": "shelter_pottery_sherd", + "translation_key": "item.minecraft.shelter_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1253, + "name": "skull_pottery_sherd", + "translation_key": "item.minecraft.skull_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + }, + { + "id": 1254, + "name": "snort_pottery_sherd", + "translation_key": "item.minecraft.snort_pottery_sherd", + "max_stack": 64, + "max_durability": 0, + "enchantability": 0, + "fireproof": false + } +] \ No newline at end of file diff --git a/tools/packet-inspector/extracted/packets.json b/vendor/valence/crates/valence_generated/extracted/packets.json similarity index 100% rename from tools/packet-inspector/extracted/packets.json rename to vendor/valence/crates/valence_generated/extracted/packets.json diff --git a/vendor/valence/crates/valence_generated/extracted/sounds.json b/vendor/valence/crates/valence_generated/extracted/sounds.json new file mode 100644 index 00000000..1d629580 --- /dev/null +++ b/vendor/valence/crates/valence_generated/extracted/sounds.json @@ -0,0 +1,5898 @@ +[ + { + "id": 0, + "name": "entity.allay.ambient_with_item" + }, + { + "id": 1, + "name": "entity.allay.ambient_without_item" + }, + { + "id": 2, + "name": "entity.allay.death" + }, + { + "id": 3, + "name": "entity.allay.hurt" + }, + { + "id": 4, + "name": "entity.allay.item_given" + }, + { + "id": 5, + "name": "entity.allay.item_taken" + }, + { + "id": 6, + "name": "entity.allay.item_thrown" + }, + { + "id": 7, + "name": "ambient.cave" + }, + { + "id": 8, + "name": "ambient.basalt_deltas.additions" + }, + { + "id": 9, + "name": "ambient.basalt_deltas.loop" + }, + { + "id": 10, + "name": "ambient.basalt_deltas.mood" + }, + { + "id": 11, + "name": "ambient.crimson_forest.additions" + }, + { + "id": 12, + "name": "ambient.crimson_forest.loop" + }, + { + "id": 13, + "name": "ambient.crimson_forest.mood" + }, + { + "id": 14, + "name": "ambient.nether_wastes.additions" + }, + { + "id": 15, + "name": "ambient.nether_wastes.loop" + }, + { + "id": 16, + "name": "ambient.nether_wastes.mood" + }, + { + "id": 17, + "name": "ambient.soul_sand_valley.additions" + }, + { + "id": 18, + "name": "ambient.soul_sand_valley.loop" + }, + { + "id": 19, + "name": "ambient.soul_sand_valley.mood" + }, + { + "id": 20, + "name": "ambient.warped_forest.additions" + }, + { + "id": 21, + "name": "ambient.warped_forest.loop" + }, + { + "id": 22, + "name": "ambient.warped_forest.mood" + }, + { + "id": 23, + "name": "ambient.underwater.enter" + }, + { + "id": 24, + "name": "ambient.underwater.exit" + }, + { + "id": 25, + "name": "ambient.underwater.loop" + }, + { + "id": 26, + "name": "ambient.underwater.loop.additions" + }, + { + "id": 27, + "name": "ambient.underwater.loop.additions.rare" + }, + { + "id": 28, + "name": "ambient.underwater.loop.additions.ultra_rare" + }, + { + "id": 29, + "name": "block.amethyst_block.break" + }, + { + "id": 30, + "name": "block.amethyst_block.chime" + }, + { + "id": 31, + "name": "block.amethyst_block.fall" + }, + { + "id": 32, + "name": "block.amethyst_block.hit" + }, + { + "id": 33, + "name": "block.amethyst_block.place" + }, + { + "id": 34, + "name": "block.amethyst_block.resonate" + }, + { + "id": 35, + "name": "block.amethyst_block.step" + }, + { + "id": 36, + "name": "block.amethyst_cluster.break" + }, + { + "id": 37, + "name": "block.amethyst_cluster.fall" + }, + { + "id": 38, + "name": "block.amethyst_cluster.hit" + }, + { + "id": 39, + "name": "block.amethyst_cluster.place" + }, + { + "id": 40, + "name": "block.amethyst_cluster.step" + }, + { + "id": 41, + "name": "block.ancient_debris.break" + }, + { + "id": 42, + "name": "block.ancient_debris.step" + }, + { + "id": 43, + "name": "block.ancient_debris.place" + }, + { + "id": 44, + "name": "block.ancient_debris.hit" + }, + { + "id": 45, + "name": "block.ancient_debris.fall" + }, + { + "id": 46, + "name": "block.anvil.break" + }, + { + "id": 47, + "name": "block.anvil.destroy" + }, + { + "id": 48, + "name": "block.anvil.fall" + }, + { + "id": 49, + "name": "block.anvil.hit" + }, + { + "id": 50, + "name": "block.anvil.land" + }, + { + "id": 51, + "name": "block.anvil.place" + }, + { + "id": 52, + "name": "block.anvil.step" + }, + { + "id": 53, + "name": "block.anvil.use" + }, + { + "id": 54, + "name": "item.armor.equip_chain" + }, + { + "id": 55, + "name": "item.armor.equip_diamond" + }, + { + "id": 56, + "name": "item.armor.equip_elytra" + }, + { + "id": 57, + "name": "item.armor.equip_generic" + }, + { + "id": 58, + "name": "item.armor.equip_gold" + }, + { + "id": 59, + "name": "item.armor.equip_iron" + }, + { + "id": 60, + "name": "item.armor.equip_leather" + }, + { + "id": 61, + "name": "item.armor.equip_netherite" + }, + { + "id": 62, + "name": "item.armor.equip_turtle" + }, + { + "id": 63, + "name": "entity.armor_stand.break" + }, + { + "id": 64, + "name": "entity.armor_stand.fall" + }, + { + "id": 65, + "name": "entity.armor_stand.hit" + }, + { + "id": 66, + "name": "entity.armor_stand.place" + }, + { + "id": 67, + "name": "entity.arrow.hit" + }, + { + "id": 68, + "name": "entity.arrow.hit_player" + }, + { + "id": 69, + "name": "entity.arrow.shoot" + }, + { + "id": 70, + "name": "item.axe.strip" + }, + { + "id": 71, + "name": "item.axe.scrape" + }, + { + "id": 72, + "name": "item.axe.wax_off" + }, + { + "id": 73, + "name": "entity.axolotl.attack" + }, + { + "id": 74, + "name": "entity.axolotl.death" + }, + { + "id": 75, + "name": "entity.axolotl.hurt" + }, + { + "id": 76, + "name": "entity.axolotl.idle_air" + }, + { + "id": 77, + "name": "entity.axolotl.idle_water" + }, + { + "id": 78, + "name": "entity.axolotl.splash" + }, + { + "id": 79, + "name": "entity.axolotl.swim" + }, + { + "id": 80, + "name": "block.azalea.break" + }, + { + "id": 81, + "name": "block.azalea.fall" + }, + { + "id": 82, + "name": "block.azalea.hit" + }, + { + "id": 83, + "name": "block.azalea.place" + }, + { + "id": 84, + "name": "block.azalea.step" + }, + { + "id": 85, + "name": "block.azalea_leaves.break" + }, + { + "id": 86, + "name": "block.azalea_leaves.fall" + }, + { + "id": 87, + "name": "block.azalea_leaves.hit" + }, + { + "id": 88, + "name": "block.azalea_leaves.place" + }, + { + "id": 89, + "name": "block.azalea_leaves.step" + }, + { + "id": 90, + "name": "block.bamboo.break" + }, + { + "id": 91, + "name": "block.bamboo.fall" + }, + { + "id": 92, + "name": "block.bamboo.hit" + }, + { + "id": 93, + "name": "block.bamboo.place" + }, + { + "id": 94, + "name": "block.bamboo.step" + }, + { + "id": 95, + "name": "block.bamboo_sapling.break" + }, + { + "id": 96, + "name": "block.bamboo_sapling.hit" + }, + { + "id": 97, + "name": "block.bamboo_sapling.place" + }, + { + "id": 98, + "name": "block.bamboo_wood.break" + }, + { + "id": 99, + "name": "block.bamboo_wood.fall" + }, + { + "id": 100, + "name": "block.bamboo_wood.hit" + }, + { + "id": 101, + "name": "block.bamboo_wood.place" + }, + { + "id": 102, + "name": "block.bamboo_wood.step" + }, + { + "id": 103, + "name": "block.bamboo_wood_door.close" + }, + { + "id": 104, + "name": "block.bamboo_wood_door.open" + }, + { + "id": 105, + "name": "block.bamboo_wood_trapdoor.close" + }, + { + "id": 106, + "name": "block.bamboo_wood_trapdoor.open" + }, + { + "id": 107, + "name": "block.bamboo_wood_button.click_off" + }, + { + "id": 108, + "name": "block.bamboo_wood_button.click_on" + }, + { + "id": 109, + "name": "block.bamboo_wood_pressure_plate.click_off" + }, + { + "id": 110, + "name": "block.bamboo_wood_pressure_plate.click_on" + }, + { + "id": 111, + "name": "block.bamboo_wood_fence_gate.close" + }, + { + "id": 112, + "name": "block.bamboo_wood_fence_gate.open" + }, + { + "id": 113, + "name": "block.barrel.close" + }, + { + "id": 114, + "name": "block.barrel.open" + }, + { + "id": 115, + "name": "block.basalt.break" + }, + { + "id": 116, + "name": "block.basalt.step" + }, + { + "id": 117, + "name": "block.basalt.place" + }, + { + "id": 118, + "name": "block.basalt.hit" + }, + { + "id": 119, + "name": "block.basalt.fall" + }, + { + "id": 120, + "name": "entity.bat.ambient" + }, + { + "id": 121, + "name": "entity.bat.death" + }, + { + "id": 122, + "name": "entity.bat.hurt" + }, + { + "id": 123, + "name": "entity.bat.loop" + }, + { + "id": 124, + "name": "entity.bat.takeoff" + }, + { + "id": 125, + "name": "block.beacon.activate" + }, + { + "id": 126, + "name": "block.beacon.ambient" + }, + { + "id": 127, + "name": "block.beacon.deactivate" + }, + { + "id": 128, + "name": "block.beacon.power_select" + }, + { + "id": 129, + "name": "entity.bee.death" + }, + { + "id": 130, + "name": "entity.bee.hurt" + }, + { + "id": 131, + "name": "entity.bee.loop_aggressive" + }, + { + "id": 132, + "name": "entity.bee.loop" + }, + { + "id": 133, + "name": "entity.bee.sting" + }, + { + "id": 134, + "name": "entity.bee.pollinate" + }, + { + "id": 135, + "name": "block.beehive.drip" + }, + { + "id": 136, + "name": "block.beehive.enter" + }, + { + "id": 137, + "name": "block.beehive.exit" + }, + { + "id": 138, + "name": "block.beehive.shear" + }, + { + "id": 139, + "name": "block.beehive.work" + }, + { + "id": 140, + "name": "block.bell.use" + }, + { + "id": 141, + "name": "block.bell.resonate" + }, + { + "id": 142, + "name": "block.big_dripleaf.break" + }, + { + "id": 143, + "name": "block.big_dripleaf.fall" + }, + { + "id": 144, + "name": "block.big_dripleaf.hit" + }, + { + "id": 145, + "name": "block.big_dripleaf.place" + }, + { + "id": 146, + "name": "block.big_dripleaf.step" + }, + { + "id": 147, + "name": "entity.blaze.ambient" + }, + { + "id": 148, + "name": "entity.blaze.burn" + }, + { + "id": 149, + "name": "entity.blaze.death" + }, + { + "id": 150, + "name": "entity.blaze.hurt" + }, + { + "id": 151, + "name": "entity.blaze.shoot" + }, + { + "id": 152, + "name": "entity.boat.paddle_land" + }, + { + "id": 153, + "name": "entity.boat.paddle_water" + }, + { + "id": 154, + "name": "block.bone_block.break" + }, + { + "id": 155, + "name": "block.bone_block.fall" + }, + { + "id": 156, + "name": "block.bone_block.hit" + }, + { + "id": 157, + "name": "block.bone_block.place" + }, + { + "id": 158, + "name": "block.bone_block.step" + }, + { + "id": 159, + "name": "item.bone_meal.use" + }, + { + "id": 160, + "name": "item.book.page_turn" + }, + { + "id": 161, + "name": "item.book.put" + }, + { + "id": 162, + "name": "block.blastfurnace.fire_crackle" + }, + { + "id": 163, + "name": "item.bottle.empty" + }, + { + "id": 164, + "name": "item.bottle.fill" + }, + { + "id": 165, + "name": "item.bottle.fill_dragonbreath" + }, + { + "id": 166, + "name": "block.brewing_stand.brew" + }, + { + "id": 167, + "name": "item.brush.brushing.generic" + }, + { + "id": 168, + "name": "item.brush.brushing.sand" + }, + { + "id": 169, + "name": "item.brush.brushing.gravel" + }, + { + "id": 170, + "name": "item.brush.brushing.sand.complete" + }, + { + "id": 171, + "name": "item.brush.brushing.gravel.complete" + }, + { + "id": 172, + "name": "block.bubble_column.bubble_pop" + }, + { + "id": 173, + "name": "block.bubble_column.upwards_ambient" + }, + { + "id": 174, + "name": "block.bubble_column.upwards_inside" + }, + { + "id": 175, + "name": "block.bubble_column.whirlpool_ambient" + }, + { + "id": 176, + "name": "block.bubble_column.whirlpool_inside" + }, + { + "id": 177, + "name": "item.bucket.empty" + }, + { + "id": 178, + "name": "item.bucket.empty_axolotl" + }, + { + "id": 179, + "name": "item.bucket.empty_fish" + }, + { + "id": 180, + "name": "item.bucket.empty_lava" + }, + { + "id": 181, + "name": "item.bucket.empty_powder_snow" + }, + { + "id": 182, + "name": "item.bucket.empty_tadpole" + }, + { + "id": 183, + "name": "item.bucket.fill" + }, + { + "id": 184, + "name": "item.bucket.fill_axolotl" + }, + { + "id": 185, + "name": "item.bucket.fill_fish" + }, + { + "id": 186, + "name": "item.bucket.fill_lava" + }, + { + "id": 187, + "name": "item.bucket.fill_powder_snow" + }, + { + "id": 188, + "name": "item.bucket.fill_tadpole" + }, + { + "id": 189, + "name": "item.bundle.drop_contents" + }, + { + "id": 190, + "name": "item.bundle.insert" + }, + { + "id": 191, + "name": "item.bundle.remove_one" + }, + { + "id": 192, + "name": "block.cake.add_candle" + }, + { + "id": 193, + "name": "block.calcite.break" + }, + { + "id": 194, + "name": "block.calcite.step" + }, + { + "id": 195, + "name": "block.calcite.place" + }, + { + "id": 196, + "name": "block.calcite.hit" + }, + { + "id": 197, + "name": "block.calcite.fall" + }, + { + "id": 198, + "name": "entity.camel.ambient" + }, + { + "id": 199, + "name": "entity.camel.dash" + }, + { + "id": 200, + "name": "entity.camel.dash_ready" + }, + { + "id": 201, + "name": "entity.camel.death" + }, + { + "id": 202, + "name": "entity.camel.eat" + }, + { + "id": 203, + "name": "entity.camel.hurt" + }, + { + "id": 204, + "name": "entity.camel.saddle" + }, + { + "id": 205, + "name": "entity.camel.sit" + }, + { + "id": 206, + "name": "entity.camel.stand" + }, + { + "id": 207, + "name": "entity.camel.step" + }, + { + "id": 208, + "name": "entity.camel.step_sand" + }, + { + "id": 209, + "name": "block.campfire.crackle" + }, + { + "id": 210, + "name": "block.candle.ambient" + }, + { + "id": 211, + "name": "block.candle.break" + }, + { + "id": 212, + "name": "block.candle.extinguish" + }, + { + "id": 213, + "name": "block.candle.fall" + }, + { + "id": 214, + "name": "block.candle.hit" + }, + { + "id": 215, + "name": "block.candle.place" + }, + { + "id": 216, + "name": "block.candle.step" + }, + { + "id": 217, + "name": "entity.cat.ambient" + }, + { + "id": 218, + "name": "entity.cat.stray_ambient" + }, + { + "id": 219, + "name": "entity.cat.death" + }, + { + "id": 220, + "name": "entity.cat.eat" + }, + { + "id": 221, + "name": "entity.cat.hiss" + }, + { + "id": 222, + "name": "entity.cat.beg_for_food" + }, + { + "id": 223, + "name": "entity.cat.hurt" + }, + { + "id": 224, + "name": "entity.cat.purr" + }, + { + "id": 225, + "name": "entity.cat.purreow" + }, + { + "id": 226, + "name": "block.cave_vines.break" + }, + { + "id": 227, + "name": "block.cave_vines.fall" + }, + { + "id": 228, + "name": "block.cave_vines.hit" + }, + { + "id": 229, + "name": "block.cave_vines.place" + }, + { + "id": 230, + "name": "block.cave_vines.step" + }, + { + "id": 231, + "name": "block.cave_vines.pick_berries" + }, + { + "id": 232, + "name": "block.chain.break" + }, + { + "id": 233, + "name": "block.chain.fall" + }, + { + "id": 234, + "name": "block.chain.hit" + }, + { + "id": 235, + "name": "block.chain.place" + }, + { + "id": 236, + "name": "block.chain.step" + }, + { + "id": 237, + "name": "block.cherry_wood.break" + }, + { + "id": 238, + "name": "block.cherry_wood.fall" + }, + { + "id": 239, + "name": "block.cherry_wood.hit" + }, + { + "id": 240, + "name": "block.cherry_wood.place" + }, + { + "id": 241, + "name": "block.cherry_wood.step" + }, + { + "id": 242, + "name": "block.cherry_sapling.break" + }, + { + "id": 243, + "name": "block.cherry_sapling.fall" + }, + { + "id": 244, + "name": "block.cherry_sapling.hit" + }, + { + "id": 245, + "name": "block.cherry_sapling.place" + }, + { + "id": 246, + "name": "block.cherry_sapling.step" + }, + { + "id": 247, + "name": "block.cherry_leaves.break" + }, + { + "id": 248, + "name": "block.cherry_leaves.fall" + }, + { + "id": 249, + "name": "block.cherry_leaves.hit" + }, + { + "id": 250, + "name": "block.cherry_leaves.place" + }, + { + "id": 251, + "name": "block.cherry_leaves.step" + }, + { + "id": 252, + "name": "block.cherry_wood_hanging_sign.step" + }, + { + "id": 253, + "name": "block.cherry_wood_hanging_sign.break" + }, + { + "id": 254, + "name": "block.cherry_wood_hanging_sign.fall" + }, + { + "id": 255, + "name": "block.cherry_wood_hanging_sign.hit" + }, + { + "id": 256, + "name": "block.cherry_wood_hanging_sign.place" + }, + { + "id": 257, + "name": "block.cherry_wood_door.close" + }, + { + "id": 258, + "name": "block.cherry_wood_door.open" + }, + { + "id": 259, + "name": "block.cherry_wood_trapdoor.close" + }, + { + "id": 260, + "name": "block.cherry_wood_trapdoor.open" + }, + { + "id": 261, + "name": "block.cherry_wood_button.click_off" + }, + { + "id": 262, + "name": "block.cherry_wood_button.click_on" + }, + { + "id": 263, + "name": "block.cherry_wood_pressure_plate.click_off" + }, + { + "id": 264, + "name": "block.cherry_wood_pressure_plate.click_on" + }, + { + "id": 265, + "name": "block.cherry_wood_fence_gate.close" + }, + { + "id": 266, + "name": "block.cherry_wood_fence_gate.open" + }, + { + "id": 267, + "name": "block.chest.close" + }, + { + "id": 268, + "name": "block.chest.locked" + }, + { + "id": 269, + "name": "block.chest.open" + }, + { + "id": 270, + "name": "entity.chicken.ambient" + }, + { + "id": 271, + "name": "entity.chicken.death" + }, + { + "id": 272, + "name": "entity.chicken.egg" + }, + { + "id": 273, + "name": "entity.chicken.hurt" + }, + { + "id": 274, + "name": "entity.chicken.step" + }, + { + "id": 275, + "name": "block.chiseled_bookshelf.break" + }, + { + "id": 276, + "name": "block.chiseled_bookshelf.fall" + }, + { + "id": 277, + "name": "block.chiseled_bookshelf.hit" + }, + { + "id": 278, + "name": "block.chiseled_bookshelf.insert" + }, + { + "id": 279, + "name": "block.chiseled_bookshelf.insert.enchanted" + }, + { + "id": 280, + "name": "block.chiseled_bookshelf.step" + }, + { + "id": 281, + "name": "block.chiseled_bookshelf.pickup" + }, + { + "id": 282, + "name": "block.chiseled_bookshelf.pickup.enchanted" + }, + { + "id": 283, + "name": "block.chiseled_bookshelf.place" + }, + { + "id": 284, + "name": "block.chorus_flower.death" + }, + { + "id": 285, + "name": "block.chorus_flower.grow" + }, + { + "id": 286, + "name": "item.chorus_fruit.teleport" + }, + { + "id": 287, + "name": "entity.cod.ambient" + }, + { + "id": 288, + "name": "entity.cod.death" + }, + { + "id": 289, + "name": "entity.cod.flop" + }, + { + "id": 290, + "name": "entity.cod.hurt" + }, + { + "id": 291, + "name": "block.comparator.click" + }, + { + "id": 292, + "name": "block.composter.empty" + }, + { + "id": 293, + "name": "block.composter.fill" + }, + { + "id": 294, + "name": "block.composter.fill_success" + }, + { + "id": 295, + "name": "block.composter.ready" + }, + { + "id": 296, + "name": "block.conduit.activate" + }, + { + "id": 297, + "name": "block.conduit.ambient" + }, + { + "id": 298, + "name": "block.conduit.ambient.short" + }, + { + "id": 299, + "name": "block.conduit.attack.target" + }, + { + "id": 300, + "name": "block.conduit.deactivate" + }, + { + "id": 301, + "name": "block.copper.break" + }, + { + "id": 302, + "name": "block.copper.step" + }, + { + "id": 303, + "name": "block.copper.place" + }, + { + "id": 304, + "name": "block.copper.hit" + }, + { + "id": 305, + "name": "block.copper.fall" + }, + { + "id": 306, + "name": "block.coral_block.break" + }, + { + "id": 307, + "name": "block.coral_block.fall" + }, + { + "id": 308, + "name": "block.coral_block.hit" + }, + { + "id": 309, + "name": "block.coral_block.place" + }, + { + "id": 310, + "name": "block.coral_block.step" + }, + { + "id": 311, + "name": "entity.cow.ambient" + }, + { + "id": 312, + "name": "entity.cow.death" + }, + { + "id": 313, + "name": "entity.cow.hurt" + }, + { + "id": 314, + "name": "entity.cow.milk" + }, + { + "id": 315, + "name": "entity.cow.step" + }, + { + "id": 316, + "name": "entity.creeper.death" + }, + { + "id": 317, + "name": "entity.creeper.hurt" + }, + { + "id": 318, + "name": "entity.creeper.primed" + }, + { + "id": 319, + "name": "block.crop.break" + }, + { + "id": 320, + "name": "item.crop.plant" + }, + { + "id": 321, + "name": "item.crossbow.hit" + }, + { + "id": 322, + "name": "item.crossbow.loading_end" + }, + { + "id": 323, + "name": "item.crossbow.loading_middle" + }, + { + "id": 324, + "name": "item.crossbow.loading_start" + }, + { + "id": 325, + "name": "item.crossbow.quick_charge_1" + }, + { + "id": 326, + "name": "item.crossbow.quick_charge_2" + }, + { + "id": 327, + "name": "item.crossbow.quick_charge_3" + }, + { + "id": 328, + "name": "item.crossbow.shoot" + }, + { + "id": 329, + "name": "block.decorated_pot.break" + }, + { + "id": 330, + "name": "block.decorated_pot.fall" + }, + { + "id": 331, + "name": "block.decorated_pot.hit" + }, + { + "id": 332, + "name": "block.decorated_pot.step" + }, + { + "id": 333, + "name": "block.decorated_pot.place" + }, + { + "id": 334, + "name": "block.decorated_pot.shatter" + }, + { + "id": 335, + "name": "block.deepslate_bricks.break" + }, + { + "id": 336, + "name": "block.deepslate_bricks.fall" + }, + { + "id": 337, + "name": "block.deepslate_bricks.hit" + }, + { + "id": 338, + "name": "block.deepslate_bricks.place" + }, + { + "id": 339, + "name": "block.deepslate_bricks.step" + }, + { + "id": 340, + "name": "block.deepslate.break" + }, + { + "id": 341, + "name": "block.deepslate.fall" + }, + { + "id": 342, + "name": "block.deepslate.hit" + }, + { + "id": 343, + "name": "block.deepslate.place" + }, + { + "id": 344, + "name": "block.deepslate.step" + }, + { + "id": 345, + "name": "block.deepslate_tiles.break" + }, + { + "id": 346, + "name": "block.deepslate_tiles.fall" + }, + { + "id": 347, + "name": "block.deepslate_tiles.hit" + }, + { + "id": 348, + "name": "block.deepslate_tiles.place" + }, + { + "id": 349, + "name": "block.deepslate_tiles.step" + }, + { + "id": 350, + "name": "block.dispenser.dispense" + }, + { + "id": 351, + "name": "block.dispenser.fail" + }, + { + "id": 352, + "name": "block.dispenser.launch" + }, + { + "id": 353, + "name": "entity.dolphin.ambient" + }, + { + "id": 354, + "name": "entity.dolphin.ambient_water" + }, + { + "id": 355, + "name": "entity.dolphin.attack" + }, + { + "id": 356, + "name": "entity.dolphin.death" + }, + { + "id": 357, + "name": "entity.dolphin.eat" + }, + { + "id": 358, + "name": "entity.dolphin.hurt" + }, + { + "id": 359, + "name": "entity.dolphin.jump" + }, + { + "id": 360, + "name": "entity.dolphin.play" + }, + { + "id": 361, + "name": "entity.dolphin.splash" + }, + { + "id": 362, + "name": "entity.dolphin.swim" + }, + { + "id": 363, + "name": "entity.donkey.ambient" + }, + { + "id": 364, + "name": "entity.donkey.angry" + }, + { + "id": 365, + "name": "entity.donkey.chest" + }, + { + "id": 366, + "name": "entity.donkey.death" + }, + { + "id": 367, + "name": "entity.donkey.eat" + }, + { + "id": 368, + "name": "entity.donkey.hurt" + }, + { + "id": 369, + "name": "block.dripstone_block.break" + }, + { + "id": 370, + "name": "block.dripstone_block.step" + }, + { + "id": 371, + "name": "block.dripstone_block.place" + }, + { + "id": 372, + "name": "block.dripstone_block.hit" + }, + { + "id": 373, + "name": "block.dripstone_block.fall" + }, + { + "id": 374, + "name": "block.pointed_dripstone.break" + }, + { + "id": 375, + "name": "block.pointed_dripstone.step" + }, + { + "id": 376, + "name": "block.pointed_dripstone.place" + }, + { + "id": 377, + "name": "block.pointed_dripstone.hit" + }, + { + "id": 378, + "name": "block.pointed_dripstone.fall" + }, + { + "id": 379, + "name": "block.pointed_dripstone.land" + }, + { + "id": 380, + "name": "block.pointed_dripstone.drip_lava" + }, + { + "id": 381, + "name": "block.pointed_dripstone.drip_water" + }, + { + "id": 382, + "name": "block.pointed_dripstone.drip_lava_into_cauldron" + }, + { + "id": 383, + "name": "block.pointed_dripstone.drip_water_into_cauldron" + }, + { + "id": 384, + "name": "block.big_dripleaf.tilt_down" + }, + { + "id": 385, + "name": "block.big_dripleaf.tilt_up" + }, + { + "id": 386, + "name": "entity.drowned.ambient" + }, + { + "id": 387, + "name": "entity.drowned.ambient_water" + }, + { + "id": 388, + "name": "entity.drowned.death" + }, + { + "id": 389, + "name": "entity.drowned.death_water" + }, + { + "id": 390, + "name": "entity.drowned.hurt" + }, + { + "id": 391, + "name": "entity.drowned.hurt_water" + }, + { + "id": 392, + "name": "entity.drowned.shoot" + }, + { + "id": 393, + "name": "entity.drowned.step" + }, + { + "id": 394, + "name": "entity.drowned.swim" + }, + { + "id": 395, + "name": "item.dye.use" + }, + { + "id": 396, + "name": "entity.egg.throw" + }, + { + "id": 397, + "name": "entity.elder_guardian.ambient" + }, + { + "id": 398, + "name": "entity.elder_guardian.ambient_land" + }, + { + "id": 399, + "name": "entity.elder_guardian.curse" + }, + { + "id": 400, + "name": "entity.elder_guardian.death" + }, + { + "id": 401, + "name": "entity.elder_guardian.death_land" + }, + { + "id": 402, + "name": "entity.elder_guardian.flop" + }, + { + "id": 403, + "name": "entity.elder_guardian.hurt" + }, + { + "id": 404, + "name": "entity.elder_guardian.hurt_land" + }, + { + "id": 405, + "name": "item.elytra.flying" + }, + { + "id": 406, + "name": "block.enchantment_table.use" + }, + { + "id": 407, + "name": "block.ender_chest.close" + }, + { + "id": 408, + "name": "block.ender_chest.open" + }, + { + "id": 409, + "name": "entity.ender_dragon.ambient" + }, + { + "id": 410, + "name": "entity.ender_dragon.death" + }, + { + "id": 411, + "name": "entity.dragon_fireball.explode" + }, + { + "id": 412, + "name": "entity.ender_dragon.flap" + }, + { + "id": 413, + "name": "entity.ender_dragon.growl" + }, + { + "id": 414, + "name": "entity.ender_dragon.hurt" + }, + { + "id": 415, + "name": "entity.ender_dragon.shoot" + }, + { + "id": 416, + "name": "entity.ender_eye.death" + }, + { + "id": 417, + "name": "entity.ender_eye.launch" + }, + { + "id": 418, + "name": "entity.enderman.ambient" + }, + { + "id": 419, + "name": "entity.enderman.death" + }, + { + "id": 420, + "name": "entity.enderman.hurt" + }, + { + "id": 421, + "name": "entity.enderman.scream" + }, + { + "id": 422, + "name": "entity.enderman.stare" + }, + { + "id": 423, + "name": "entity.enderman.teleport" + }, + { + "id": 424, + "name": "entity.endermite.ambient" + }, + { + "id": 425, + "name": "entity.endermite.death" + }, + { + "id": 426, + "name": "entity.endermite.hurt" + }, + { + "id": 427, + "name": "entity.endermite.step" + }, + { + "id": 428, + "name": "entity.ender_pearl.throw" + }, + { + "id": 429, + "name": "block.end_gateway.spawn" + }, + { + "id": 430, + "name": "block.end_portal_frame.fill" + }, + { + "id": 431, + "name": "block.end_portal.spawn" + }, + { + "id": 432, + "name": "entity.evoker.ambient" + }, + { + "id": 433, + "name": "entity.evoker.cast_spell" + }, + { + "id": 434, + "name": "entity.evoker.celebrate" + }, + { + "id": 435, + "name": "entity.evoker.death" + }, + { + "id": 436, + "name": "entity.evoker_fangs.attack" + }, + { + "id": 437, + "name": "entity.evoker.hurt" + }, + { + "id": 438, + "name": "entity.evoker.prepare_attack" + }, + { + "id": 439, + "name": "entity.evoker.prepare_summon" + }, + { + "id": 440, + "name": "entity.evoker.prepare_wololo" + }, + { + "id": 441, + "name": "entity.experience_bottle.throw" + }, + { + "id": 442, + "name": "entity.experience_orb.pickup" + }, + { + "id": 443, + "name": "block.fence_gate.close" + }, + { + "id": 444, + "name": "block.fence_gate.open" + }, + { + "id": 445, + "name": "item.firecharge.use" + }, + { + "id": 446, + "name": "entity.firework_rocket.blast" + }, + { + "id": 447, + "name": "entity.firework_rocket.blast_far" + }, + { + "id": 448, + "name": "entity.firework_rocket.large_blast" + }, + { + "id": 449, + "name": "entity.firework_rocket.large_blast_far" + }, + { + "id": 450, + "name": "entity.firework_rocket.launch" + }, + { + "id": 451, + "name": "entity.firework_rocket.shoot" + }, + { + "id": 452, + "name": "entity.firework_rocket.twinkle" + }, + { + "id": 453, + "name": "entity.firework_rocket.twinkle_far" + }, + { + "id": 454, + "name": "block.fire.ambient" + }, + { + "id": 455, + "name": "block.fire.extinguish" + }, + { + "id": 456, + "name": "entity.fish.swim" + }, + { + "id": 457, + "name": "entity.fishing_bobber.retrieve" + }, + { + "id": 458, + "name": "entity.fishing_bobber.splash" + }, + { + "id": 459, + "name": "entity.fishing_bobber.throw" + }, + { + "id": 460, + "name": "item.flintandsteel.use" + }, + { + "id": 461, + "name": "block.flowering_azalea.break" + }, + { + "id": 462, + "name": "block.flowering_azalea.fall" + }, + { + "id": 463, + "name": "block.flowering_azalea.hit" + }, + { + "id": 464, + "name": "block.flowering_azalea.place" + }, + { + "id": 465, + "name": "block.flowering_azalea.step" + }, + { + "id": 466, + "name": "entity.fox.aggro" + }, + { + "id": 467, + "name": "entity.fox.ambient" + }, + { + "id": 468, + "name": "entity.fox.bite" + }, + { + "id": 469, + "name": "entity.fox.death" + }, + { + "id": 470, + "name": "entity.fox.eat" + }, + { + "id": 471, + "name": "entity.fox.hurt" + }, + { + "id": 472, + "name": "entity.fox.screech" + }, + { + "id": 473, + "name": "entity.fox.sleep" + }, + { + "id": 474, + "name": "entity.fox.sniff" + }, + { + "id": 475, + "name": "entity.fox.spit" + }, + { + "id": 476, + "name": "entity.fox.teleport" + }, + { + "id": 477, + "name": "block.suspicious_sand.break" + }, + { + "id": 478, + "name": "block.suspicious_sand.step" + }, + { + "id": 479, + "name": "block.suspicious_sand.place" + }, + { + "id": 480, + "name": "block.suspicious_sand.hit" + }, + { + "id": 481, + "name": "block.suspicious_sand.fall" + }, + { + "id": 482, + "name": "block.suspicious_gravel.break" + }, + { + "id": 483, + "name": "block.suspicious_gravel.step" + }, + { + "id": 484, + "name": "block.suspicious_gravel.place" + }, + { + "id": 485, + "name": "block.suspicious_gravel.hit" + }, + { + "id": 486, + "name": "block.suspicious_gravel.fall" + }, + { + "id": 487, + "name": "block.froglight.break" + }, + { + "id": 488, + "name": "block.froglight.fall" + }, + { + "id": 489, + "name": "block.froglight.hit" + }, + { + "id": 490, + "name": "block.froglight.place" + }, + { + "id": 491, + "name": "block.froglight.step" + }, + { + "id": 492, + "name": "block.frogspawn.step" + }, + { + "id": 493, + "name": "block.frogspawn.break" + }, + { + "id": 494, + "name": "block.frogspawn.fall" + }, + { + "id": 495, + "name": "block.frogspawn.hatch" + }, + { + "id": 496, + "name": "block.frogspawn.hit" + }, + { + "id": 497, + "name": "block.frogspawn.place" + }, + { + "id": 498, + "name": "entity.frog.ambient" + }, + { + "id": 499, + "name": "entity.frog.death" + }, + { + "id": 500, + "name": "entity.frog.eat" + }, + { + "id": 501, + "name": "entity.frog.hurt" + }, + { + "id": 502, + "name": "entity.frog.lay_spawn" + }, + { + "id": 503, + "name": "entity.frog.long_jump" + }, + { + "id": 504, + "name": "entity.frog.step" + }, + { + "id": 505, + "name": "entity.frog.tongue" + }, + { + "id": 506, + "name": "block.roots.break" + }, + { + "id": 507, + "name": "block.roots.step" + }, + { + "id": 508, + "name": "block.roots.place" + }, + { + "id": 509, + "name": "block.roots.hit" + }, + { + "id": 510, + "name": "block.roots.fall" + }, + { + "id": 511, + "name": "block.furnace.fire_crackle" + }, + { + "id": 512, + "name": "entity.generic.big_fall" + }, + { + "id": 513, + "name": "entity.generic.burn" + }, + { + "id": 514, + "name": "entity.generic.death" + }, + { + "id": 515, + "name": "entity.generic.drink" + }, + { + "id": 516, + "name": "entity.generic.eat" + }, + { + "id": 517, + "name": "entity.generic.explode" + }, + { + "id": 518, + "name": "entity.generic.extinguish_fire" + }, + { + "id": 519, + "name": "entity.generic.hurt" + }, + { + "id": 520, + "name": "entity.generic.small_fall" + }, + { + "id": 521, + "name": "entity.generic.splash" + }, + { + "id": 522, + "name": "entity.generic.swim" + }, + { + "id": 523, + "name": "entity.ghast.ambient" + }, + { + "id": 524, + "name": "entity.ghast.death" + }, + { + "id": 525, + "name": "entity.ghast.hurt" + }, + { + "id": 526, + "name": "entity.ghast.scream" + }, + { + "id": 527, + "name": "entity.ghast.shoot" + }, + { + "id": 528, + "name": "entity.ghast.warn" + }, + { + "id": 529, + "name": "block.gilded_blackstone.break" + }, + { + "id": 530, + "name": "block.gilded_blackstone.fall" + }, + { + "id": 531, + "name": "block.gilded_blackstone.hit" + }, + { + "id": 532, + "name": "block.gilded_blackstone.place" + }, + { + "id": 533, + "name": "block.gilded_blackstone.step" + }, + { + "id": 534, + "name": "block.glass.break" + }, + { + "id": 535, + "name": "block.glass.fall" + }, + { + "id": 536, + "name": "block.glass.hit" + }, + { + "id": 537, + "name": "block.glass.place" + }, + { + "id": 538, + "name": "block.glass.step" + }, + { + "id": 539, + "name": "item.glow_ink_sac.use" + }, + { + "id": 540, + "name": "entity.glow_item_frame.add_item" + }, + { + "id": 541, + "name": "entity.glow_item_frame.break" + }, + { + "id": 542, + "name": "entity.glow_item_frame.place" + }, + { + "id": 543, + "name": "entity.glow_item_frame.remove_item" + }, + { + "id": 544, + "name": "entity.glow_item_frame.rotate_item" + }, + { + "id": 545, + "name": "entity.glow_squid.ambient" + }, + { + "id": 546, + "name": "entity.glow_squid.death" + }, + { + "id": 547, + "name": "entity.glow_squid.hurt" + }, + { + "id": 548, + "name": "entity.glow_squid.squirt" + }, + { + "id": 549, + "name": "entity.goat.ambient" + }, + { + "id": 550, + "name": "entity.goat.death" + }, + { + "id": 551, + "name": "entity.goat.eat" + }, + { + "id": 552, + "name": "entity.goat.hurt" + }, + { + "id": 553, + "name": "entity.goat.long_jump" + }, + { + "id": 554, + "name": "entity.goat.milk" + }, + { + "id": 555, + "name": "entity.goat.prepare_ram" + }, + { + "id": 556, + "name": "entity.goat.ram_impact" + }, + { + "id": 557, + "name": "entity.goat.horn_break" + }, + { + "id": 558, + "name": "item.goat_horn.play" + }, + { + "id": 559, + "name": "entity.goat.screaming.ambient" + }, + { + "id": 560, + "name": "entity.goat.screaming.death" + }, + { + "id": 561, + "name": "entity.goat.screaming.eat" + }, + { + "id": 562, + "name": "entity.goat.screaming.hurt" + }, + { + "id": 563, + "name": "entity.goat.screaming.long_jump" + }, + { + "id": 564, + "name": "entity.goat.screaming.milk" + }, + { + "id": 565, + "name": "entity.goat.screaming.prepare_ram" + }, + { + "id": 566, + "name": "entity.goat.screaming.ram_impact" + }, + { + "id": 567, + "name": "entity.goat.screaming.horn_break" + }, + { + "id": 568, + "name": "entity.goat.step" + }, + { + "id": 569, + "name": "block.grass.break" + }, + { + "id": 570, + "name": "block.grass.fall" + }, + { + "id": 571, + "name": "block.grass.hit" + }, + { + "id": 572, + "name": "block.grass.place" + }, + { + "id": 573, + "name": "block.grass.step" + }, + { + "id": 574, + "name": "block.gravel.break" + }, + { + "id": 575, + "name": "block.gravel.fall" + }, + { + "id": 576, + "name": "block.gravel.hit" + }, + { + "id": 577, + "name": "block.gravel.place" + }, + { + "id": 578, + "name": "block.gravel.step" + }, + { + "id": 579, + "name": "block.grindstone.use" + }, + { + "id": 580, + "name": "block.growing_plant.crop" + }, + { + "id": 581, + "name": "entity.guardian.ambient" + }, + { + "id": 582, + "name": "entity.guardian.ambient_land" + }, + { + "id": 583, + "name": "entity.guardian.attack" + }, + { + "id": 584, + "name": "entity.guardian.death" + }, + { + "id": 585, + "name": "entity.guardian.death_land" + }, + { + "id": 586, + "name": "entity.guardian.flop" + }, + { + "id": 587, + "name": "entity.guardian.hurt" + }, + { + "id": 588, + "name": "entity.guardian.hurt_land" + }, + { + "id": 589, + "name": "block.hanging_roots.break" + }, + { + "id": 590, + "name": "block.hanging_roots.fall" + }, + { + "id": 591, + "name": "block.hanging_roots.hit" + }, + { + "id": 592, + "name": "block.hanging_roots.place" + }, + { + "id": 593, + "name": "block.hanging_roots.step" + }, + { + "id": 594, + "name": "block.hanging_sign.step" + }, + { + "id": 595, + "name": "block.hanging_sign.break" + }, + { + "id": 596, + "name": "block.hanging_sign.fall" + }, + { + "id": 597, + "name": "block.hanging_sign.hit" + }, + { + "id": 598, + "name": "block.hanging_sign.place" + }, + { + "id": 599, + "name": "block.nether_wood_hanging_sign.step" + }, + { + "id": 600, + "name": "block.nether_wood_hanging_sign.break" + }, + { + "id": 601, + "name": "block.nether_wood_hanging_sign.fall" + }, + { + "id": 602, + "name": "block.nether_wood_hanging_sign.hit" + }, + { + "id": 603, + "name": "block.nether_wood_hanging_sign.place" + }, + { + "id": 604, + "name": "block.bamboo_wood_hanging_sign.step" + }, + { + "id": 605, + "name": "block.bamboo_wood_hanging_sign.break" + }, + { + "id": 606, + "name": "block.bamboo_wood_hanging_sign.fall" + }, + { + "id": 607, + "name": "block.bamboo_wood_hanging_sign.hit" + }, + { + "id": 608, + "name": "block.bamboo_wood_hanging_sign.place" + }, + { + "id": 609, + "name": "item.hoe.till" + }, + { + "id": 610, + "name": "entity.hoglin.ambient" + }, + { + "id": 611, + "name": "entity.hoglin.angry" + }, + { + "id": 612, + "name": "entity.hoglin.attack" + }, + { + "id": 613, + "name": "entity.hoglin.converted_to_zombified" + }, + { + "id": 614, + "name": "entity.hoglin.death" + }, + { + "id": 615, + "name": "entity.hoglin.hurt" + }, + { + "id": 616, + "name": "entity.hoglin.retreat" + }, + { + "id": 617, + "name": "entity.hoglin.step" + }, + { + "id": 618, + "name": "block.honey_block.break" + }, + { + "id": 619, + "name": "block.honey_block.fall" + }, + { + "id": 620, + "name": "block.honey_block.hit" + }, + { + "id": 621, + "name": "block.honey_block.place" + }, + { + "id": 622, + "name": "block.honey_block.slide" + }, + { + "id": 623, + "name": "block.honey_block.step" + }, + { + "id": 624, + "name": "item.honeycomb.wax_on" + }, + { + "id": 625, + "name": "item.honey_bottle.drink" + }, + { + "id": 626, + "name": "item.goat_horn.sound.0" + }, + { + "id": 627, + "name": "item.goat_horn.sound.1" + }, + { + "id": 628, + "name": "item.goat_horn.sound.2" + }, + { + "id": 629, + "name": "item.goat_horn.sound.3" + }, + { + "id": 630, + "name": "item.goat_horn.sound.4" + }, + { + "id": 631, + "name": "item.goat_horn.sound.5" + }, + { + "id": 632, + "name": "item.goat_horn.sound.6" + }, + { + "id": 633, + "name": "item.goat_horn.sound.7" + }, + { + "id": 634, + "name": "entity.horse.ambient" + }, + { + "id": 635, + "name": "entity.horse.angry" + }, + { + "id": 636, + "name": "entity.horse.armor" + }, + { + "id": 637, + "name": "entity.horse.breathe" + }, + { + "id": 638, + "name": "entity.horse.death" + }, + { + "id": 639, + "name": "entity.horse.eat" + }, + { + "id": 640, + "name": "entity.horse.gallop" + }, + { + "id": 641, + "name": "entity.horse.hurt" + }, + { + "id": 642, + "name": "entity.horse.jump" + }, + { + "id": 643, + "name": "entity.horse.land" + }, + { + "id": 644, + "name": "entity.horse.saddle" + }, + { + "id": 645, + "name": "entity.horse.step" + }, + { + "id": 646, + "name": "entity.horse.step_wood" + }, + { + "id": 647, + "name": "entity.hostile.big_fall" + }, + { + "id": 648, + "name": "entity.hostile.death" + }, + { + "id": 649, + "name": "entity.hostile.hurt" + }, + { + "id": 650, + "name": "entity.hostile.small_fall" + }, + { + "id": 651, + "name": "entity.hostile.splash" + }, + { + "id": 652, + "name": "entity.hostile.swim" + }, + { + "id": 653, + "name": "entity.husk.ambient" + }, + { + "id": 654, + "name": "entity.husk.converted_to_zombie" + }, + { + "id": 655, + "name": "entity.husk.death" + }, + { + "id": 656, + "name": "entity.husk.hurt" + }, + { + "id": 657, + "name": "entity.husk.step" + }, + { + "id": 658, + "name": "entity.illusioner.ambient" + }, + { + "id": 659, + "name": "entity.illusioner.cast_spell" + }, + { + "id": 660, + "name": "entity.illusioner.death" + }, + { + "id": 661, + "name": "entity.illusioner.hurt" + }, + { + "id": 662, + "name": "entity.illusioner.mirror_move" + }, + { + "id": 663, + "name": "entity.illusioner.prepare_blindness" + }, + { + "id": 664, + "name": "entity.illusioner.prepare_mirror" + }, + { + "id": 665, + "name": "item.ink_sac.use" + }, + { + "id": 666, + "name": "block.iron_door.close" + }, + { + "id": 667, + "name": "block.iron_door.open" + }, + { + "id": 668, + "name": "entity.iron_golem.attack" + }, + { + "id": 669, + "name": "entity.iron_golem.damage" + }, + { + "id": 670, + "name": "entity.iron_golem.death" + }, + { + "id": 671, + "name": "entity.iron_golem.hurt" + }, + { + "id": 672, + "name": "entity.iron_golem.repair" + }, + { + "id": 673, + "name": "entity.iron_golem.step" + }, + { + "id": 674, + "name": "block.iron_trapdoor.close" + }, + { + "id": 675, + "name": "block.iron_trapdoor.open" + }, + { + "id": 676, + "name": "entity.item_frame.add_item" + }, + { + "id": 677, + "name": "entity.item_frame.break" + }, + { + "id": 678, + "name": "entity.item_frame.place" + }, + { + "id": 679, + "name": "entity.item_frame.remove_item" + }, + { + "id": 680, + "name": "entity.item_frame.rotate_item" + }, + { + "id": 681, + "name": "entity.item.break" + }, + { + "id": 682, + "name": "entity.item.pickup" + }, + { + "id": 683, + "name": "block.ladder.break" + }, + { + "id": 684, + "name": "block.ladder.fall" + }, + { + "id": 685, + "name": "block.ladder.hit" + }, + { + "id": 686, + "name": "block.ladder.place" + }, + { + "id": 687, + "name": "block.ladder.step" + }, + { + "id": 688, + "name": "block.lantern.break" + }, + { + "id": 689, + "name": "block.lantern.fall" + }, + { + "id": 690, + "name": "block.lantern.hit" + }, + { + "id": 691, + "name": "block.lantern.place" + }, + { + "id": 692, + "name": "block.lantern.step" + }, + { + "id": 693, + "name": "block.large_amethyst_bud.break" + }, + { + "id": 694, + "name": "block.large_amethyst_bud.place" + }, + { + "id": 695, + "name": "block.lava.ambient" + }, + { + "id": 696, + "name": "block.lava.extinguish" + }, + { + "id": 697, + "name": "block.lava.pop" + }, + { + "id": 698, + "name": "entity.leash_knot.break" + }, + { + "id": 699, + "name": "entity.leash_knot.place" + }, + { + "id": 700, + "name": "block.lever.click" + }, + { + "id": 701, + "name": "entity.lightning_bolt.impact" + }, + { + "id": 702, + "name": "entity.lightning_bolt.thunder" + }, + { + "id": 703, + "name": "entity.lingering_potion.throw" + }, + { + "id": 704, + "name": "entity.llama.ambient" + }, + { + "id": 705, + "name": "entity.llama.angry" + }, + { + "id": 706, + "name": "entity.llama.chest" + }, + { + "id": 707, + "name": "entity.llama.death" + }, + { + "id": 708, + "name": "entity.llama.eat" + }, + { + "id": 709, + "name": "entity.llama.hurt" + }, + { + "id": 710, + "name": "entity.llama.spit" + }, + { + "id": 711, + "name": "entity.llama.step" + }, + { + "id": 712, + "name": "entity.llama.swag" + }, + { + "id": 713, + "name": "entity.magma_cube.death_small" + }, + { + "id": 714, + "name": "block.lodestone.break" + }, + { + "id": 715, + "name": "block.lodestone.step" + }, + { + "id": 716, + "name": "block.lodestone.place" + }, + { + "id": 717, + "name": "block.lodestone.hit" + }, + { + "id": 718, + "name": "block.lodestone.fall" + }, + { + "id": 719, + "name": "item.lodestone_compass.lock" + }, + { + "id": 720, + "name": "entity.magma_cube.death" + }, + { + "id": 721, + "name": "entity.magma_cube.hurt" + }, + { + "id": 722, + "name": "entity.magma_cube.hurt_small" + }, + { + "id": 723, + "name": "entity.magma_cube.jump" + }, + { + "id": 724, + "name": "entity.magma_cube.squish" + }, + { + "id": 725, + "name": "entity.magma_cube.squish_small" + }, + { + "id": 726, + "name": "block.mangrove_roots.break" + }, + { + "id": 727, + "name": "block.mangrove_roots.fall" + }, + { + "id": 728, + "name": "block.mangrove_roots.hit" + }, + { + "id": 729, + "name": "block.mangrove_roots.place" + }, + { + "id": 730, + "name": "block.mangrove_roots.step" + }, + { + "id": 731, + "name": "block.medium_amethyst_bud.break" + }, + { + "id": 732, + "name": "block.medium_amethyst_bud.place" + }, + { + "id": 733, + "name": "block.metal.break" + }, + { + "id": 734, + "name": "block.metal.fall" + }, + { + "id": 735, + "name": "block.metal.hit" + }, + { + "id": 736, + "name": "block.metal.place" + }, + { + "id": 737, + "name": "block.metal_pressure_plate.click_off" + }, + { + "id": 738, + "name": "block.metal_pressure_plate.click_on" + }, + { + "id": 739, + "name": "block.metal.step" + }, + { + "id": 740, + "name": "entity.minecart.inside.underwater" + }, + { + "id": 741, + "name": "entity.minecart.inside" + }, + { + "id": 742, + "name": "entity.minecart.riding" + }, + { + "id": 743, + "name": "entity.mooshroom.convert" + }, + { + "id": 744, + "name": "entity.mooshroom.eat" + }, + { + "id": 745, + "name": "entity.mooshroom.milk" + }, + { + "id": 746, + "name": "entity.mooshroom.suspicious_milk" + }, + { + "id": 747, + "name": "entity.mooshroom.shear" + }, + { + "id": 748, + "name": "block.moss_carpet.break" + }, + { + "id": 749, + "name": "block.moss_carpet.fall" + }, + { + "id": 750, + "name": "block.moss_carpet.hit" + }, + { + "id": 751, + "name": "block.moss_carpet.place" + }, + { + "id": 752, + "name": "block.moss_carpet.step" + }, + { + "id": 753, + "name": "block.pink_petals.break" + }, + { + "id": 754, + "name": "block.pink_petals.fall" + }, + { + "id": 755, + "name": "block.pink_petals.hit" + }, + { + "id": 756, + "name": "block.pink_petals.place" + }, + { + "id": 757, + "name": "block.pink_petals.step" + }, + { + "id": 758, + "name": "block.moss.break" + }, + { + "id": 759, + "name": "block.moss.fall" + }, + { + "id": 760, + "name": "block.moss.hit" + }, + { + "id": 761, + "name": "block.moss.place" + }, + { + "id": 762, + "name": "block.moss.step" + }, + { + "id": 763, + "name": "block.mud.break" + }, + { + "id": 764, + "name": "block.mud.fall" + }, + { + "id": 765, + "name": "block.mud.hit" + }, + { + "id": 766, + "name": "block.mud.place" + }, + { + "id": 767, + "name": "block.mud.step" + }, + { + "id": 768, + "name": "block.mud_bricks.break" + }, + { + "id": 769, + "name": "block.mud_bricks.fall" + }, + { + "id": 770, + "name": "block.mud_bricks.hit" + }, + { + "id": 771, + "name": "block.mud_bricks.place" + }, + { + "id": 772, + "name": "block.mud_bricks.step" + }, + { + "id": 773, + "name": "block.muddy_mangrove_roots.break" + }, + { + "id": 774, + "name": "block.muddy_mangrove_roots.fall" + }, + { + "id": 775, + "name": "block.muddy_mangrove_roots.hit" + }, + { + "id": 776, + "name": "block.muddy_mangrove_roots.place" + }, + { + "id": 777, + "name": "block.muddy_mangrove_roots.step" + }, + { + "id": 778, + "name": "entity.mule.ambient" + }, + { + "id": 779, + "name": "entity.mule.angry" + }, + { + "id": 780, + "name": "entity.mule.chest" + }, + { + "id": 781, + "name": "entity.mule.death" + }, + { + "id": 782, + "name": "entity.mule.eat" + }, + { + "id": 783, + "name": "entity.mule.hurt" + }, + { + "id": 784, + "name": "music.creative" + }, + { + "id": 785, + "name": "music.credits" + }, + { + "id": 786, + "name": "music_disc.5" + }, + { + "id": 787, + "name": "music_disc.11" + }, + { + "id": 788, + "name": "music_disc.13" + }, + { + "id": 789, + "name": "music_disc.blocks" + }, + { + "id": 790, + "name": "music_disc.cat" + }, + { + "id": 791, + "name": "music_disc.chirp" + }, + { + "id": 792, + "name": "music_disc.far" + }, + { + "id": 793, + "name": "music_disc.mall" + }, + { + "id": 794, + "name": "music_disc.mellohi" + }, + { + "id": 795, + "name": "music_disc.pigstep" + }, + { + "id": 796, + "name": "music_disc.stal" + }, + { + "id": 797, + "name": "music_disc.strad" + }, + { + "id": 798, + "name": "music_disc.wait" + }, + { + "id": 799, + "name": "music_disc.ward" + }, + { + "id": 800, + "name": "music_disc.otherside" + }, + { + "id": 801, + "name": "music_disc.relic" + }, + { + "id": 802, + "name": "music.dragon" + }, + { + "id": 803, + "name": "music.end" + }, + { + "id": 804, + "name": "music.game" + }, + { + "id": 805, + "name": "music.menu" + }, + { + "id": 806, + "name": "music.nether.basalt_deltas" + }, + { + "id": 807, + "name": "music.nether.crimson_forest" + }, + { + "id": 808, + "name": "music.overworld.deep_dark" + }, + { + "id": 809, + "name": "music.overworld.dripstone_caves" + }, + { + "id": 810, + "name": "music.overworld.grove" + }, + { + "id": 811, + "name": "music.overworld.jagged_peaks" + }, + { + "id": 812, + "name": "music.overworld.lush_caves" + }, + { + "id": 813, + "name": "music.overworld.swamp" + }, + { + "id": 814, + "name": "music.overworld.forest" + }, + { + "id": 815, + "name": "music.overworld.old_growth_taiga" + }, + { + "id": 816, + "name": "music.overworld.meadow" + }, + { + "id": 817, + "name": "music.overworld.cherry_grove" + }, + { + "id": 818, + "name": "music.nether.nether_wastes" + }, + { + "id": 819, + "name": "music.overworld.frozen_peaks" + }, + { + "id": 820, + "name": "music.overworld.snowy_slopes" + }, + { + "id": 821, + "name": "music.nether.soul_sand_valley" + }, + { + "id": 822, + "name": "music.overworld.stony_peaks" + }, + { + "id": 823, + "name": "music.nether.warped_forest" + }, + { + "id": 824, + "name": "music.overworld.flower_forest" + }, + { + "id": 825, + "name": "music.overworld.desert" + }, + { + "id": 826, + "name": "music.overworld.badlands" + }, + { + "id": 827, + "name": "music.overworld.jungle" + }, + { + "id": 828, + "name": "music.overworld.sparse_jungle" + }, + { + "id": 829, + "name": "music.overworld.bamboo_jungle" + }, + { + "id": 830, + "name": "music.under_water" + }, + { + "id": 831, + "name": "block.nether_bricks.break" + }, + { + "id": 832, + "name": "block.nether_bricks.step" + }, + { + "id": 833, + "name": "block.nether_bricks.place" + }, + { + "id": 834, + "name": "block.nether_bricks.hit" + }, + { + "id": 835, + "name": "block.nether_bricks.fall" + }, + { + "id": 836, + "name": "block.nether_wart.break" + }, + { + "id": 837, + "name": "item.nether_wart.plant" + }, + { + "id": 838, + "name": "block.nether_wood.break" + }, + { + "id": 839, + "name": "block.nether_wood.fall" + }, + { + "id": 840, + "name": "block.nether_wood.hit" + }, + { + "id": 841, + "name": "block.nether_wood.place" + }, + { + "id": 842, + "name": "block.nether_wood.step" + }, + { + "id": 843, + "name": "block.nether_wood_door.close" + }, + { + "id": 844, + "name": "block.nether_wood_door.open" + }, + { + "id": 845, + "name": "block.nether_wood_trapdoor.close" + }, + { + "id": 846, + "name": "block.nether_wood_trapdoor.open" + }, + { + "id": 847, + "name": "block.nether_wood_button.click_off" + }, + { + "id": 848, + "name": "block.nether_wood_button.click_on" + }, + { + "id": 849, + "name": "block.nether_wood_pressure_plate.click_off" + }, + { + "id": 850, + "name": "block.nether_wood_pressure_plate.click_on" + }, + { + "id": 851, + "name": "block.nether_wood_fence_gate.close" + }, + { + "id": 852, + "name": "block.nether_wood_fence_gate.open" + }, + { + "id": 853, + "name": "intentionally_empty" + }, + { + "id": 854, + "name": "block.packed_mud.break" + }, + { + "id": 855, + "name": "block.packed_mud.fall" + }, + { + "id": 856, + "name": "block.packed_mud.hit" + }, + { + "id": 857, + "name": "block.packed_mud.place" + }, + { + "id": 858, + "name": "block.packed_mud.step" + }, + { + "id": 859, + "name": "block.stem.break" + }, + { + "id": 860, + "name": "block.stem.step" + }, + { + "id": 861, + "name": "block.stem.place" + }, + { + "id": 862, + "name": "block.stem.hit" + }, + { + "id": 863, + "name": "block.stem.fall" + }, + { + "id": 864, + "name": "block.nylium.break" + }, + { + "id": 865, + "name": "block.nylium.step" + }, + { + "id": 866, + "name": "block.nylium.place" + }, + { + "id": 867, + "name": "block.nylium.hit" + }, + { + "id": 868, + "name": "block.nylium.fall" + }, + { + "id": 869, + "name": "block.nether_sprouts.break" + }, + { + "id": 870, + "name": "block.nether_sprouts.step" + }, + { + "id": 871, + "name": "block.nether_sprouts.place" + }, + { + "id": 872, + "name": "block.nether_sprouts.hit" + }, + { + "id": 873, + "name": "block.nether_sprouts.fall" + }, + { + "id": 874, + "name": "block.fungus.break" + }, + { + "id": 875, + "name": "block.fungus.step" + }, + { + "id": 876, + "name": "block.fungus.place" + }, + { + "id": 877, + "name": "block.fungus.hit" + }, + { + "id": 878, + "name": "block.fungus.fall" + }, + { + "id": 879, + "name": "block.weeping_vines.break" + }, + { + "id": 880, + "name": "block.weeping_vines.step" + }, + { + "id": 881, + "name": "block.weeping_vines.place" + }, + { + "id": 882, + "name": "block.weeping_vines.hit" + }, + { + "id": 883, + "name": "block.weeping_vines.fall" + }, + { + "id": 884, + "name": "block.wart_block.break" + }, + { + "id": 885, + "name": "block.wart_block.step" + }, + { + "id": 886, + "name": "block.wart_block.place" + }, + { + "id": 887, + "name": "block.wart_block.hit" + }, + { + "id": 888, + "name": "block.wart_block.fall" + }, + { + "id": 889, + "name": "block.netherite_block.break" + }, + { + "id": 890, + "name": "block.netherite_block.step" + }, + { + "id": 891, + "name": "block.netherite_block.place" + }, + { + "id": 892, + "name": "block.netherite_block.hit" + }, + { + "id": 893, + "name": "block.netherite_block.fall" + }, + { + "id": 894, + "name": "block.netherrack.break" + }, + { + "id": 895, + "name": "block.netherrack.step" + }, + { + "id": 896, + "name": "block.netherrack.place" + }, + { + "id": 897, + "name": "block.netherrack.hit" + }, + { + "id": 898, + "name": "block.netherrack.fall" + }, + { + "id": 899, + "name": "block.note_block.basedrum" + }, + { + "id": 900, + "name": "block.note_block.bass" + }, + { + "id": 901, + "name": "block.note_block.bell" + }, + { + "id": 902, + "name": "block.note_block.chime" + }, + { + "id": 903, + "name": "block.note_block.flute" + }, + { + "id": 904, + "name": "block.note_block.guitar" + }, + { + "id": 905, + "name": "block.note_block.harp" + }, + { + "id": 906, + "name": "block.note_block.hat" + }, + { + "id": 907, + "name": "block.note_block.pling" + }, + { + "id": 908, + "name": "block.note_block.snare" + }, + { + "id": 909, + "name": "block.note_block.xylophone" + }, + { + "id": 910, + "name": "block.note_block.iron_xylophone" + }, + { + "id": 911, + "name": "block.note_block.cow_bell" + }, + { + "id": 912, + "name": "block.note_block.didgeridoo" + }, + { + "id": 913, + "name": "block.note_block.bit" + }, + { + "id": 914, + "name": "block.note_block.banjo" + }, + { + "id": 915, + "name": "block.note_block.imitate.zombie" + }, + { + "id": 916, + "name": "block.note_block.imitate.skeleton" + }, + { + "id": 917, + "name": "block.note_block.imitate.creeper" + }, + { + "id": 918, + "name": "block.note_block.imitate.ender_dragon" + }, + { + "id": 919, + "name": "block.note_block.imitate.wither_skeleton" + }, + { + "id": 920, + "name": "block.note_block.imitate.piglin" + }, + { + "id": 921, + "name": "entity.ocelot.hurt" + }, + { + "id": 922, + "name": "entity.ocelot.ambient" + }, + { + "id": 923, + "name": "entity.ocelot.death" + }, + { + "id": 924, + "name": "entity.painting.break" + }, + { + "id": 925, + "name": "entity.painting.place" + }, + { + "id": 926, + "name": "entity.panda.pre_sneeze" + }, + { + "id": 927, + "name": "entity.panda.sneeze" + }, + { + "id": 928, + "name": "entity.panda.ambient" + }, + { + "id": 929, + "name": "entity.panda.death" + }, + { + "id": 930, + "name": "entity.panda.eat" + }, + { + "id": 931, + "name": "entity.panda.step" + }, + { + "id": 932, + "name": "entity.panda.cant_breed" + }, + { + "id": 933, + "name": "entity.panda.aggressive_ambient" + }, + { + "id": 934, + "name": "entity.panda.worried_ambient" + }, + { + "id": 935, + "name": "entity.panda.hurt" + }, + { + "id": 936, + "name": "entity.panda.bite" + }, + { + "id": 937, + "name": "entity.parrot.ambient" + }, + { + "id": 938, + "name": "entity.parrot.death" + }, + { + "id": 939, + "name": "entity.parrot.eat" + }, + { + "id": 940, + "name": "entity.parrot.fly" + }, + { + "id": 941, + "name": "entity.parrot.hurt" + }, + { + "id": 942, + "name": "entity.parrot.imitate.blaze" + }, + { + "id": 943, + "name": "entity.parrot.imitate.creeper" + }, + { + "id": 944, + "name": "entity.parrot.imitate.drowned" + }, + { + "id": 945, + "name": "entity.parrot.imitate.elder_guardian" + }, + { + "id": 946, + "name": "entity.parrot.imitate.ender_dragon" + }, + { + "id": 947, + "name": "entity.parrot.imitate.endermite" + }, + { + "id": 948, + "name": "entity.parrot.imitate.evoker" + }, + { + "id": 949, + "name": "entity.parrot.imitate.ghast" + }, + { + "id": 950, + "name": "entity.parrot.imitate.guardian" + }, + { + "id": 951, + "name": "entity.parrot.imitate.hoglin" + }, + { + "id": 952, + "name": "entity.parrot.imitate.husk" + }, + { + "id": 953, + "name": "entity.parrot.imitate.illusioner" + }, + { + "id": 954, + "name": "entity.parrot.imitate.magma_cube" + }, + { + "id": 955, + "name": "entity.parrot.imitate.phantom" + }, + { + "id": 956, + "name": "entity.parrot.imitate.piglin" + }, + { + "id": 957, + "name": "entity.parrot.imitate.piglin_brute" + }, + { + "id": 958, + "name": "entity.parrot.imitate.pillager" + }, + { + "id": 959, + "name": "entity.parrot.imitate.ravager" + }, + { + "id": 960, + "name": "entity.parrot.imitate.shulker" + }, + { + "id": 961, + "name": "entity.parrot.imitate.silverfish" + }, + { + "id": 962, + "name": "entity.parrot.imitate.skeleton" + }, + { + "id": 963, + "name": "entity.parrot.imitate.slime" + }, + { + "id": 964, + "name": "entity.parrot.imitate.spider" + }, + { + "id": 965, + "name": "entity.parrot.imitate.stray" + }, + { + "id": 966, + "name": "entity.parrot.imitate.vex" + }, + { + "id": 967, + "name": "entity.parrot.imitate.vindicator" + }, + { + "id": 968, + "name": "entity.parrot.imitate.warden" + }, + { + "id": 969, + "name": "entity.parrot.imitate.witch" + }, + { + "id": 970, + "name": "entity.parrot.imitate.wither" + }, + { + "id": 971, + "name": "entity.parrot.imitate.wither_skeleton" + }, + { + "id": 972, + "name": "entity.parrot.imitate.zoglin" + }, + { + "id": 973, + "name": "entity.parrot.imitate.zombie" + }, + { + "id": 974, + "name": "entity.parrot.imitate.zombie_villager" + }, + { + "id": 975, + "name": "entity.parrot.step" + }, + { + "id": 976, + "name": "entity.phantom.ambient" + }, + { + "id": 977, + "name": "entity.phantom.bite" + }, + { + "id": 978, + "name": "entity.phantom.death" + }, + { + "id": 979, + "name": "entity.phantom.flap" + }, + { + "id": 980, + "name": "entity.phantom.hurt" + }, + { + "id": 981, + "name": "entity.phantom.swoop" + }, + { + "id": 982, + "name": "entity.pig.ambient" + }, + { + "id": 983, + "name": "entity.pig.death" + }, + { + "id": 984, + "name": "entity.pig.hurt" + }, + { + "id": 985, + "name": "entity.pig.saddle" + }, + { + "id": 986, + "name": "entity.pig.step" + }, + { + "id": 987, + "name": "entity.piglin.admiring_item" + }, + { + "id": 988, + "name": "entity.piglin.ambient" + }, + { + "id": 989, + "name": "entity.piglin.angry" + }, + { + "id": 990, + "name": "entity.piglin.celebrate" + }, + { + "id": 991, + "name": "entity.piglin.death" + }, + { + "id": 992, + "name": "entity.piglin.jealous" + }, + { + "id": 993, + "name": "entity.piglin.hurt" + }, + { + "id": 994, + "name": "entity.piglin.retreat" + }, + { + "id": 995, + "name": "entity.piglin.step" + }, + { + "id": 996, + "name": "entity.piglin.converted_to_zombified" + }, + { + "id": 997, + "name": "entity.piglin_brute.ambient" + }, + { + "id": 998, + "name": "entity.piglin_brute.angry" + }, + { + "id": 999, + "name": "entity.piglin_brute.death" + }, + { + "id": 1000, + "name": "entity.piglin_brute.hurt" + }, + { + "id": 1001, + "name": "entity.piglin_brute.step" + }, + { + "id": 1002, + "name": "entity.piglin_brute.converted_to_zombified" + }, + { + "id": 1003, + "name": "entity.pillager.ambient" + }, + { + "id": 1004, + "name": "entity.pillager.celebrate" + }, + { + "id": 1005, + "name": "entity.pillager.death" + }, + { + "id": 1006, + "name": "entity.pillager.hurt" + }, + { + "id": 1007, + "name": "block.piston.contract" + }, + { + "id": 1008, + "name": "block.piston.extend" + }, + { + "id": 1009, + "name": "entity.player.attack.crit" + }, + { + "id": 1010, + "name": "entity.player.attack.knockback" + }, + { + "id": 1011, + "name": "entity.player.attack.nodamage" + }, + { + "id": 1012, + "name": "entity.player.attack.strong" + }, + { + "id": 1013, + "name": "entity.player.attack.sweep" + }, + { + "id": 1014, + "name": "entity.player.attack.weak" + }, + { + "id": 1015, + "name": "entity.player.big_fall" + }, + { + "id": 1016, + "name": "entity.player.breath" + }, + { + "id": 1017, + "name": "entity.player.burp" + }, + { + "id": 1018, + "name": "entity.player.death" + }, + { + "id": 1019, + "name": "entity.player.hurt" + }, + { + "id": 1020, + "name": "entity.player.hurt_drown" + }, + { + "id": 1021, + "name": "entity.player.hurt_freeze" + }, + { + "id": 1022, + "name": "entity.player.hurt_on_fire" + }, + { + "id": 1023, + "name": "entity.player.hurt_sweet_berry_bush" + }, + { + "id": 1024, + "name": "entity.player.levelup" + }, + { + "id": 1025, + "name": "entity.player.small_fall" + }, + { + "id": 1026, + "name": "entity.player.splash" + }, + { + "id": 1027, + "name": "entity.player.splash.high_speed" + }, + { + "id": 1028, + "name": "entity.player.swim" + }, + { + "id": 1029, + "name": "entity.polar_bear.ambient" + }, + { + "id": 1030, + "name": "entity.polar_bear.ambient_baby" + }, + { + "id": 1031, + "name": "entity.polar_bear.death" + }, + { + "id": 1032, + "name": "entity.polar_bear.hurt" + }, + { + "id": 1033, + "name": "entity.polar_bear.step" + }, + { + "id": 1034, + "name": "entity.polar_bear.warning" + }, + { + "id": 1035, + "name": "block.polished_deepslate.break" + }, + { + "id": 1036, + "name": "block.polished_deepslate.fall" + }, + { + "id": 1037, + "name": "block.polished_deepslate.hit" + }, + { + "id": 1038, + "name": "block.polished_deepslate.place" + }, + { + "id": 1039, + "name": "block.polished_deepslate.step" + }, + { + "id": 1040, + "name": "block.portal.ambient" + }, + { + "id": 1041, + "name": "block.portal.travel" + }, + { + "id": 1042, + "name": "block.portal.trigger" + }, + { + "id": 1043, + "name": "block.powder_snow.break" + }, + { + "id": 1044, + "name": "block.powder_snow.fall" + }, + { + "id": 1045, + "name": "block.powder_snow.hit" + }, + { + "id": 1046, + "name": "block.powder_snow.place" + }, + { + "id": 1047, + "name": "block.powder_snow.step" + }, + { + "id": 1048, + "name": "entity.puffer_fish.ambient" + }, + { + "id": 1049, + "name": "entity.puffer_fish.blow_out" + }, + { + "id": 1050, + "name": "entity.puffer_fish.blow_up" + }, + { + "id": 1051, + "name": "entity.puffer_fish.death" + }, + { + "id": 1052, + "name": "entity.puffer_fish.flop" + }, + { + "id": 1053, + "name": "entity.puffer_fish.hurt" + }, + { + "id": 1054, + "name": "entity.puffer_fish.sting" + }, + { + "id": 1055, + "name": "block.pumpkin.carve" + }, + { + "id": 1056, + "name": "entity.rabbit.ambient" + }, + { + "id": 1057, + "name": "entity.rabbit.attack" + }, + { + "id": 1058, + "name": "entity.rabbit.death" + }, + { + "id": 1059, + "name": "entity.rabbit.hurt" + }, + { + "id": 1060, + "name": "entity.rabbit.jump" + }, + { + "id": 1061, + "name": "event.raid.horn" + }, + { + "id": 1062, + "name": "entity.ravager.ambient" + }, + { + "id": 1063, + "name": "entity.ravager.attack" + }, + { + "id": 1064, + "name": "entity.ravager.celebrate" + }, + { + "id": 1065, + "name": "entity.ravager.death" + }, + { + "id": 1066, + "name": "entity.ravager.hurt" + }, + { + "id": 1067, + "name": "entity.ravager.step" + }, + { + "id": 1068, + "name": "entity.ravager.stunned" + }, + { + "id": 1069, + "name": "entity.ravager.roar" + }, + { + "id": 1070, + "name": "block.nether_gold_ore.break" + }, + { + "id": 1071, + "name": "block.nether_gold_ore.fall" + }, + { + "id": 1072, + "name": "block.nether_gold_ore.hit" + }, + { + "id": 1073, + "name": "block.nether_gold_ore.place" + }, + { + "id": 1074, + "name": "block.nether_gold_ore.step" + }, + { + "id": 1075, + "name": "block.nether_ore.break" + }, + { + "id": 1076, + "name": "block.nether_ore.fall" + }, + { + "id": 1077, + "name": "block.nether_ore.hit" + }, + { + "id": 1078, + "name": "block.nether_ore.place" + }, + { + "id": 1079, + "name": "block.nether_ore.step" + }, + { + "id": 1080, + "name": "block.redstone_torch.burnout" + }, + { + "id": 1081, + "name": "block.respawn_anchor.ambient" + }, + { + "id": 1082, + "name": "block.respawn_anchor.charge" + }, + { + "id": 1083, + "name": "block.respawn_anchor.deplete" + }, + { + "id": 1084, + "name": "block.respawn_anchor.set_spawn" + }, + { + "id": 1085, + "name": "block.rooted_dirt.break" + }, + { + "id": 1086, + "name": "block.rooted_dirt.fall" + }, + { + "id": 1087, + "name": "block.rooted_dirt.hit" + }, + { + "id": 1088, + "name": "block.rooted_dirt.place" + }, + { + "id": 1089, + "name": "block.rooted_dirt.step" + }, + { + "id": 1090, + "name": "entity.salmon.ambient" + }, + { + "id": 1091, + "name": "entity.salmon.death" + }, + { + "id": 1092, + "name": "entity.salmon.flop" + }, + { + "id": 1093, + "name": "entity.salmon.hurt" + }, + { + "id": 1094, + "name": "block.sand.break" + }, + { + "id": 1095, + "name": "block.sand.fall" + }, + { + "id": 1096, + "name": "block.sand.hit" + }, + { + "id": 1097, + "name": "block.sand.place" + }, + { + "id": 1098, + "name": "block.sand.step" + }, + { + "id": 1099, + "name": "block.scaffolding.break" + }, + { + "id": 1100, + "name": "block.scaffolding.fall" + }, + { + "id": 1101, + "name": "block.scaffolding.hit" + }, + { + "id": 1102, + "name": "block.scaffolding.place" + }, + { + "id": 1103, + "name": "block.scaffolding.step" + }, + { + "id": 1104, + "name": "block.sculk.spread" + }, + { + "id": 1105, + "name": "block.sculk.charge" + }, + { + "id": 1106, + "name": "block.sculk.break" + }, + { + "id": 1107, + "name": "block.sculk.fall" + }, + { + "id": 1108, + "name": "block.sculk.hit" + }, + { + "id": 1109, + "name": "block.sculk.place" + }, + { + "id": 1110, + "name": "block.sculk.step" + }, + { + "id": 1111, + "name": "block.sculk_catalyst.bloom" + }, + { + "id": 1112, + "name": "block.sculk_catalyst.break" + }, + { + "id": 1113, + "name": "block.sculk_catalyst.fall" + }, + { + "id": 1114, + "name": "block.sculk_catalyst.hit" + }, + { + "id": 1115, + "name": "block.sculk_catalyst.place" + }, + { + "id": 1116, + "name": "block.sculk_catalyst.step" + }, + { + "id": 1117, + "name": "block.sculk_sensor.clicking" + }, + { + "id": 1118, + "name": "block.sculk_sensor.clicking_stop" + }, + { + "id": 1119, + "name": "block.sculk_sensor.break" + }, + { + "id": 1120, + "name": "block.sculk_sensor.fall" + }, + { + "id": 1121, + "name": "block.sculk_sensor.hit" + }, + { + "id": 1122, + "name": "block.sculk_sensor.place" + }, + { + "id": 1123, + "name": "block.sculk_sensor.step" + }, + { + "id": 1124, + "name": "block.sculk_shrieker.break" + }, + { + "id": 1125, + "name": "block.sculk_shrieker.fall" + }, + { + "id": 1126, + "name": "block.sculk_shrieker.hit" + }, + { + "id": 1127, + "name": "block.sculk_shrieker.place" + }, + { + "id": 1128, + "name": "block.sculk_shrieker.shriek" + }, + { + "id": 1129, + "name": "block.sculk_shrieker.step" + }, + { + "id": 1130, + "name": "block.sculk_vein.break" + }, + { + "id": 1131, + "name": "block.sculk_vein.fall" + }, + { + "id": 1132, + "name": "block.sculk_vein.hit" + }, + { + "id": 1133, + "name": "block.sculk_vein.place" + }, + { + "id": 1134, + "name": "block.sculk_vein.step" + }, + { + "id": 1135, + "name": "entity.sheep.ambient" + }, + { + "id": 1136, + "name": "entity.sheep.death" + }, + { + "id": 1137, + "name": "entity.sheep.hurt" + }, + { + "id": 1138, + "name": "entity.sheep.shear" + }, + { + "id": 1139, + "name": "entity.sheep.step" + }, + { + "id": 1140, + "name": "item.shield.block" + }, + { + "id": 1141, + "name": "item.shield.break" + }, + { + "id": 1142, + "name": "block.shroomlight.break" + }, + { + "id": 1143, + "name": "block.shroomlight.step" + }, + { + "id": 1144, + "name": "block.shroomlight.place" + }, + { + "id": 1145, + "name": "block.shroomlight.hit" + }, + { + "id": 1146, + "name": "block.shroomlight.fall" + }, + { + "id": 1147, + "name": "item.shovel.flatten" + }, + { + "id": 1148, + "name": "entity.shulker.ambient" + }, + { + "id": 1149, + "name": "block.shulker_box.close" + }, + { + "id": 1150, + "name": "block.shulker_box.open" + }, + { + "id": 1151, + "name": "entity.shulker_bullet.hit" + }, + { + "id": 1152, + "name": "entity.shulker_bullet.hurt" + }, + { + "id": 1153, + "name": "entity.shulker.close" + }, + { + "id": 1154, + "name": "entity.shulker.death" + }, + { + "id": 1155, + "name": "entity.shulker.hurt" + }, + { + "id": 1156, + "name": "entity.shulker.hurt_closed" + }, + { + "id": 1157, + "name": "entity.shulker.open" + }, + { + "id": 1158, + "name": "entity.shulker.shoot" + }, + { + "id": 1159, + "name": "entity.shulker.teleport" + }, + { + "id": 1160, + "name": "entity.silverfish.ambient" + }, + { + "id": 1161, + "name": "entity.silverfish.death" + }, + { + "id": 1162, + "name": "entity.silverfish.hurt" + }, + { + "id": 1163, + "name": "entity.silverfish.step" + }, + { + "id": 1164, + "name": "entity.skeleton.ambient" + }, + { + "id": 1165, + "name": "entity.skeleton.converted_to_stray" + }, + { + "id": 1166, + "name": "entity.skeleton.death" + }, + { + "id": 1167, + "name": "entity.skeleton_horse.ambient" + }, + { + "id": 1168, + "name": "entity.skeleton_horse.death" + }, + { + "id": 1169, + "name": "entity.skeleton_horse.hurt" + }, + { + "id": 1170, + "name": "entity.skeleton_horse.swim" + }, + { + "id": 1171, + "name": "entity.skeleton_horse.ambient_water" + }, + { + "id": 1172, + "name": "entity.skeleton_horse.gallop_water" + }, + { + "id": 1173, + "name": "entity.skeleton_horse.jump_water" + }, + { + "id": 1174, + "name": "entity.skeleton_horse.step_water" + }, + { + "id": 1175, + "name": "entity.skeleton.hurt" + }, + { + "id": 1176, + "name": "entity.skeleton.shoot" + }, + { + "id": 1177, + "name": "entity.skeleton.step" + }, + { + "id": 1178, + "name": "entity.slime.attack" + }, + { + "id": 1179, + "name": "entity.slime.death" + }, + { + "id": 1180, + "name": "entity.slime.hurt" + }, + { + "id": 1181, + "name": "entity.slime.jump" + }, + { + "id": 1182, + "name": "entity.slime.squish" + }, + { + "id": 1183, + "name": "block.slime_block.break" + }, + { + "id": 1184, + "name": "block.slime_block.fall" + }, + { + "id": 1185, + "name": "block.slime_block.hit" + }, + { + "id": 1186, + "name": "block.slime_block.place" + }, + { + "id": 1187, + "name": "block.slime_block.step" + }, + { + "id": 1188, + "name": "block.small_amethyst_bud.break" + }, + { + "id": 1189, + "name": "block.small_amethyst_bud.place" + }, + { + "id": 1190, + "name": "block.small_dripleaf.break" + }, + { + "id": 1191, + "name": "block.small_dripleaf.fall" + }, + { + "id": 1192, + "name": "block.small_dripleaf.hit" + }, + { + "id": 1193, + "name": "block.small_dripleaf.place" + }, + { + "id": 1194, + "name": "block.small_dripleaf.step" + }, + { + "id": 1195, + "name": "block.soul_sand.break" + }, + { + "id": 1196, + "name": "block.soul_sand.step" + }, + { + "id": 1197, + "name": "block.soul_sand.place" + }, + { + "id": 1198, + "name": "block.soul_sand.hit" + }, + { + "id": 1199, + "name": "block.soul_sand.fall" + }, + { + "id": 1200, + "name": "block.soul_soil.break" + }, + { + "id": 1201, + "name": "block.soul_soil.step" + }, + { + "id": 1202, + "name": "block.soul_soil.place" + }, + { + "id": 1203, + "name": "block.soul_soil.hit" + }, + { + "id": 1204, + "name": "block.soul_soil.fall" + }, + { + "id": 1205, + "name": "particle.soul_escape" + }, + { + "id": 1206, + "name": "block.spore_blossom.break" + }, + { + "id": 1207, + "name": "block.spore_blossom.fall" + }, + { + "id": 1208, + "name": "block.spore_blossom.hit" + }, + { + "id": 1209, + "name": "block.spore_blossom.place" + }, + { + "id": 1210, + "name": "block.spore_blossom.step" + }, + { + "id": 1211, + "name": "entity.strider.ambient" + }, + { + "id": 1212, + "name": "entity.strider.happy" + }, + { + "id": 1213, + "name": "entity.strider.retreat" + }, + { + "id": 1214, + "name": "entity.strider.death" + }, + { + "id": 1215, + "name": "entity.strider.hurt" + }, + { + "id": 1216, + "name": "entity.strider.step" + }, + { + "id": 1217, + "name": "entity.strider.step_lava" + }, + { + "id": 1218, + "name": "entity.strider.eat" + }, + { + "id": 1219, + "name": "entity.strider.saddle" + }, + { + "id": 1220, + "name": "entity.slime.death_small" + }, + { + "id": 1221, + "name": "entity.slime.hurt_small" + }, + { + "id": 1222, + "name": "entity.slime.jump_small" + }, + { + "id": 1223, + "name": "entity.slime.squish_small" + }, + { + "id": 1224, + "name": "block.smithing_table.use" + }, + { + "id": 1225, + "name": "block.smoker.smoke" + }, + { + "id": 1226, + "name": "entity.sniffer.step" + }, + { + "id": 1227, + "name": "entity.sniffer.eat" + }, + { + "id": 1228, + "name": "entity.sniffer.idle" + }, + { + "id": 1229, + "name": "entity.sniffer.hurt" + }, + { + "id": 1230, + "name": "entity.sniffer.death" + }, + { + "id": 1231, + "name": "entity.sniffer.drop_seed" + }, + { + "id": 1232, + "name": "entity.sniffer.scenting" + }, + { + "id": 1233, + "name": "entity.sniffer.sniffing" + }, + { + "id": 1234, + "name": "entity.sniffer.searching" + }, + { + "id": 1235, + "name": "entity.sniffer.digging" + }, + { + "id": 1236, + "name": "entity.sniffer.digging_stop" + }, + { + "id": 1237, + "name": "entity.sniffer.happy" + }, + { + "id": 1238, + "name": "block.sniffer_egg.plop" + }, + { + "id": 1239, + "name": "block.sniffer_egg.crack" + }, + { + "id": 1240, + "name": "block.sniffer_egg.hatch" + }, + { + "id": 1241, + "name": "entity.snowball.throw" + }, + { + "id": 1242, + "name": "block.snow.break" + }, + { + "id": 1243, + "name": "block.snow.fall" + }, + { + "id": 1244, + "name": "entity.snow_golem.ambient" + }, + { + "id": 1245, + "name": "entity.snow_golem.death" + }, + { + "id": 1246, + "name": "entity.snow_golem.hurt" + }, + { + "id": 1247, + "name": "entity.snow_golem.shoot" + }, + { + "id": 1248, + "name": "entity.snow_golem.shear" + }, + { + "id": 1249, + "name": "block.snow.hit" + }, + { + "id": 1250, + "name": "block.snow.place" + }, + { + "id": 1251, + "name": "block.snow.step" + }, + { + "id": 1252, + "name": "entity.spider.ambient" + }, + { + "id": 1253, + "name": "entity.spider.death" + }, + { + "id": 1254, + "name": "entity.spider.hurt" + }, + { + "id": 1255, + "name": "entity.spider.step" + }, + { + "id": 1256, + "name": "entity.splash_potion.break" + }, + { + "id": 1257, + "name": "entity.splash_potion.throw" + }, + { + "id": 1258, + "name": "item.spyglass.use" + }, + { + "id": 1259, + "name": "item.spyglass.stop_using" + }, + { + "id": 1260, + "name": "entity.squid.ambient" + }, + { + "id": 1261, + "name": "entity.squid.death" + }, + { + "id": 1262, + "name": "entity.squid.hurt" + }, + { + "id": 1263, + "name": "entity.squid.squirt" + }, + { + "id": 1264, + "name": "block.stone.break" + }, + { + "id": 1265, + "name": "block.stone_button.click_off" + }, + { + "id": 1266, + "name": "block.stone_button.click_on" + }, + { + "id": 1267, + "name": "block.stone.fall" + }, + { + "id": 1268, + "name": "block.stone.hit" + }, + { + "id": 1269, + "name": "block.stone.place" + }, + { + "id": 1270, + "name": "block.stone_pressure_plate.click_off" + }, + { + "id": 1271, + "name": "block.stone_pressure_plate.click_on" + }, + { + "id": 1272, + "name": "block.stone.step" + }, + { + "id": 1273, + "name": "entity.stray.ambient" + }, + { + "id": 1274, + "name": "entity.stray.death" + }, + { + "id": 1275, + "name": "entity.stray.hurt" + }, + { + "id": 1276, + "name": "entity.stray.step" + }, + { + "id": 1277, + "name": "block.sweet_berry_bush.break" + }, + { + "id": 1278, + "name": "block.sweet_berry_bush.place" + }, + { + "id": 1279, + "name": "block.sweet_berry_bush.pick_berries" + }, + { + "id": 1280, + "name": "entity.tadpole.death" + }, + { + "id": 1281, + "name": "entity.tadpole.flop" + }, + { + "id": 1282, + "name": "entity.tadpole.grow_up" + }, + { + "id": 1283, + "name": "entity.tadpole.hurt" + }, + { + "id": 1284, + "name": "enchant.thorns.hit" + }, + { + "id": 1285, + "name": "entity.tnt.primed" + }, + { + "id": 1286, + "name": "item.totem.use" + }, + { + "id": 1287, + "name": "item.trident.hit" + }, + { + "id": 1288, + "name": "item.trident.hit_ground" + }, + { + "id": 1289, + "name": "item.trident.return" + }, + { + "id": 1290, + "name": "item.trident.riptide_1" + }, + { + "id": 1291, + "name": "item.trident.riptide_2" + }, + { + "id": 1292, + "name": "item.trident.riptide_3" + }, + { + "id": 1293, + "name": "item.trident.throw" + }, + { + "id": 1294, + "name": "item.trident.thunder" + }, + { + "id": 1295, + "name": "block.tripwire.attach" + }, + { + "id": 1296, + "name": "block.tripwire.click_off" + }, + { + "id": 1297, + "name": "block.tripwire.click_on" + }, + { + "id": 1298, + "name": "block.tripwire.detach" + }, + { + "id": 1299, + "name": "entity.tropical_fish.ambient" + }, + { + "id": 1300, + "name": "entity.tropical_fish.death" + }, + { + "id": 1301, + "name": "entity.tropical_fish.flop" + }, + { + "id": 1302, + "name": "entity.tropical_fish.hurt" + }, + { + "id": 1303, + "name": "block.tuff.break" + }, + { + "id": 1304, + "name": "block.tuff.step" + }, + { + "id": 1305, + "name": "block.tuff.place" + }, + { + "id": 1306, + "name": "block.tuff.hit" + }, + { + "id": 1307, + "name": "block.tuff.fall" + }, + { + "id": 1308, + "name": "entity.turtle.ambient_land" + }, + { + "id": 1309, + "name": "entity.turtle.death" + }, + { + "id": 1310, + "name": "entity.turtle.death_baby" + }, + { + "id": 1311, + "name": "entity.turtle.egg_break" + }, + { + "id": 1312, + "name": "entity.turtle.egg_crack" + }, + { + "id": 1313, + "name": "entity.turtle.egg_hatch" + }, + { + "id": 1314, + "name": "entity.turtle.hurt" + }, + { + "id": 1315, + "name": "entity.turtle.hurt_baby" + }, + { + "id": 1316, + "name": "entity.turtle.lay_egg" + }, + { + "id": 1317, + "name": "entity.turtle.shamble" + }, + { + "id": 1318, + "name": "entity.turtle.shamble_baby" + }, + { + "id": 1319, + "name": "entity.turtle.swim" + }, + { + "id": 1320, + "name": "ui.button.click" + }, + { + "id": 1321, + "name": "ui.loom.select_pattern" + }, + { + "id": 1322, + "name": "ui.loom.take_result" + }, + { + "id": 1323, + "name": "ui.cartography_table.take_result" + }, + { + "id": 1324, + "name": "ui.stonecutter.take_result" + }, + { + "id": 1325, + "name": "ui.stonecutter.select_recipe" + }, + { + "id": 1326, + "name": "ui.toast.challenge_complete" + }, + { + "id": 1327, + "name": "ui.toast.in" + }, + { + "id": 1328, + "name": "ui.toast.out" + }, + { + "id": 1329, + "name": "entity.vex.ambient" + }, + { + "id": 1330, + "name": "entity.vex.charge" + }, + { + "id": 1331, + "name": "entity.vex.death" + }, + { + "id": 1332, + "name": "entity.vex.hurt" + }, + { + "id": 1333, + "name": "entity.villager.ambient" + }, + { + "id": 1334, + "name": "entity.villager.celebrate" + }, + { + "id": 1335, + "name": "entity.villager.death" + }, + { + "id": 1336, + "name": "entity.villager.hurt" + }, + { + "id": 1337, + "name": "entity.villager.no" + }, + { + "id": 1338, + "name": "entity.villager.trade" + }, + { + "id": 1339, + "name": "entity.villager.yes" + }, + { + "id": 1340, + "name": "entity.villager.work_armorer" + }, + { + "id": 1341, + "name": "entity.villager.work_butcher" + }, + { + "id": 1342, + "name": "entity.villager.work_cartographer" + }, + { + "id": 1343, + "name": "entity.villager.work_cleric" + }, + { + "id": 1344, + "name": "entity.villager.work_farmer" + }, + { + "id": 1345, + "name": "entity.villager.work_fisherman" + }, + { + "id": 1346, + "name": "entity.villager.work_fletcher" + }, + { + "id": 1347, + "name": "entity.villager.work_leatherworker" + }, + { + "id": 1348, + "name": "entity.villager.work_librarian" + }, + { + "id": 1349, + "name": "entity.villager.work_mason" + }, + { + "id": 1350, + "name": "entity.villager.work_shepherd" + }, + { + "id": 1351, + "name": "entity.villager.work_toolsmith" + }, + { + "id": 1352, + "name": "entity.villager.work_weaponsmith" + }, + { + "id": 1353, + "name": "entity.vindicator.ambient" + }, + { + "id": 1354, + "name": "entity.vindicator.celebrate" + }, + { + "id": 1355, + "name": "entity.vindicator.death" + }, + { + "id": 1356, + "name": "entity.vindicator.hurt" + }, + { + "id": 1357, + "name": "block.vine.break" + }, + { + "id": 1358, + "name": "block.vine.fall" + }, + { + "id": 1359, + "name": "block.vine.hit" + }, + { + "id": 1360, + "name": "block.vine.place" + }, + { + "id": 1361, + "name": "block.vine.step" + }, + { + "id": 1362, + "name": "block.lily_pad.place" + }, + { + "id": 1363, + "name": "entity.wandering_trader.ambient" + }, + { + "id": 1364, + "name": "entity.wandering_trader.death" + }, + { + "id": 1365, + "name": "entity.wandering_trader.disappeared" + }, + { + "id": 1366, + "name": "entity.wandering_trader.drink_milk" + }, + { + "id": 1367, + "name": "entity.wandering_trader.drink_potion" + }, + { + "id": 1368, + "name": "entity.wandering_trader.hurt" + }, + { + "id": 1369, + "name": "entity.wandering_trader.no" + }, + { + "id": 1370, + "name": "entity.wandering_trader.reappeared" + }, + { + "id": 1371, + "name": "entity.wandering_trader.trade" + }, + { + "id": 1372, + "name": "entity.wandering_trader.yes" + }, + { + "id": 1373, + "name": "entity.warden.agitated" + }, + { + "id": 1374, + "name": "entity.warden.ambient" + }, + { + "id": 1375, + "name": "entity.warden.angry" + }, + { + "id": 1376, + "name": "entity.warden.attack_impact" + }, + { + "id": 1377, + "name": "entity.warden.death" + }, + { + "id": 1378, + "name": "entity.warden.dig" + }, + { + "id": 1379, + "name": "entity.warden.emerge" + }, + { + "id": 1380, + "name": "entity.warden.heartbeat" + }, + { + "id": 1381, + "name": "entity.warden.hurt" + }, + { + "id": 1382, + "name": "entity.warden.listening" + }, + { + "id": 1383, + "name": "entity.warden.listening_angry" + }, + { + "id": 1384, + "name": "entity.warden.nearby_close" + }, + { + "id": 1385, + "name": "entity.warden.nearby_closer" + }, + { + "id": 1386, + "name": "entity.warden.nearby_closest" + }, + { + "id": 1387, + "name": "entity.warden.roar" + }, + { + "id": 1388, + "name": "entity.warden.sniff" + }, + { + "id": 1389, + "name": "entity.warden.sonic_boom" + }, + { + "id": 1390, + "name": "entity.warden.sonic_charge" + }, + { + "id": 1391, + "name": "entity.warden.step" + }, + { + "id": 1392, + "name": "entity.warden.tendril_clicks" + }, + { + "id": 1393, + "name": "block.sign.waxed_interact_fail" + }, + { + "id": 1394, + "name": "block.water.ambient" + }, + { + "id": 1395, + "name": "weather.rain" + }, + { + "id": 1396, + "name": "weather.rain.above" + }, + { + "id": 1397, + "name": "block.wet_grass.break" + }, + { + "id": 1398, + "name": "block.wet_grass.fall" + }, + { + "id": 1399, + "name": "block.wet_grass.hit" + }, + { + "id": 1400, + "name": "block.wet_grass.place" + }, + { + "id": 1401, + "name": "block.wet_grass.step" + }, + { + "id": 1402, + "name": "entity.witch.ambient" + }, + { + "id": 1403, + "name": "entity.witch.celebrate" + }, + { + "id": 1404, + "name": "entity.witch.death" + }, + { + "id": 1405, + "name": "entity.witch.drink" + }, + { + "id": 1406, + "name": "entity.witch.hurt" + }, + { + "id": 1407, + "name": "entity.witch.throw" + }, + { + "id": 1408, + "name": "entity.wither.ambient" + }, + { + "id": 1409, + "name": "entity.wither.break_block" + }, + { + "id": 1410, + "name": "entity.wither.death" + }, + { + "id": 1411, + "name": "entity.wither.hurt" + }, + { + "id": 1412, + "name": "entity.wither.shoot" + }, + { + "id": 1413, + "name": "entity.wither_skeleton.ambient" + }, + { + "id": 1414, + "name": "entity.wither_skeleton.death" + }, + { + "id": 1415, + "name": "entity.wither_skeleton.hurt" + }, + { + "id": 1416, + "name": "entity.wither_skeleton.step" + }, + { + "id": 1417, + "name": "entity.wither.spawn" + }, + { + "id": 1418, + "name": "entity.wolf.ambient" + }, + { + "id": 1419, + "name": "entity.wolf.death" + }, + { + "id": 1420, + "name": "entity.wolf.growl" + }, + { + "id": 1421, + "name": "entity.wolf.howl" + }, + { + "id": 1422, + "name": "entity.wolf.hurt" + }, + { + "id": 1423, + "name": "entity.wolf.pant" + }, + { + "id": 1424, + "name": "entity.wolf.shake" + }, + { + "id": 1425, + "name": "entity.wolf.step" + }, + { + "id": 1426, + "name": "entity.wolf.whine" + }, + { + "id": 1427, + "name": "block.wooden_door.close" + }, + { + "id": 1428, + "name": "block.wooden_door.open" + }, + { + "id": 1429, + "name": "block.wooden_trapdoor.close" + }, + { + "id": 1430, + "name": "block.wooden_trapdoor.open" + }, + { + "id": 1431, + "name": "block.wooden_button.click_off" + }, + { + "id": 1432, + "name": "block.wooden_button.click_on" + }, + { + "id": 1433, + "name": "block.wooden_pressure_plate.click_off" + }, + { + "id": 1434, + "name": "block.wooden_pressure_plate.click_on" + }, + { + "id": 1435, + "name": "block.wood.break" + }, + { + "id": 1436, + "name": "block.wood.fall" + }, + { + "id": 1437, + "name": "block.wood.hit" + }, + { + "id": 1438, + "name": "block.wood.place" + }, + { + "id": 1439, + "name": "block.wood.step" + }, + { + "id": 1440, + "name": "block.wool.break" + }, + { + "id": 1441, + "name": "block.wool.fall" + }, + { + "id": 1442, + "name": "block.wool.hit" + }, + { + "id": 1443, + "name": "block.wool.place" + }, + { + "id": 1444, + "name": "block.wool.step" + }, + { + "id": 1445, + "name": "entity.zoglin.ambient" + }, + { + "id": 1446, + "name": "entity.zoglin.angry" + }, + { + "id": 1447, + "name": "entity.zoglin.attack" + }, + { + "id": 1448, + "name": "entity.zoglin.death" + }, + { + "id": 1449, + "name": "entity.zoglin.hurt" + }, + { + "id": 1450, + "name": "entity.zoglin.step" + }, + { + "id": 1451, + "name": "entity.zombie.ambient" + }, + { + "id": 1452, + "name": "entity.zombie.attack_wooden_door" + }, + { + "id": 1453, + "name": "entity.zombie.attack_iron_door" + }, + { + "id": 1454, + "name": "entity.zombie.break_wooden_door" + }, + { + "id": 1455, + "name": "entity.zombie.converted_to_drowned" + }, + { + "id": 1456, + "name": "entity.zombie.death" + }, + { + "id": 1457, + "name": "entity.zombie.destroy_egg" + }, + { + "id": 1458, + "name": "entity.zombie_horse.ambient" + }, + { + "id": 1459, + "name": "entity.zombie_horse.death" + }, + { + "id": 1460, + "name": "entity.zombie_horse.hurt" + }, + { + "id": 1461, + "name": "entity.zombie.hurt" + }, + { + "id": 1462, + "name": "entity.zombie.infect" + }, + { + "id": 1463, + "name": "entity.zombified_piglin.ambient" + }, + { + "id": 1464, + "name": "entity.zombified_piglin.angry" + }, + { + "id": 1465, + "name": "entity.zombified_piglin.death" + }, + { + "id": 1466, + "name": "entity.zombified_piglin.hurt" + }, + { + "id": 1467, + "name": "entity.zombie.step" + }, + { + "id": 1468, + "name": "entity.zombie_villager.ambient" + }, + { + "id": 1469, + "name": "entity.zombie_villager.converted" + }, + { + "id": 1470, + "name": "entity.zombie_villager.cure" + }, + { + "id": 1471, + "name": "entity.zombie_villager.death" + }, + { + "id": 1472, + "name": "entity.zombie_villager.hurt" + }, + { + "id": 1473, + "name": "entity.zombie_villager.step" + } +] \ No newline at end of file diff --git a/vendor/valence/crates/valence_generated/src/block.rs b/vendor/valence/crates/valence_generated/src/block.rs new file mode 100644 index 00000000..ba914b0e --- /dev/null +++ b/vendor/valence/crates/valence_generated/src/block.rs @@ -0,0 +1,83 @@ +#![allow(clippy::all)] // TODO: block build script creates many warnings. + +use std::fmt; +use std::fmt::Display; +use std::iter::FusedIterator; + +use valence_ident::{Ident, ident}; + +use crate::item::ItemKind; + +include!(concat!(env!("OUT_DIR"), "/block.rs")); + +impl fmt::Debug for BlockState { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt_block_state(*self, f) + } +} + +impl Display for BlockState { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt_block_state(*self, f) + } +} + +fn fmt_block_state(bs: BlockState, f: &mut fmt::Formatter) -> fmt::Result { + let kind = bs.to_kind(); + + write!(f, "{}", kind.to_str())?; + + let props = kind.props(); + + if !props.is_empty() { + let mut list = f.debug_list(); + for &p in kind.props() { + struct KeyVal<'a>(&'a str, &'a str); + + impl<'a> fmt::Debug for KeyVal<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}={}", self.0, self.1) + } + } + + list.entry(&KeyVal(p.to_str(), bs.get(p).unwrap().to_str())); + } + list.finish() + } else { + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn get_set_consistency() { + for kind in BlockKind::ALL { + let block = kind.to_state(); + + for &prop in kind.props() { + let new_block = block.set(prop, block.get(prop).unwrap()); + assert_eq!(new_block, block); + } + } + } + + #[test] + fn blockstate_to_wall() { + assert_eq!(BlockState::STONE.wall_block_id(), None); + assert_eq!( + BlockState::OAK_SIGN.wall_block_id(), + Some(BlockState::OAK_WALL_SIGN) + ); + assert_eq!( + BlockState::GREEN_BANNER.wall_block_id(), + Some(BlockState::GREEN_WALL_BANNER) + ); + assert_ne!( + BlockState::GREEN_BANNER.wall_block_id(), + Some(BlockState::GREEN_BANNER) + ); + } +} diff --git a/vendor/valence/crates/valence_generated/src/lib.rs b/vendor/valence/crates/valence_generated/src/lib.rs new file mode 100644 index 00000000..28966301 --- /dev/null +++ b/vendor/valence/crates/valence_generated/src/lib.rs @@ -0,0 +1,26 @@ +pub mod block; + +pub mod attributes { + include!(concat!(env!("OUT_DIR"), "/attributes.rs")); +} + +pub mod item { + include!(concat!(env!("OUT_DIR"), "/item.rs")); +} + +pub mod sound { + include!(concat!(env!("OUT_DIR"), "/sound.rs")); +} + +/// Contains constants for every vanilla packet ID. +pub mod packet_id { + include!(concat!(env!("OUT_DIR"), "/packet_id.rs")); +} + +pub mod chunk_view { + include!(concat!(env!("OUT_DIR"), "/chunk_view.rs")); +} + +pub mod status_effects { + include!(concat!(env!("OUT_DIR"), "/status_effects.rs")); +} diff --git a/vendor/valence/crates/valence_ident/Cargo.toml b/vendor/valence/crates/valence_ident/Cargo.toml new file mode 100644 index 00000000..c6476094 --- /dev/null +++ b/vendor/valence/crates/valence_ident/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "valence_ident" +description = "Parse and create Minecraft's resource identifiers" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bytes.workspace = true +thiserror.workspace = true +serde.workspace = true +valence_bytes.workspace = true +valence_ident_macros.workspace = true diff --git a/vendor/valence/crates/valence_ident/README.md b/vendor/valence/crates/valence_ident/README.md new file mode 100644 index 00000000..53f68957 --- /dev/null +++ b/vendor/valence/crates/valence_ident/README.md @@ -0,0 +1,3 @@ +# valence_ident + +A library for parsing Minecraft's [resource locations](https://minecraft.wiki/w/Resource_location) (also known as "resource identifiers" and "namespaced IDs") diff --git a/vendor/valence/crates/valence_ident/src/lib.rs b/vendor/valence/crates/valence_ident/src/lib.rs new file mode 100644 index 00000000..831fbc18 --- /dev/null +++ b/vendor/valence/crates/valence_ident/src/lib.rs @@ -0,0 +1,266 @@ +#![doc = include_str!("../README.md")] + +use std::borrow::Borrow; +use std::fmt; +use std::fmt::Formatter; + +use bytes::Bytes; +use serde::de::Error as _; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use thiserror::Error; +/// Used internally by the `ident` macro. Not public API. +#[doc(hidden)] +pub use valence_bytes::Utf8Bytes; +/// Used internally by the `ident` macro. Not public API. +#[doc(hidden)] +pub use valence_ident_macros::parse_ident_str; + +/// Creates a new [`Ident`] at compile time from a string literal. A compile +/// error is raised if the string is not a valid resource identifier. +/// +/// The type of the expression returned by this macro is `Ident`. +/// The expression is usable in a `const` context. +/// +/// # Examples +/// +/// ``` +/// # use valence_ident::{ident, Ident}; +/// let my_ident: Ident = ident!("apple"); +/// +/// println!("{my_ident}"); +/// ``` +#[macro_export] +macro_rules! ident { + ($string:literal) => { + // SAFETY: parse_ident_str returns a &'static str, which is guaranteed to be + // valid UTF-8 + $crate::Ident::new_unchecked($crate::Utf8Bytes::from_static($crate::parse_ident_str!( + $string + ))) + }; +} + +/// A wrapper around [`Utf8Bytes`] which guarantees the wrapped string is a +/// valid resource identifier. +/// +/// A resource identifier is a string divided into a "namespace" part and a +/// "path" part. For instance `minecraft:apple` and `valence:frobnicator` are +/// both valid identifiers. A string must match the regex +/// `^([a-z0-9_.-]+:)?[a-z0-9_.-\/]+$` to be successfully parsed. +/// +/// While parsing, if the namespace part is left off (the part before and +/// including the colon) then "minecraft:" is inserted at the beginning of the +/// string. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Ident { + string: Utf8Bytes, +} + +/// The error type created when an [`Ident`] cannot be parsed from a +/// string. Contains the string that failed to parse. +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Error)] +#[error("invalid resource identifier \"{0}\"")] +pub struct IdentError(pub Utf8Bytes); + +impl Ident { + pub fn is_valid(string: &str) -> bool { + match string.split_once(':') { + Some((namespace, path)) => check_namespace(namespace) && check_path(path), + None => check_path(string), + } + } + + pub fn new(string: impl Into) -> Result { + parse(string.into()) + } + + /// Used internally by the `ident` macro. Not public API. + #[doc(hidden)] + pub const fn new_unchecked(string: Utf8Bytes) -> Self { + Self { string } + } + + pub fn as_str(&self) -> &str { + &self.string + } + + pub fn into_inner(self) -> Utf8Bytes { + self.string + } + + /// Returns the namespace part of this resource identifier (the part before + /// the colon). + pub fn namespace(&self) -> &str { + self.namespace_and_path().0 + } + + /// Returns the path part of this resource identifier (the part after the + /// colon). + pub fn path(&self) -> &str { + self.namespace_and_path().1 + } + + pub fn namespace_and_path(&self) -> (&str, &str) { + self.as_str() + .split_once(':') + .expect("invalid resource identifier") + } +} + +fn check_namespace(s: &str) -> bool { + !s.is_empty() + && s.chars() + .all(|c| matches!(c, 'a'..='z' | '0'..='9' | '_' | '.' | '-')) +} + +fn check_path(s: &str) -> bool { + !s.is_empty() + && s.chars() + .all(|c| matches!(c, 'a'..='z' | '0'..='9' | '_' | '.' | '-' | '/')) +} + +fn parse(string: Utf8Bytes) -> Result { + match string.split_once(':') { + Some((namespace, path)) if check_namespace(namespace) && check_path(path) => { + Ok(Ident::new_unchecked(string)) + } + None if check_path(&string) => { + let string = format!("minecraft:{string}").into(); + Ok(Ident::new_unchecked(string)) + } + _ => Err(IdentError(string)), + } +} + +impl AsRef for Ident { + fn as_ref(&self) -> &str { + self.as_str() + } +} + +impl Borrow for Ident { + fn borrow(&self) -> &str { + self.as_ref() + } +} + +impl From for String { + fn from(value: Ident) -> Self { + value.as_str().to_owned() + } +} + +impl TryFrom for Ident { + type Error = IdentError; + + fn try_from(value: Utf8Bytes) -> Result { + parse(value) + } +} + +// TODO: +// impl FromStr for Ident { +// type Err = IdentError; +// +// fn from_str(s: &str) -> Result { +// Ok(Ident::new(s)?.into()) +// } +// } +// +// impl<'a> TryFrom<&'a str> for Ident { +// type Error = IdentError; +// +// fn try_from(value: &'a str) -> Result { +// Ok(Ident::new(value)?.into()) +// } +// } +// +// impl TryFrom for Ident { +// type Error = IdentError; +// +// fn try_from(value: String) -> Result { +// Ok(Ident::new(value)?.into()) +// } +// } +// +// impl<'a> TryFrom> for Ident { +// type Error = IdentError; +// +// fn try_from(value: Cow<'a, str>) -> Result { +// Ok(Ident::new(value)?.into()) +// } +// } + +impl fmt::Debug for Ident { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + self.as_ref().fmt(f) + } +} + +impl fmt::Display for Ident { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + self.as_ref().fmt(f) + } +} + +impl Serialize for Ident { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + self.string.serialize(serializer) + } +} + +impl<'de> Deserialize<'de> for Ident { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let bytes = Bytes::from_owner(String::deserialize(deserializer)?); + let bytes = Utf8Bytes::try_from(bytes).map_err(D::Error::custom)?; + Ident::try_from(bytes).map_err(D::Error::custom) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn check_namespace_and_path() { + let id = ident!("namespace:path"); + assert_eq!(id.namespace(), "namespace"); + assert_eq!(id.path(), "path"); + } + + #[test] + fn parse_valid() { + ident!("minecraft:whatever"); + ident!("_what-ever55_:.whatever/whatever123456789_"); + ident!("valence:frobnicator"); + } + + #[test] + #[should_panic] + fn parse_invalid_0() { + Ident::new("").unwrap(); + } + + #[test] + #[should_panic] + fn parse_invalid_1() { + Ident::new(":").unwrap(); + } + + #[test] + #[should_panic] + fn parse_invalid_2() { + Ident::new("foo:bar:baz").unwrap(); + } + + #[test] + fn equality() { + assert_eq!(ident!("minecraft:my.identifier"), ident!("my.identifier")); + } +} diff --git a/vendor/valence/crates/valence_ident_macros/Cargo.toml b/vendor/valence/crates/valence_ident_macros/Cargo.toml new file mode 100644 index 00000000..f83651c8 --- /dev/null +++ b/vendor/valence/crates/valence_ident_macros/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "valence_ident_macros" +description = "Procedural macros for valence_ident" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[lib] +proc-macro = true + +[dependencies] +proc-macro2.workspace = true +quote.workspace = true +syn = { workspace = true, features = ["full"] } diff --git a/vendor/valence/crates/valence_ident_macros/README.md b/vendor/valence/crates/valence_ident_macros/README.md new file mode 100644 index 00000000..d6c164fc --- /dev/null +++ b/vendor/valence/crates/valence_ident_macros/README.md @@ -0,0 +1,3 @@ +# valence_ident_macros + +Proc macros for `valence_ident`. diff --git a/vendor/valence/crates/valence_ident_macros/src/lib.rs b/vendor/valence/crates/valence_ident_macros/src/lib.rs new file mode 100644 index 00000000..ab9a2e12 --- /dev/null +++ b/vendor/valence/crates/valence_ident_macros/src/lib.rs @@ -0,0 +1,45 @@ +#![doc = include_str!("../README.md")] + +use proc_macro::TokenStream as StdTokenStream; +use proc_macro2::TokenStream; +use quote::quote; +use syn::{Error, LitStr, Result, parse2}; + +#[proc_macro] +pub fn parse_ident_str(item: StdTokenStream) -> StdTokenStream { + parse_ident_str_inner(item.into()) + .unwrap_or_else(Error::into_compile_error) + .into() +} + +fn parse_ident_str_inner(item: TokenStream) -> Result { + let ident_lit: LitStr = parse2(item)?; + let mut ident = ident_lit.value(); + + match ident.split_once(':') { + Some((namespace, path)) if check_namespace(namespace) && check_path(path) => {} + None if check_path(&ident) => { + ident = format!("minecraft:{ident}"); + } + _ => { + return Err(syn::Error::new( + ident_lit.span(), + "string cannot be parsed as a resource identifier", + )); + } + } + + Ok(quote!(#ident)) +} + +fn check_namespace(s: &str) -> bool { + !s.is_empty() + && s.chars() + .all(|c| matches!(c, 'a'..='z' | '0'..='9' | '_' | '.' | '-')) +} + +fn check_path(s: &str) -> bool { + !s.is_empty() + && s.chars() + .all(|c| matches!(c, 'a'..='z' | '0'..='9' | '_' | '.' | '-' | '/')) +} diff --git a/vendor/valence/crates/valence_inventory/Cargo.toml b/vendor/valence/crates/valence_inventory/Cargo.toml new file mode 100644 index 00000000..f38aa99a --- /dev/null +++ b/vendor/valence/crates/valence_inventory/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "valence_inventory" +description = "Inventory support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_app.workspace = true +bevy_ecs.workspace = true +derive_more.workspace = true +tracing.workspace = true +valence_server.workspace = true diff --git a/vendor/valence/crates/valence_inventory/README.md b/vendor/valence/crates/valence_inventory/README.md new file mode 100644 index 00000000..d5b2615b --- /dev/null +++ b/vendor/valence/crates/valence_inventory/README.md @@ -0,0 +1,31 @@ +# valence_inventory + +The inventory system. + +This module contains the systems and components needed to handle +inventories. By default, clients will have a player inventory attached to +them. + +# Components + +- [`Inventory`]: The inventory component. This is the thing that holds + items. +- [`OpenInventory`]: The component that is attached to clients when they + have an inventory open. + +# Examples + +An example system that will let you access all player's inventories: + +``` +# use bevy_ecs::prelude::*; +# use valence_inventory::*; +# use valence_server::client::Client; +fn system(clients: Query<(&Client, &Inventory)>) {} +``` + +### See also + +Examples related to inventories in the `valence/examples/` directory: +- `building` +- `chest` diff --git a/vendor/valence/crates/valence_inventory/src/lib.rs b/vendor/valence/crates/valence_inventory/src/lib.rs new file mode 100644 index 00000000..6e450eac --- /dev/null +++ b/vendor/valence/crates/valence_inventory/src/lib.rs @@ -0,0 +1,1449 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::type_complexity)] + +use std::borrow::Cow; +use std::iter::FusedIterator; +use std::num::Wrapping; +use std::ops::Range; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +use player_inventory::PlayerInventory; +use tracing::{debug, warn}; +use valence_server::client::{Client, FlushPacketsSet, SpawnClientsSet}; +use valence_server::event_loop::{EventLoopPreUpdate, PacketEvent}; +pub use valence_server::protocol::packets::play::click_slot_c2s::{ClickMode, SlotChange}; +use valence_server::protocol::packets::play::open_screen_s2c::WindowType; +pub use valence_server::protocol::packets::play::player_action_c2s::PlayerAction; +use valence_server::protocol::packets::play::{ + ClickSlotC2s, CloseHandledScreenC2s, CloseScreenS2c, CreativeInventoryActionC2s, InventoryS2c, + OpenScreenS2c, PlayerActionC2s, ScreenHandlerSlotUpdateS2c, UpdateSelectedSlotC2s, + UpdateSelectedSlotS2c, +}; +use valence_server::protocol::{VarInt, WritePacket}; +use valence_server::text::IntoText; +use valence_server::{GameMode, ItemKind, ItemStack, Text}; + +pub mod player_inventory; +mod validate; + +pub struct InventoryPlugin; + +impl Plugin for InventoryPlugin { + fn build(&self, app: &mut bevy_app::App) { + app.add_systems( + PreUpdate, + init_new_client_inventories.after(SpawnClientsSet), + ) + .add_systems( + PostUpdate, + ( + update_client_on_close_inventory.before(update_open_inventories), + update_player_selected_slot, + update_open_inventories, + update_player_inventories, + ) + .before(FlushPacketsSet), + ) + .add_systems( + EventLoopPreUpdate, + ( + handle_update_selected_slot, + handle_click_slot, + handle_creative_inventory_action, + handle_close_handled_screen, + handle_player_actions, + ), + ) + .init_resource::() + .add_event::() + .add_event::() + .add_event::() + .add_event::(); + } +} + +#[derive(Debug, Clone, Component)] +pub struct Inventory { + title: Text, + kind: InventoryKind, + slots: Box<[ItemStack]>, + /// Contains a set bit for each modified slot in `slots`. + #[doc(hidden)] + pub changed: u64, +} + +impl Inventory { + pub fn new(kind: InventoryKind) -> Self { + // TODO: default title to the correct translation key instead + Self::with_title(kind, "Inventory") + } + + pub fn with_title<'a>(kind: InventoryKind, title: impl IntoText<'a>) -> Self { + Inventory { + title: title.into_cow_text().into_owned(), + kind, + slots: vec![ItemStack::EMPTY; kind.slot_count()].into(), + changed: 0, + } + } + + #[track_caller] + pub fn slot(&self, idx: u16) -> &ItemStack { + self.slots + .get(idx as usize) + .expect("slot index out of range") + } + + /// Sets the slot at the given index to the given item stack. + /// + /// See also [`Inventory::replace_slot`]. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::{ItemStack, ItemKind}; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// assert_eq!(inv.slot(0).item, ItemKind::Diamond); + /// ``` + #[track_caller] + #[inline] + pub fn set_slot(&mut self, idx: u16, item: impl Into) { + let _ = self.replace_slot(idx, item); + } + + /// Replaces the slot at the given index with the given item stack, and + /// returns the old stack in that slot. + /// + /// See also [`Inventory::set_slot`]. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::{ItemStack, ItemKind}; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// let old = inv.replace_slot(0, ItemStack::new(ItemKind::IronIngot, 1, None)); + /// assert_eq!(old.item, ItemKind::Diamond); + /// ``` + #[track_caller] + #[must_use] + pub fn replace_slot(&mut self, idx: u16, item: impl Into) -> ItemStack { + assert!(idx < self.slot_count(), "slot index of {idx} out of bounds"); + + let new = item.into(); + let old = &mut self.slots[idx as usize]; + + if new != *old { + self.changed |= 1 << idx; + } + + std::mem::replace(old, new) + } + + /// Swap the contents of two slots. If the slots are the same, nothing + /// happens. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::{ItemStack, ItemKind}; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// assert!(inv.slot(1).is_empty()); + /// inv.swap_slot(0, 1); + /// assert_eq!(inv.slot(1).item, ItemKind::Diamond); + /// ``` + #[track_caller] + pub fn swap_slot(&mut self, idx_a: u16, idx_b: u16) { + assert!( + idx_a < self.slot_count(), + "slot index of {idx_a} out of bounds" + ); + assert!( + idx_b < self.slot_count(), + "slot index of {idx_b} out of bounds" + ); + + if idx_a == idx_b || self.slots[idx_a as usize] == self.slots[idx_b as usize] { + // Nothing to do here, ignore. + return; + } + + self.changed |= 1 << idx_a; + self.changed |= 1 << idx_b; + + self.slots.swap(idx_a as usize, idx_b as usize); + } + + /// Set the amount of items in the given slot without replacing the slot + /// entirely. Valid values are 1-127, inclusive, and `amount` will be + /// clamped to this range. If the slot is empty, nothing happens. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::{ItemStack, ItemKind}; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// inv.set_slot_amount(0, 64); + /// assert_eq!(inv.slot(0).count, 64); + /// ``` + #[track_caller] + pub fn set_slot_amount(&mut self, idx: u16, amount: i8) { + assert!(idx < self.slot_count(), "slot index out of range"); + + let item = &mut self.slots[idx as usize]; + + if !item.is_empty() { + if item.count == amount { + return; + } + item.count = amount; + self.changed |= 1 << idx; + } + } + + pub fn slot_count(&self) -> u16 { + self.slots.len() as u16 + } + + pub fn slots( + &self, + ) -> impl ExactSizeIterator + DoubleEndedIterator + FusedIterator + Clone + '_ + { + self.slots.iter() + } + + pub fn kind(&self) -> InventoryKind { + self.kind + } + + /// The text displayed on the inventory's title bar. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::{ItemStack, ItemKind}; + /// # use valence_server::text::Text; + /// let inv = Inventory::with_title(InventoryKind::Generic9x3, "Box of Holding"); + /// assert_eq!(inv.title(), &Text::from("Box of Holding")); + /// ``` + pub fn title(&self) -> &Text { + &self.title + } + + /// Set the text displayed on the inventory's title bar. + /// + /// To get the old title, use [`Inventory::replace_title`]. + /// + /// ``` + /// # use valence_inventory::*; + /// let mut inv = Inventory::new(InventoryKind::Generic9x3); + /// inv.set_title("Box of Holding"); + /// ``` + #[inline] + pub fn set_title<'a>(&mut self, title: impl IntoText<'a>) { + let _ = self.replace_title(title); + } + + /// Replace the text displayed on the inventory's title bar, and returns the + /// old text. + #[must_use] + pub fn replace_title<'a>(&mut self, title: impl IntoText<'a>) -> Text { + // TODO: set title modified flag + std::mem::replace(&mut self.title, title.into_cow_text().into_owned()) + } + + pub(crate) fn slot_slice(&self) -> &[ItemStack] { + &self.slots + } + + /// Returns the first empty slot in the given range, or `None` if there are + /// no empty slots in the range. + /// + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::*; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 1, None)); + /// inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None)); + /// assert_eq!(inv.first_empty_slot_in(0..6), Some(1)); + /// assert_eq!(inv.first_empty_slot_in(2..6), Some(4)); + /// ``` + #[track_caller] + #[must_use] + pub fn first_empty_slot_in(&self, mut range: Range) -> Option { + assert!( + (0..=self.slot_count()).contains(&range.start) + && (0..=self.slot_count()).contains(&range.end), + "slot range out of range" + ); + + range.find(|&idx| self.slots[idx as usize].is_empty()) + } + + /// Returns the first empty slot in the inventory, or `None` if there are no + /// empty slots. + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::*; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 1, None)); + /// inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None)); + /// assert_eq!(inv.first_empty_slot(), Some(1)); + /// ``` + #[inline] + pub fn first_empty_slot(&self) -> Option { + self.first_empty_slot_in(0..self.slot_count()) + } + + /// Returns the first slot with the given [`ItemKind`] in the inventory + /// where `count < stack_max`, or `None` if there are no empty slots. + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::*; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 64, None)); + /// inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None)); + /// inv.set_slot(4, ItemStack::new(ItemKind::GoldIngot, 1, None)); + /// assert_eq!( + /// inv.first_slot_with_item_in(ItemKind::GoldIngot, 64, 0..5), + /// Some(4) + /// ); + /// ``` + pub fn first_slot_with_item_in( + &self, + item: ItemKind, + stack_max: i8, + mut range: Range, + ) -> Option { + assert!( + (0..=self.slot_count()).contains(&range.start) + && (0..=self.slot_count()).contains(&range.end), + "slot range out of range" + ); + assert!(stack_max > 0, "stack_max must be greater than 0"); + + range.find(|&idx| { + let stack = &self.slots[idx as usize]; + stack.item == item && stack.count < stack_max + }) + } + + /// Returns the first slot with the given [`ItemKind`] in the inventory + /// where `count < stack_max`, or `None` if there are no empty slots. + /// ``` + /// # use valence_inventory::*; + /// # use valence_server::item::*; + /// let mut inv = Inventory::new(InventoryKind::Generic9x1); + /// inv.set_slot(0, ItemStack::new(ItemKind::Diamond, 1, None)); + /// inv.set_slot(2, ItemStack::new(ItemKind::GoldIngot, 64, None)); + /// inv.set_slot(3, ItemStack::new(ItemKind::IronIngot, 1, None)); + /// inv.set_slot(4, ItemStack::new(ItemKind::GoldIngot, 1, None)); + /// assert_eq!(inv.first_slot_with_item(ItemKind::GoldIngot, 64), Some(4)); + /// ``` + #[inline] + pub fn first_slot_with_item(&self, item: ItemKind, stack_max: i8) -> Option { + self.first_slot_with_item_in(item, stack_max, 0..self.slot_count()) + } +} + +/// Miscellaneous inventory data. +#[derive(Component, Debug)] +pub struct ClientInventoryState { + /// The current window ID. Incremented when inventories are opened. + window_id: u8, + state_id: Wrapping, + /// Tracks what slots have been changed by this client in this tick, so we + /// don't need to send updates for them. + slots_changed: u64, + /// Whether the client has updated the cursor item in this tick. This is not + /// on the `CursorItem` component to make maintaining accurate change + /// detection for end users easier. + client_updated_cursor_item: bool, +} + +impl ClientInventoryState { + #[doc(hidden)] + pub fn window_id(&self) -> u8 { + self.window_id + } + + #[doc(hidden)] + pub fn state_id(&self) -> Wrapping { + self.state_id + } +} + +/// Indicates which hotbar slot the player is currently holding. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Component, Deref)] +pub struct HeldItem { + held_item_slot: u16, +} + +impl HeldItem { + /// The slot ID of the currently held item, in the range 36-44 inclusive. + /// This value is safe to use on the player's inventory directly. + pub fn slot(&self) -> u16 { + self.held_item_slot + } + + pub fn hotbar_idx(&self) -> u8 { + PlayerInventory::slot_to_hotbar(self.held_item_slot) + } + + pub fn set_slot(&mut self, slot: u16) { + // temp + assert!( + PlayerInventory::SLOTS_HOTBAR.contains(&slot), + "slot index of {slot} out of bounds" + ); + + self.held_item_slot = slot; + } + + pub fn set_hotbar_idx(&mut self, hotbar_idx: u8) { + self.set_slot(PlayerInventory::hotbar_to_slot(hotbar_idx)) + } +} + +/// The item stack that the client thinks it's holding under the mouse +/// cursor. +#[derive(Component, Clone, PartialEq, Default, Debug, Deref, DerefMut)] +pub struct CursorItem(pub ItemStack); + +/// Used to indicate that the client with this component is currently viewing +/// an inventory. +#[derive(Component, Clone, Debug)] +pub struct OpenInventory { + /// The entity with the `Inventory` component that the client is currently + /// viewing. + pub entity: Entity, + client_changed: u64, +} + +impl OpenInventory { + pub fn new(entity: Entity) -> Self { + OpenInventory { + entity, + client_changed: 0, + } + } +} + +/// A helper to represent the inventory window that the player is currently +/// viewing. Handles dispatching reads to the correct inventory. +/// +/// This is a read-only version of [`InventoryWindowMut`]. +/// +/// ``` +/// # use valence_inventory::*; +/// # use valence_server::item::*; +/// let mut player_inventory = Inventory::new(InventoryKind::Player); +/// player_inventory.set_slot(36, ItemStack::new(ItemKind::Diamond, 1, None)); +/// +/// let target_inventory = Inventory::new(InventoryKind::Generic9x3); +/// let window = InventoryWindow::new(&player_inventory, Some(&target_inventory)); +/// +/// assert_eq!(window.slot(54), &ItemStack::new(ItemKind::Diamond, 1, None)); +/// ``` +pub struct InventoryWindow<'a> { + player_inventory: &'a Inventory, + open_inventory: Option<&'a Inventory>, +} + +impl<'a> InventoryWindow<'a> { + pub fn new(player_inventory: &'a Inventory, open_inventory: Option<&'a Inventory>) -> Self { + Self { + player_inventory, + open_inventory, + } + } + + #[track_caller] + pub fn slot(&self, idx: u16) -> &ItemStack { + if let Some(open_inv) = self.open_inventory.as_ref() { + if idx < open_inv.slot_count() { + open_inv.slot(idx) + } else { + self.player_inventory + .slot(convert_to_player_slot_id(open_inv.kind(), idx)) + } + } else { + self.player_inventory.slot(idx) + } + } + + #[track_caller] + pub fn slot_count(&self) -> u16 { + if let Some(open_inv) = &self.open_inventory { + // when the window is split, we can only access the main slots of player's + // inventory + PlayerInventory::MAIN_SIZE + open_inv.slot_count() + } else { + self.player_inventory.slot_count() + } + } +} + +/// A helper to represent the inventory window that the player is currently +/// viewing. Handles dispatching reads/writes to the correct inventory. +/// +/// This is a writable version of [`InventoryWindow`]. +/// +/// ``` +/// # use valence_inventory::*; +/// # use valence_server::item::*; +/// let mut player_inventory = Inventory::new(InventoryKind::Player); +/// let mut target_inventory = Inventory::new(InventoryKind::Generic9x3); +/// let mut window = InventoryWindowMut::new(&mut player_inventory, Some(&mut target_inventory)); +/// +/// window.set_slot(54, ItemStack::new(ItemKind::Diamond, 1, None)); +/// +/// assert_eq!( +/// player_inventory.slot(36), +/// &ItemStack::new(ItemKind::Diamond, 1, None) +/// ); +/// ``` +pub struct InventoryWindowMut<'a> { + player_inventory: &'a mut Inventory, + open_inventory: Option<&'a mut Inventory>, +} + +impl<'a> InventoryWindowMut<'a> { + pub fn new( + player_inventory: &'a mut Inventory, + open_inventory: Option<&'a mut Inventory>, + ) -> Self { + Self { + player_inventory, + open_inventory, + } + } + + #[track_caller] + pub fn slot(&self, idx: u16) -> &ItemStack { + if let Some(open_inv) = self.open_inventory.as_ref() { + if idx < open_inv.slot_count() { + open_inv.slot(idx) + } else { + self.player_inventory + .slot(convert_to_player_slot_id(open_inv.kind(), idx)) + } + } else { + self.player_inventory.slot(idx) + } + } + + #[track_caller] + #[must_use] + pub fn replace_slot(&mut self, idx: u16, item: impl Into) -> ItemStack { + assert!(idx < self.slot_count(), "slot index of {idx} out of bounds"); + + if let Some(open_inv) = self.open_inventory.as_mut() { + if idx < open_inv.slot_count() { + open_inv.replace_slot(idx, item) + } else { + self.player_inventory + .replace_slot(convert_to_player_slot_id(open_inv.kind(), idx), item) + } + } else { + self.player_inventory.replace_slot(idx, item) + } + } + + #[track_caller] + #[inline] + pub fn set_slot(&mut self, idx: u16, item: impl Into) { + let _ = self.replace_slot(idx, item); + } + + pub fn slot_count(&self) -> u16 { + if let Some(open_inv) = &self.open_inventory { + // when the window is split, we can only access the main slots of player's + // inventory + PlayerInventory::MAIN_SIZE + open_inv.slot_count() + } else { + self.player_inventory.slot_count() + } + } +} + +/// Attach the necessary inventory components to new clients. +fn init_new_client_inventories(clients: Query>, mut commands: Commands) { + for entity in &clients { + commands.entity(entity).insert(( + Inventory::new(InventoryKind::Player), + CursorItem(ItemStack::EMPTY), + ClientInventoryState { + window_id: 0, + state_id: Wrapping(0), + slots_changed: 0, + client_updated_cursor_item: false, + }, + HeldItem { + // First slot of the hotbar. + held_item_slot: 36, + }, + )); + } +} + +/// Send updates for each client's player inventory. +fn update_player_inventories( + mut query: Query< + ( + &mut Inventory, + &mut Client, + &mut ClientInventoryState, + Ref, + ), + Without, + >, +) { + for (mut inventory, mut client, mut inv_state, cursor_item) in &mut query { + if inventory.kind != InventoryKind::Player { + warn!("Inventory on client entity is not a player inventory"); + } + + if inventory.changed == u64::MAX { + // Update the whole inventory. + + inv_state.state_id += 1; + + client.write_packet(&InventoryS2c { + window_id: 0, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(inventory.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + + inventory.changed = 0; + inv_state.slots_changed = 0; + + // Skip updating the cursor item because we just updated the whole inventory. + continue; + } else if inventory.changed != 0 { + // Send the modified slots. + + // The slots that were NOT modified by this client, and they need to be sent + let changed_filtered = inventory.changed & !inv_state.slots_changed; + + if changed_filtered != 0 { + inv_state.state_id += 1; + + for (i, slot) in inventory.slots.iter().enumerate() { + if ((changed_filtered >> i) & 1) == 1 { + client.write_packet(&ScreenHandlerSlotUpdateS2c { + window_id: 0, + state_id: VarInt(inv_state.state_id.0), + slot_idx: i as i16, + slot_data: Cow::Borrowed(slot), + }); + } + } + } + + inventory.changed = 0; + inv_state.slots_changed = 0; + } + + if cursor_item.is_changed() && !inv_state.client_updated_cursor_item { + // Contrary to what you might think, we actually don't want to increment the + // state ID here because the client doesn't actually acknowledge the + // state_id change for this packet specifically. See #304. + + client.write_packet(&ScreenHandlerSlotUpdateS2c { + window_id: -1, + state_id: VarInt(inv_state.state_id.0), + slot_idx: -1, + slot_data: Cow::Borrowed(&cursor_item.0), + }); + } + + inv_state.client_updated_cursor_item = false; + } +} + +/// Handles the `OpenInventory` component being added to a client, which +/// indicates that the client is now viewing an inventory, and sends inventory +/// updates to the client when the inventory is modified. +fn update_open_inventories( + mut clients: Query<( + Entity, + &mut Client, + &mut ClientInventoryState, + &CursorItem, + &mut OpenInventory, + )>, + mut inventories: Query<&mut Inventory>, + mut commands: Commands, +) { + // These operations need to happen in this order. + + // Send the inventory contents to all clients that are viewing an inventory. + for (client_entity, mut client, mut inv_state, cursor_item, mut open_inventory) in &mut clients + { + // Validate that the inventory exists. + let Ok(mut inventory) = inventories.get_mut(open_inventory.entity) else { + // The inventory no longer exists, so close the inventory. + commands.entity(client_entity).remove::(); + + client.write_packet(&CloseScreenS2c { + window_id: inv_state.window_id, + }); + + continue; + }; + + if open_inventory.is_added() { + // Send the inventory to the client if the client just opened the inventory. + inv_state.window_id = inv_state.window_id % 100 + 1; + open_inventory.client_changed = 0; + + client.write_packet(&OpenScreenS2c { + window_id: VarInt(inv_state.window_id.into()), + window_type: WindowType::from(inventory.kind), + window_title: Cow::Borrowed(&inventory.title), + }); + + client.write_packet(&InventoryS2c { + window_id: inv_state.window_id, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(inventory.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + } else { + // The client is already viewing the inventory. + + if inventory.changed == u64::MAX { + // Send the entire inventory. + + inv_state.state_id += 1; + + client.write_packet(&InventoryS2c { + window_id: inv_state.window_id, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(inventory.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }) + } else { + // Send the changed slots. + + // The slots that were NOT changed by this client, and they need to be sent. + let changed_filtered = inventory.changed & !open_inventory.client_changed; + + if changed_filtered != 0 { + inv_state.state_id += 1; + + for (i, slot) in inventory.slots.iter().enumerate() { + if (changed_filtered >> i) & 1 == 1 { + client.write_packet(&ScreenHandlerSlotUpdateS2c { + window_id: inv_state.window_id as i8, + state_id: VarInt(inv_state.state_id.0), + slot_idx: i as i16, + slot_data: Cow::Borrowed(slot), + }); + } + } + } + } + } + + open_inventory.client_changed = 0; + inv_state.slots_changed = 0; + inv_state.client_updated_cursor_item = false; + inventory.changed = 0; + } +} + +/// Handles clients telling the server that they are closing an inventory. +fn handle_close_handled_screen(mut packets: EventReader, mut commands: Commands) { + for packet in packets.read() { + if packet.decode::().is_some() { + if let Some(mut entity) = commands.get_entity(packet.client) { + entity.remove::(); + } + } + } +} + +/// Detects when a client's `OpenInventory` component is removed, which +/// indicates that the client is no longer viewing an inventory. +fn update_client_on_close_inventory( + mut removals: RemovedComponents, + mut clients: Query<(&mut Client, &ClientInventoryState)>, +) { + for entity in &mut removals.read() { + if let Ok((mut client, inv_state)) = clients.get_mut(entity) { + client.write_packet(&CloseScreenS2c { + window_id: inv_state.window_id, + }) + } + } +} + +// TODO: make this event user friendly. +#[derive(Event, Clone, Debug)] +pub struct ClickSlotEvent { + pub client: Entity, + pub window_id: u8, + pub state_id: i32, + pub slot_id: i16, + pub button: i8, + pub mode: ClickMode, + pub slot_changes: Vec, + pub carried_item: ItemStack, +} + +#[derive(Event, Clone, Debug)] +pub struct DropItemStackEvent { + pub client: Entity, + pub from_slot: Option, + pub stack: ItemStack, +} + +fn handle_click_slot( + mut packets: EventReader, + mut clients: Query<( + &mut Client, + &mut Inventory, + &mut ClientInventoryState, + Option<&mut OpenInventory>, + &mut CursorItem, + )>, + mut inventories: Query<&mut Inventory, Without>, + mut drop_item_stack_events: EventWriter, + mut click_slot_events: EventWriter, +) { + for packet in packets.read() { + let Some(pkt) = packet.decode::() else { + // Not the packet we're looking for. + continue; + }; + + let Ok((mut client, mut client_inv, mut inv_state, open_inventory, mut cursor_item)) = + clients.get_mut(packet.client) + else { + // The client does not exist, ignore. + continue; + }; + + let open_inv = open_inventory + .as_ref() + .and_then(|open| inventories.get_mut(open.entity).ok()); + + if let Err(e) = validate::validate_click_slot_packet( + &pkt, + &client_inv, + open_inv.as_deref(), + &cursor_item, + ) { + debug!( + "failed to validate click slot packet for client {:#?}: \"{e:#}\" {pkt:#?}", + packet.client + ); + + // Resync the inventory. + + client.write_packet(&InventoryS2c { + window_id: if open_inv.is_some() { + inv_state.window_id + } else { + 0 + }, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(open_inv.unwrap_or(client_inv).slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + + continue; + } + + if pkt.slot_idx < 0 && pkt.mode == ClickMode::Click { + // The client is dropping the cursor item by clicking outside the window. + + let stack = std::mem::take(&mut cursor_item.0); + + if !stack.is_empty() { + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: None, + stack, + }); + } + } else if pkt.mode == ClickMode::DropKey { + // The client is dropping an item by pressing the drop key. + + let entire_stack = pkt.button == 1; + + // Needs to open the inventory for if the player is dropping an item while + // having an inventory open. + if let Some(open_inventory) = open_inventory { + // The player is interacting with an inventory that is open. + + let Ok(mut target_inventory) = inventories.get_mut(open_inventory.entity) else { + // The inventory does not exist, ignore. + continue; + }; + + if inv_state.state_id.0 != pkt.state_id.0 { + // Client is out of sync. Resync and ignore click. + + debug!("Client state id mismatch, resyncing"); + + inv_state.state_id += 1; + + client.write_packet(&InventoryS2c { + window_id: inv_state.window_id, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(target_inventory.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + + continue; + } + + if (0i16..target_inventory.slot_count() as i16).contains(&pkt.slot_idx) { + // The player is dropping an item from another inventory. + + let stack = target_inventory.slot(pkt.slot_idx as u16); + + if !stack.is_empty() { + let dropped = if entire_stack || stack.count == 1 { + target_inventory.replace_slot(pkt.slot_idx as u16, ItemStack::EMPTY) + } else { + let stack = stack.clone().with_count(stack.count - 1); + let mut old_slot = + target_inventory.replace_slot(pkt.slot_idx as u16, stack); + // we already checked that the slot was not empty and that the + // stack count is > 1 + old_slot.count = 1; + old_slot + }; + + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: Some(pkt.slot_idx as u16), + stack: dropped, + }); + } + } else { + // The player is dropping an item from their inventory. + let slot_id = + convert_to_player_slot_id(target_inventory.kind, pkt.slot_idx as u16); + + let stack = client_inv.slot(slot_id); + + if !stack.is_empty() { + let dropped = if entire_stack || stack.count == 1 { + client_inv.replace_slot(slot_id, ItemStack::EMPTY) + } else { + let stack = stack.clone().with_count(stack.count - 1); + let mut old_slot = client_inv.replace_slot(slot_id, stack); + // we already checked that the slot was not empty and that the + // stack count is > 1 + old_slot.count = 1; + old_slot + }; + + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: Some(slot_id), + stack: dropped, + }); + } + } + } else { + // The player has no inventory open and is dropping an item from their + // inventory. + + let stack = client_inv.slot(pkt.slot_idx as u16); + + if !stack.is_empty() { + let dropped = if entire_stack || stack.count == 1 { + client_inv.replace_slot(pkt.slot_idx as u16, ItemStack::EMPTY) + } else { + let stack = stack.clone().with_count(stack.count - 1); + let mut old_slot = client_inv.replace_slot(pkt.slot_idx as u16, stack); + // we already checked that the slot was not empty and that the + // stack count is > 1 + old_slot.count = 1; + old_slot + }; + + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: Some(pkt.slot_idx as u16), + stack: dropped, + }); + } + } + } else { + // The player is clicking a slot in an inventory. + + // Validate the window id. + if (pkt.window_id == 0) != open_inventory.is_none() { + warn!( + "Client sent a click with an invalid window id for current state: window_id = \ + {}, open_inventory present = {}", + pkt.window_id, + open_inventory.is_some() + ); + continue; + } + + if let Some(mut open_inventory) = open_inventory { + // The player is interacting with an inventory that is open. + + let Ok(mut target_inventory) = inventories.get_mut(open_inventory.entity) else { + // The inventory does not exist, ignore. + continue; + }; + + if inv_state.state_id.0 != pkt.state_id.0 { + // Client is out of sync. Resync and ignore click. + + debug!("Client state id mismatch, resyncing"); + + inv_state.state_id += 1; + + client.write_packet(&InventoryS2c { + window_id: inv_state.window_id, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(target_inventory.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + + continue; + } + + cursor_item.set_if_neq(CursorItem(pkt.carried_item.clone())); + + for slot in pkt.slot_changes.iter() { + if (0i16..target_inventory.slot_count() as i16).contains(&slot.idx) { + // The client is interacting with a slot in the target inventory. + target_inventory.set_slot(slot.idx as u16, slot.stack.clone()); + open_inventory.client_changed |= 1 << slot.idx; + } else { + // The client is interacting with a slot in their own inventory. + let slot_id = + convert_to_player_slot_id(target_inventory.kind, slot.idx as u16); + client_inv.set_slot(slot_id, slot.stack.clone()); + inv_state.slots_changed |= 1 << slot_id; + } + } + } else { + // The client is interacting with their own inventory. + + if inv_state.state_id.0 != pkt.state_id.0 { + // Client is out of sync. Resync and ignore the click. + + debug!("Client state id mismatch, resyncing"); + + inv_state.state_id += 1; + + client.write_packet(&InventoryS2c { + window_id: inv_state.window_id, + state_id: VarInt(inv_state.state_id.0), + slots: Cow::Borrowed(client_inv.slot_slice()), + carried_item: Cow::Borrowed(&cursor_item.0), + }); + + continue; + } + + cursor_item.set_if_neq(CursorItem(pkt.carried_item.clone())); + inv_state.client_updated_cursor_item = true; + + for slot in pkt.slot_changes.iter() { + if (0i16..client_inv.slot_count() as i16).contains(&slot.idx) { + client_inv.set_slot(slot.idx as u16, slot.stack.clone()); + inv_state.slots_changed |= 1 << slot.idx; + } else { + // The client is trying to interact with a slot that does not exist, + // ignore. + warn!( + "Client attempted to interact with slot {} which does not exist", + slot.idx + ); + } + } + } + + click_slot_events.send(ClickSlotEvent { + client: packet.client, + window_id: pkt.window_id, + state_id: pkt.state_id.0, + slot_id: pkt.slot_idx, + button: pkt.button, + mode: pkt.mode, + slot_changes: pkt.slot_changes.into(), + carried_item: pkt.carried_item, + }); + } + } +} + +fn handle_player_actions( + mut packets: EventReader, + mut clients: Query<(&mut Inventory, &mut ClientInventoryState, &HeldItem)>, + mut drop_item_stack_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + match pkt.action { + PlayerAction::DropAllItems => { + if let Ok((mut inv, mut inv_state, &held)) = clients.get_mut(packet.client) { + let stack = inv.replace_slot(held.slot(), ItemStack::EMPTY); + + if !stack.is_empty() { + inv_state.slots_changed |= 1 << held.slot(); + + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: Some(held.slot()), + stack, + }); + } + } + } + PlayerAction::DropItem => { + if let Ok((mut inv, mut inv_state, held)) = clients.get_mut(packet.client) { + let mut stack = inv.replace_slot(held.slot(), ItemStack::EMPTY); + + if !stack.is_empty() { + if stack.count > 1 { + inv.set_slot( + held.slot(), + stack.clone().with_count(stack.count - 1), + ); + + stack.count = 1; + } + + inv_state.slots_changed |= 1 << held.slot(); + + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: Some(held.slot()), + stack, + }) + } + } + } + PlayerAction::SwapItemWithOffhand => { + if let Ok((mut inv, _, held)) = clients.get_mut(packet.client) { + inv.swap_slot(held.slot(), PlayerInventory::SLOT_OFFHAND); + } + } + _ => {} + } + } + } +} + +// TODO: make this event user friendly. +#[derive(Event, Clone, Debug)] +pub struct CreativeInventoryActionEvent { + pub client: Entity, + pub slot: i16, + pub clicked_item: ItemStack, +} + +fn handle_creative_inventory_action( + mut packets: EventReader, + mut clients: Query<( + &mut Client, + &mut Inventory, + &mut ClientInventoryState, + &GameMode, + )>, + mut inv_action_events: EventWriter, + mut drop_item_stack_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + let Ok((mut client, mut inventory, mut inv_state, game_mode)) = + clients.get_mut(packet.client) + else { + continue; + }; + + if *game_mode != GameMode::Creative { + // The client is not in creative mode, ignore. + continue; + } + + if pkt.slot == -1 { + let stack = pkt.clicked_item.clone(); + + if !stack.is_empty() { + drop_item_stack_events.send(DropItemStackEvent { + client: packet.client, + from_slot: None, + stack, + }); + } + continue; + } + + if pkt.slot < 0 || pkt.slot >= inventory.slot_count() as i16 { + // The client is trying to interact with a slot that does not exist, ignore. + continue; + } + + // Set the slot without marking it as changed. + inventory.slots[pkt.slot as usize] = pkt.clicked_item.clone(); + + inv_state.state_id += 1; + + // HACK: notchian clients rely on the server to send the slot update when in + // creative mode. Simply marking the slot as changed is not enough. This was + // discovered because shift-clicking the destroy item slot in creative mode does + // not work without this hack. + client.write_packet(&ScreenHandlerSlotUpdateS2c { + window_id: 0, + state_id: VarInt(inv_state.state_id.0), + slot_idx: pkt.slot, + slot_data: Cow::Borrowed(&pkt.clicked_item), + }); + + inv_action_events.send(CreativeInventoryActionEvent { + client: packet.client, + slot: pkt.slot, + clicked_item: pkt.clicked_item, + }); + } + } +} + +#[derive(Event, Clone, Debug)] +pub struct UpdateSelectedSlotEvent { + pub client: Entity, + pub slot: u8, +} + +/// Handles the `HeldItem` component being changed on a client entity, which +/// indicates that the server has changed the selected hotbar slot. +fn update_player_selected_slot(mut clients: Query<(&mut Client, &HeldItem), Changed>) { + for (mut client, held_item) in &mut clients { + client.write_packet(&UpdateSelectedSlotS2c { + slot: held_item.hotbar_idx(), + }); + } +} + +/// Client to Server HeldItem Slot +fn handle_update_selected_slot( + mut packets: EventReader, + mut clients: Query<&mut HeldItem>, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut mut_held) = clients.get_mut(packet.client) { + let held = mut_held.bypass_change_detection(); + if pkt.slot > 8 { + // The client is trying to interact with a slot that does not exist, ignore. + continue; + } + + held.set_hotbar_idx(pkt.slot as u8); + + events.send(UpdateSelectedSlotEvent { + client: packet.client, + slot: pkt.slot as u8, + }); + } + } + } +} + +/// Convert a slot that is outside a target inventory's range to a slot that is +/// inside the player's inventory. +#[doc(hidden)] +pub fn convert_to_player_slot_id(target_kind: InventoryKind, slot_id: u16) -> u16 { + // the first slot in the player's general inventory + let offset = target_kind.slot_count() as u16; + slot_id - offset + 9 +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum InventoryKind { + Generic9x1, + Generic9x2, + Generic9x3, + Generic9x4, + Generic9x5, + Generic9x6, + Generic3x3, + Anvil, + Beacon, + BlastFurnace, + BrewingStand, + Crafting, + Enchantment, + Furnace, + Grindstone, + Hopper, + Lectern, + Loom, + Merchant, + ShulkerBox, + Smithing, + Smoker, + Cartography, + Stonecutter, + Player, +} + +impl InventoryKind { + /// The number of slots in this inventory. When the inventory is shown to + /// clients, this number does not include the player's main inventory slots. + pub const fn slot_count(self) -> usize { + match self { + InventoryKind::Generic9x1 => 9, + InventoryKind::Generic9x2 => 9 * 2, + InventoryKind::Generic9x3 => 9 * 3, + InventoryKind::Generic9x4 => 9 * 4, + InventoryKind::Generic9x5 => 9 * 5, + InventoryKind::Generic9x6 => 9 * 6, + InventoryKind::Generic3x3 => 3 * 3, + InventoryKind::Anvil => 4, + InventoryKind::Beacon => 1, + InventoryKind::BlastFurnace => 3, + InventoryKind::BrewingStand => 5, + InventoryKind::Crafting => 10, + InventoryKind::Enchantment => 2, + InventoryKind::Furnace => 3, + InventoryKind::Grindstone => 3, + InventoryKind::Hopper => 5, + InventoryKind::Lectern => 1, + InventoryKind::Loom => 4, + InventoryKind::Merchant => 3, + InventoryKind::ShulkerBox => 27, + InventoryKind::Smithing => 3, + InventoryKind::Smoker => 3, + InventoryKind::Cartography => 3, + InventoryKind::Stonecutter => 2, + InventoryKind::Player => 46, + } + } +} + +impl From for WindowType { + fn from(value: InventoryKind) -> Self { + match value { + InventoryKind::Generic9x1 => WindowType::Generic9x1, + InventoryKind::Generic9x2 => WindowType::Generic9x2, + InventoryKind::Generic9x3 => WindowType::Generic9x3, + InventoryKind::Generic9x4 => WindowType::Generic9x4, + InventoryKind::Generic9x5 => WindowType::Generic9x5, + InventoryKind::Generic9x6 => WindowType::Generic9x6, + InventoryKind::Generic3x3 => WindowType::Generic3x3, + InventoryKind::Anvil => WindowType::Anvil, + InventoryKind::Beacon => WindowType::Beacon, + InventoryKind::BlastFurnace => WindowType::BlastFurnace, + InventoryKind::BrewingStand => WindowType::BrewingStand, + InventoryKind::Crafting => WindowType::Crafting, + InventoryKind::Enchantment => WindowType::Enchantment, + InventoryKind::Furnace => WindowType::Furnace, + InventoryKind::Grindstone => WindowType::Grindstone, + InventoryKind::Hopper => WindowType::Hopper, + InventoryKind::Lectern => WindowType::Lectern, + InventoryKind::Loom => WindowType::Loom, + InventoryKind::Merchant => WindowType::Merchant, + InventoryKind::ShulkerBox => WindowType::ShulkerBox, + InventoryKind::Smithing => WindowType::Smithing, + InventoryKind::Smoker => WindowType::Smoker, + InventoryKind::Cartography => WindowType::Cartography, + InventoryKind::Stonecutter => WindowType::Stonecutter, + // arbitrarily chosen, because a player inventory technically does not have a window + // type + InventoryKind::Player => WindowType::Generic9x4, + } + } +} + +impl From for InventoryKind { + fn from(value: WindowType) -> Self { + match value { + WindowType::Generic9x1 => InventoryKind::Generic9x1, + WindowType::Generic9x2 => InventoryKind::Generic9x2, + WindowType::Generic9x3 => InventoryKind::Generic9x3, + WindowType::Generic9x4 => InventoryKind::Generic9x4, + WindowType::Generic9x5 => InventoryKind::Generic9x5, + WindowType::Generic9x6 => InventoryKind::Generic9x6, + WindowType::Generic3x3 => InventoryKind::Generic3x3, + WindowType::Anvil => InventoryKind::Anvil, + WindowType::Beacon => InventoryKind::Beacon, + WindowType::BlastFurnace => InventoryKind::BlastFurnace, + WindowType::BrewingStand => InventoryKind::BrewingStand, + WindowType::Crafting => InventoryKind::Crafting, + WindowType::Enchantment => InventoryKind::Enchantment, + WindowType::Furnace => InventoryKind::Furnace, + WindowType::Grindstone => InventoryKind::Grindstone, + WindowType::Hopper => InventoryKind::Hopper, + WindowType::Lectern => InventoryKind::Lectern, + WindowType::Loom => InventoryKind::Loom, + WindowType::Merchant => InventoryKind::Merchant, + WindowType::ShulkerBox => InventoryKind::ShulkerBox, + WindowType::Smithing => InventoryKind::Smithing, + WindowType::Smoker => InventoryKind::Smoker, + WindowType::Cartography => InventoryKind::Cartography, + WindowType::Stonecutter => InventoryKind::Stonecutter, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Resource)] +pub struct InventorySettings { + pub validate_actions: bool, +} + +impl Default for InventorySettings { + fn default() -> Self { + Self { + validate_actions: true, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_convert_to_player_slot() { + assert_eq!(convert_to_player_slot_id(InventoryKind::Generic9x3, 27), 9); + assert_eq!(convert_to_player_slot_id(InventoryKind::Generic9x3, 36), 18); + assert_eq!(convert_to_player_slot_id(InventoryKind::Generic9x3, 54), 36); + assert_eq!(convert_to_player_slot_id(InventoryKind::Generic9x1, 9), 9); + } + + #[test] + fn test_convert_hotbar_slot_id() { + assert_eq!(PlayerInventory::hotbar_to_slot(0), 36); + assert_eq!(PlayerInventory::hotbar_to_slot(4), 40); + assert_eq!(PlayerInventory::hotbar_to_slot(8), 44); + } +} diff --git a/vendor/valence/crates/valence_inventory/src/player_inventory.rs b/vendor/valence/crates/valence_inventory/src/player_inventory.rs new file mode 100644 index 00000000..95e7ba73 --- /dev/null +++ b/vendor/valence/crates/valence_inventory/src/player_inventory.rs @@ -0,0 +1,24 @@ +use std::ops::RangeInclusive; + +pub struct PlayerInventory; + +impl PlayerInventory { + pub const SLOT_OFFHAND: u16 = 45; + pub const SLOT_HEAD: u16 = 5; + pub const SLOT_CHEST: u16 = 6; + pub const SLOT_LEGS: u16 = 7; + pub const SLOT_FEET: u16 = 8; + pub const SLOTS_CRAFT_INPUT: RangeInclusive = 1..=4; + pub const SLOT_CRAFT_RESULT: u16 = 0; + pub const SLOTS_HOTBAR: RangeInclusive = 36..=44; + pub const SLOTS_MAIN: RangeInclusive = 9..=44; + pub const MAIN_SIZE: u16 = *Self::SLOTS_MAIN.end() - *Self::SLOTS_MAIN.start() + 1; + + pub const fn hotbar_to_slot(hotbar: u8) -> u16 { + *Self::SLOTS_HOTBAR.start() + (hotbar as u16) + } + + pub const fn slot_to_hotbar(slot: u16) -> u8 { + (slot - *Self::SLOTS_HOTBAR.start()) as u8 + } +} diff --git a/vendor/valence/crates/valence_inventory/src/validate.rs b/vendor/valence/crates/valence_inventory/src/validate.rs new file mode 100644 index 00000000..a0b0d064 --- /dev/null +++ b/vendor/valence/crates/valence_inventory/src/validate.rs @@ -0,0 +1,826 @@ +use valence_server::protocol::anyhow::{self, bail, ensure}; +use valence_server::protocol::packets::play::click_slot_c2s::ClickMode; +use valence_server::protocol::packets::play::ClickSlotC2s; + +use super::{CursorItem, Inventory, InventoryWindow}; +use crate::player_inventory::PlayerInventory; + +/// Validates a click slot packet enforcing that all fields are valid. +pub(super) fn validate_click_slot_packet( + packet: &ClickSlotC2s, + player_inventory: &Inventory, + open_inventory: Option<&Inventory>, + cursor_item: &CursorItem, +) -> anyhow::Result<()> { + ensure!( + (packet.window_id == 0) == open_inventory.is_none(), + "window id and open inventory mismatch: window_id: {} open_inventory: {}", + packet.window_id, + open_inventory.is_some() + ); + + let max_slot = if let Some(open_inv) = open_inventory { + // when the window is split, we can only access the main slots of player's + // inventory + PlayerInventory::MAIN_SIZE + open_inv.slot_count() + } else { + player_inventory.slot_count() + }; + + // check all slot ids and item counts are valid + ensure!( + packet.slot_changes.iter().all(|s| { + if !(0..=max_slot).contains(&(s.idx as u16)) { + return false; + } + + if !s.stack.is_empty() { + let max_stack_size = s.stack.item.max_stack().max(s.stack.count); + if !(1..=max_stack_size).contains(&(s.stack.count)) { + return false; + } + } + + true + }), + "invalid slot ids or item counts" + ); + + // check carried item count is valid + if !packet.carried_item.is_empty() { + let carried_item = &packet.carried_item; + + let max_stack_size = carried_item.item.max_stack().max(carried_item.count); + ensure!( + (1..=max_stack_size).contains(&carried_item.count), + "invalid carried item count" + ); + } + + match packet.mode { + ClickMode::Click => { + ensure!((0..=1).contains(&packet.button), "invalid button"); + ensure!( + (0..=max_slot).contains(&(packet.slot_idx as u16)) || packet.slot_idx == -999, + "invalid slot index" + ) + } + ClickMode::ShiftClick => { + ensure!((0..=1).contains(&packet.button), "invalid button"); + ensure!( + packet.carried_item.is_empty(), + "carried item must be empty for a hotbar swap" + ); + ensure!( + (0..=max_slot).contains(&(packet.slot_idx as u16)), + "invalid slot index" + ) + } + ClickMode::Hotbar => { + ensure!(matches!(packet.button, 0..=8 | 40), "invalid button"); + ensure!( + packet.carried_item.is_empty(), + "carried item must be empty for a hotbar swap" + ); + } + ClickMode::CreativeMiddleClick => { + ensure!(packet.button == 2, "invalid button"); + ensure!( + (0..=max_slot).contains(&(packet.slot_idx as u16)), + "invalid slot index" + ) + } + ClickMode::DropKey => { + ensure!((0..=1).contains(&packet.button), "invalid button"); + ensure!( + packet.carried_item.is_empty(), + "carried item must be empty for an item drop" + ); + ensure!( + (0..=max_slot).contains(&(packet.slot_idx as u16)), + "invalid slot index" + ) + } + ClickMode::Drag => { + ensure!( + matches!(packet.button, 0..=2 | 4..=6 | 8..=10), + "invalid button" + ); + ensure!( + (0..=max_slot).contains(&(packet.slot_idx as u16)) || packet.slot_idx == -999, + "invalid slot index" + ) + } + ClickMode::DoubleClick => ensure!(packet.button == 0, "invalid button"), + } + + // Check that items aren't being duplicated, i.e. conservation of mass. + + let window = InventoryWindow { + player_inventory, + open_inventory, + }; + + match packet.mode { + ClickMode::Click => { + if packet.slot_idx == -999 { + // Clicked outside the window, so the client is dropping an item + ensure!( + packet.slot_changes.is_empty(), + "slot modifications must be empty" + ); + + // Clicked outside the window + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + let expected_delta = match packet.button { + 1 => -1, + 0 => { + if !cursor_item.is_empty() { + -cursor_item.0.count as i32 + } else { + 0 + } + } + _ => unreachable!(), + }; + ensure!( + count_deltas == expected_delta, + "invalid item delta: expected {}, got {}", + expected_delta, + count_deltas + ); + } else { + ensure!( + packet.slot_changes.len() == 1, + "click must modify one slot, got {}", + packet.slot_changes.len() + ); + + let old_slot = window.slot(packet.slot_changes[0].idx as u16); + // TODO: make sure NBT is the same. + // Sometimes, the client will add nbt data to an item if it's missing, + // like "Damage" to a sword. + let should_swap: bool = packet.button == 0 + && match (!old_slot.is_empty(), !cursor_item.is_empty()) { + (true, true) => old_slot.item != cursor_item.item, + (true, false) => true, + (false, true) => cursor_item.count <= cursor_item.item.max_stack(), + (false, false) => false, + }; + + if should_swap { + // assert that a swap occurs + ensure!( + // There are some cases where the client will add NBT data that + // did not previously exist. + old_slot.item == packet.carried_item.item + && old_slot.count == packet.carried_item.count + && cursor_item.0 == packet.slot_changes[0].stack, + "swapped items must match" + ); + } else { + // assert that a merge occurs + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + ensure!( + count_deltas == 0, + "invalid item delta for stack merge: {}", + count_deltas + ); + } + } + } + ClickMode::ShiftClick => { + ensure!( + (2..=3).contains(&packet.slot_changes.len()), + "shift click must modify 2 or 3 slots, got {}", + packet.slot_changes.len() + ); + + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + ensure!( + count_deltas == 0, + "invalid item delta: expected 0, got {}", + count_deltas + ); + + let Some(item_kind) = packet + .slot_changes + .iter() + .find(|s| !s.stack.is_empty()) + .map(|s| s.stack.item) + else { + bail!("shift click must move an item"); + }; + + let old_slot_kind = window.slot(packet.slot_idx as u16).item; + ensure!( + old_slot_kind == item_kind, + "shift click must move the same item kind as modified slots" + ); + + // assert all moved items are the same kind + ensure!( + packet + .slot_changes + .iter() + .filter(|s| !s.stack.is_empty()) + .all(|s| s.stack.item == item_kind), + "shift click must move the same item kind" + ); + } + + ClickMode::Hotbar => { + ensure!( + packet.slot_changes.len() == 2, + "hotbar swap must modify two slots, got {}", + packet.slot_changes.len() + ); + + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + ensure!( + count_deltas == 0, + "invalid item delta: expected 0, got {}", + count_deltas + ); + + // assert that a swap occurs + let old_slots = [ + window.slot(packet.slot_changes[0].idx as u16), + window.slot(packet.slot_changes[1].idx as u16), + ]; + ensure!( + old_slots + .iter() + .any(|s| *s == &packet.slot_changes[0].stack) + && old_slots + .iter() + .any(|s| *s == &packet.slot_changes[1].stack), + "swapped items must match" + ); + } + ClickMode::CreativeMiddleClick => {} + ClickMode::DropKey => { + ensure!( + packet.slot_changes.len() == 1, + "drop key must modify exactly one slot" + ); + ensure!( + packet.slot_idx == packet.slot_changes.first().map(|s| s.idx).unwrap_or(-2), + "slot index does not match modified slot" + ); + + let old_slot = window.slot(packet.slot_idx as u16); + let new_slot = &packet.slot_changes[0].stack; + let is_transmuting = match (!old_slot.is_empty(), !new_slot.is_empty()) { + // TODO: make sure NBT is the same. + // Sometimes, the client will add nbt data to an item if it's missing, like + // "Damage" to a sword. + (true, true) => old_slot.item != new_slot.item, + (_, false) => false, + (false, true) => true, + }; + ensure!(!is_transmuting, "transmuting items is not allowed"); + + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + + let expected_delta = match packet.button { + 0 => -1, + 1 => { + if !old_slot.is_empty() { + -old_slot.count as i32 + } else { + 0 + } + } + _ => unreachable!(), + }; + ensure!( + count_deltas == expected_delta, + "invalid item delta: expected {}, got {}", + expected_delta, + count_deltas + ); + } + ClickMode::Drag => { + if matches!(packet.button, 2 | 6 | 10) { + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + ensure!( + count_deltas == 0, + "invalid item delta: expected 0, got {}", + count_deltas + ); + } else { + ensure!(packet.slot_changes.is_empty() && packet.carried_item == cursor_item.0); + } + } + ClickMode::DoubleClick => { + let count_deltas = calculate_net_item_delta(packet, &window, cursor_item); + ensure!( + count_deltas == 0, + "invalid item delta: expected 0, got {}", + count_deltas + ); + } + } + + Ok(()) +} + +/// Calculate the total difference in item counts if the changes in this packet +/// were to be applied. +/// +/// Returns a positive number if items were added to the window, and a negative +/// number if items were removed from the window. +fn calculate_net_item_delta( + packet: &ClickSlotC2s, + window: &InventoryWindow, + cursor_item: &CursorItem, +) -> i32 { + let mut net_item_delta: i32 = 0; + + for slot in packet.slot_changes.iter() { + let old_slot = window.slot(slot.idx as u16); + let new_slot = &slot.stack; + + net_item_delta += match (!old_slot.is_empty(), !new_slot.is_empty()) { + (true, true) => new_slot.count as i32 - old_slot.count as i32, + (true, false) => -(old_slot.count as i32), + (false, true) => new_slot.count as i32, + (false, false) => 0, + }; + } + + net_item_delta += match (!cursor_item.is_empty(), !packet.carried_item.is_empty()) { + (true, true) => packet.carried_item.count as i32 - cursor_item.count as i32, + (true, false) => -(cursor_item.count as i32), + (false, true) => packet.carried_item.count as i32, + (false, false) => 0, + }; + + net_item_delta +} + +#[cfg(test)] +mod tests { + use valence_server::nbt::Compound; + use valence_server::nbt::Value::Int; + use valence_server::protocol::packets::play::click_slot_c2s::SlotChange; + use valence_server::protocol::VarInt; + use valence_server::{ItemKind, ItemStack}; + + use super::*; + use crate::InventoryKind; + + #[test] + fn net_item_delta_1() { + let drag_packet = ClickSlotC2s { + window_id: 2, + state_id: VarInt(14), + slot_idx: -999, + button: 2, + mode: ClickMode::Drag, + slot_changes: vec![ + SlotChange { + idx: 4, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + SlotChange { + idx: 3, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + SlotChange { + idx: 5, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + ] + .into(), + carried_item: ItemStack::new(ItemKind::Diamond, 1, None), + }; + + let player_inventory = Inventory::new(InventoryKind::Player); + let inventory = Inventory::new(InventoryKind::Generic9x1); + let window = InventoryWindow::new(&player_inventory, Some(&inventory)); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Diamond, 64, None)); + + assert_eq!( + calculate_net_item_delta(&drag_packet, &window, &cursor_item), + 0 + ); + } + + #[test] + fn net_item_delta_2() { + let drag_packet = ClickSlotC2s { + window_id: 2, + state_id: VarInt(14), + slot_idx: -999, + button: 2, + mode: ClickMode::Click, + slot_changes: vec![ + SlotChange { + idx: 2, + stack: ItemStack::new(ItemKind::Diamond, 2, None), + }, + SlotChange { + idx: 3, + stack: ItemStack::new(ItemKind::IronIngot, 2, None), + }, + SlotChange { + idx: 4, + stack: ItemStack::new(ItemKind::GoldIngot, 2, None), + }, + SlotChange { + idx: 5, + stack: ItemStack::new(ItemKind::Emerald, 2, None), + }, + ] + .into(), + carried_item: ItemStack::new(ItemKind::OakWood, 2, None), + }; + + let player_inventory = Inventory::new(InventoryKind::Player); + let inventory = Inventory::new(InventoryKind::Generic9x1); + let window = InventoryWindow::new(&player_inventory, Some(&inventory)); + let cursor_item = CursorItem::default(); + + assert_eq!( + calculate_net_item_delta(&drag_packet, &window, &cursor_item), + 10 + ); + } + + #[test] + fn click_filled_slot_with_empty_cursor_success() { + let player_inventory = Inventory::new(InventoryKind::Player); + let mut inventory = Inventory::new(InventoryKind::Generic9x1); + inventory.set_slot(0, ItemStack::new(ItemKind::Diamond, 20, None)); + let cursor_item = CursorItem::default(); + let packet = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: inventory.slot(0).clone(), + }; + + validate_click_slot_packet(&packet, &player_inventory, Some(&inventory), &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn click_filled_slot_with_incorrect_nbt_and_empty_cursor_success() { + let player_inventory = Inventory::new(InventoryKind::Player); + let cursor_item = CursorItem(ItemStack::EMPTY); + + let mut inventory = Inventory::new(InventoryKind::Generic9x1); + // Insert an item with no NBT data that should have NBT Data. + inventory.set_slot(0, ItemStack::new(ItemKind::DiamondPickaxe, 1, None)); + + // Proper NBT Compound + let mut compound = Compound::new(); + compound.insert("Damage", Int(1)); + + let packet = ClickSlotC2s { + window_id: 1, + state_id: VarInt(0), + slot_idx: 0, + button: 0, + mode: ClickMode::Click, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack { + item: ItemKind::DiamondPickaxe, + count: 1, + nbt: Some(compound), + }, + }; + + validate_click_slot_packet(&packet, &player_inventory, Some(&inventory), &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn click_slot_with_filled_cursor_success() { + let player_inventory = Inventory::new(InventoryKind::Player); + let inventory1 = Inventory::new(InventoryKind::Generic9x1); + let mut inventory2 = Inventory::new(InventoryKind::Generic9x1); + inventory2.set_slot(0, ItemStack::new(ItemKind::Diamond, 10, None)); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Diamond, 20, None)); + let packet1 = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 20, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }; + let packet2 = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 30, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }; + + validate_click_slot_packet(&packet1, &player_inventory, Some(&inventory1), &cursor_item) + .expect("packet should be valid"); + + validate_click_slot_packet(&packet2, &player_inventory, Some(&inventory2), &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn click_filled_slot_with_filled_cursor_stack_overflow_success() { + let player_inventory = Inventory::new(InventoryKind::Player); + let mut inventory = Inventory::new(InventoryKind::Generic9x1); + inventory.set_slot(0, ItemStack::new(ItemKind::Diamond, 20, None)); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Diamond, 64, None)); + let packet = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 64, None), + }] + .into(), + carried_item: ItemStack::new(ItemKind::Diamond, 20, None), + }; + + validate_click_slot_packet(&packet, &player_inventory, Some(&inventory), &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn click_filled_slot_with_filled_cursor_different_item_success() { + let player_inventory = Inventory::new(InventoryKind::Player); + let mut inventory = Inventory::new(InventoryKind::Generic9x1); + inventory.set_slot(0, ItemStack::new(ItemKind::IronIngot, 2, None)); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Diamond, 2, None)); + let packet = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 2, None), + }] + .into(), + carried_item: ItemStack::new(ItemKind::IronIngot, 2, None), + }; + + validate_click_slot_packet(&packet, &player_inventory, Some(&inventory), &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn click_slot_with_filled_cursor_failure() { + let player_inventory = Inventory::new(InventoryKind::Player); + let inventory1 = Inventory::new(InventoryKind::Generic9x1); + let mut inventory2 = Inventory::new(InventoryKind::Generic9x1); + inventory2.set_slot(0, ItemStack::new(ItemKind::Diamond, 10, None)); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Diamond, 20, None)); + let packet1 = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 22, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }; + let packet2 = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 32, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }; + let packet3 = ClickSlotC2s { + window_id: 1, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 0, + slot_changes: vec![ + SlotChange { + idx: 0, + stack: ItemStack::new(ItemKind::Diamond, 22, None), + }, + SlotChange { + idx: 1, + stack: ItemStack::new(ItemKind::Diamond, 22, None), + }, + ] + .into(), + carried_item: ItemStack::EMPTY, + }; + + validate_click_slot_packet(&packet1, &player_inventory, Some(&inventory1), &cursor_item) + .expect_err("packet 1 should fail item duplication check"); + + validate_click_slot_packet(&packet2, &player_inventory, Some(&inventory2), &cursor_item) + .expect_err("packet 2 should fail item duplication check"); + + validate_click_slot_packet(&packet3, &player_inventory, Some(&inventory1), &cursor_item) + .expect_err("packet 3 should fail item duplication check"); + } + + #[test] + fn disallow_item_transmutation() { + // no alchemy allowed - make sure that lead can't be turned into gold + + let mut player_inventory = Inventory::new(InventoryKind::Player); + player_inventory.set_slot(9, ItemStack::new(ItemKind::Lead, 2, None)); + let cursor_item = CursorItem::default(); + + let packets = vec![ + ClickSlotC2s { + window_id: 0, + button: 0, + mode: ClickMode::ShiftClick, + state_id: VarInt(0), + slot_idx: 9, + slot_changes: vec![ + SlotChange { + idx: 9, + stack: ItemStack::EMPTY, + }, + SlotChange { + idx: 36, + stack: ItemStack::new(ItemKind::GoldIngot, 2, None), + }, + ] + .into(), + carried_item: ItemStack::EMPTY, + }, + ClickSlotC2s { + window_id: 0, + button: 0, + mode: ClickMode::Hotbar, + state_id: VarInt(0), + slot_idx: 9, + slot_changes: vec![ + SlotChange { + idx: 9, + stack: ItemStack::EMPTY, + }, + SlotChange { + idx: 36, + stack: ItemStack::new(ItemKind::GoldIngot, 2, None), + }, + ] + .into(), + carried_item: ItemStack::EMPTY, + }, + ClickSlotC2s { + window_id: 0, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(0), + slot_idx: 9, + slot_changes: vec![SlotChange { + idx: 9, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::new(ItemKind::GoldIngot, 2, None), + }, + ClickSlotC2s { + window_id: 0, + button: 0, + mode: ClickMode::DropKey, + state_id: VarInt(0), + slot_idx: 9, + slot_changes: vec![SlotChange { + idx: 9, + stack: ItemStack::new(ItemKind::GoldIngot, 1, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }, + ]; + + for (i, packet) in packets.iter().enumerate() { + validate_click_slot_packet(packet, &player_inventory, None, &cursor_item).expect_err( + &format!("packet {i} passed item duplication check when it should have failed"), + ); + } + } + + #[test] + fn allow_shift_click_overflow_to_new_stack() { + let mut player_inventory = Inventory::new(InventoryKind::Player); + player_inventory.set_slot(9, ItemStack::new(ItemKind::Diamond, 64, None)); + player_inventory.set_slot(36, ItemStack::new(ItemKind::Diamond, 32, None)); + let cursor_item = CursorItem::default(); + + let packet = ClickSlotC2s { + window_id: 0, + state_id: VarInt(2), + slot_idx: 9, + button: 0, + mode: ClickMode::ShiftClick, + slot_changes: vec![ + SlotChange { + idx: 37, + stack: ItemStack::new(ItemKind::Diamond, 32, None), + }, + SlotChange { + idx: 36, + stack: ItemStack::new(ItemKind::Diamond, 64, None), + }, + SlotChange { + idx: 9, + stack: ItemStack::EMPTY, + }, + ] + .into(), + carried_item: ItemStack::EMPTY, + }; + + validate_click_slot_packet(&packet, &player_inventory, None, &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn allow_pickup_overfull_stack_click() { + let mut player_inventory = Inventory::new(InventoryKind::Player); + player_inventory.set_slot(9, ItemStack::new(ItemKind::Apple, 100, None)); + let cursor_item = CursorItem::default(); + + let packet = ClickSlotC2s { + window_id: 0, + state_id: VarInt(2), + slot_idx: 9, + button: 0, + mode: ClickMode::Click, + slot_changes: vec![SlotChange { + idx: 9, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::new(ItemKind::Apple, 100, None), + }; + + validate_click_slot_packet(&packet, &player_inventory, None, &cursor_item) + .expect("packet should be valid"); + } + + #[test] + fn allow_place_overfull_stack_click() { + let player_inventory = Inventory::new(InventoryKind::Player); + let cursor_item = CursorItem(ItemStack::new(ItemKind::Apple, 100, None)); + + let packet = ClickSlotC2s { + window_id: 0, + state_id: VarInt(2), + slot_idx: 9, + button: 0, + mode: ClickMode::Click, + slot_changes: vec![SlotChange { + idx: 9, + stack: ItemStack::new(ItemKind::Apple, 64, None), + }] + .into(), + carried_item: ItemStack::new(ItemKind::Apple, 36, None), + }; + + validate_click_slot_packet(&packet, &player_inventory, None, &cursor_item) + .expect("packet should be valid"); + } +} diff --git a/vendor/valence/crates/valence_lang/Cargo.toml b/vendor/valence/crates/valence_lang/Cargo.toml new file mode 100644 index 00000000..e36fc949 --- /dev/null +++ b/vendor/valence/crates/valence_lang/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "valence_lang" +description = "Minecraft's languages and translation keys." +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[build-dependencies] +anyhow.workspace = true +heck.workspace = true +proc-macro2.workspace = true +quote.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +valence_build_utils.workspace = true diff --git a/vendor/valence/crates/valence_lang/README.md b/vendor/valence/crates/valence_lang/README.md new file mode 100644 index 00000000..648333bc --- /dev/null +++ b/vendor/valence/crates/valence_lang/README.md @@ -0,0 +1,5 @@ +# valence_lang + +Contains code for managing Minecraft's languages and translation keys. + +Currently, this only contains Minecraft's translation keys as Rust constants. In the future it may be expanded to include language registries, functions to resolve translation keys at runtime, etc. diff --git a/vendor/valence/crates/valence_lang/build.rs b/vendor/valence/crates/valence_lang/build.rs new file mode 100644 index 00000000..c87311ff --- /dev/null +++ b/vendor/valence/crates/valence_lang/build.rs @@ -0,0 +1,46 @@ +use heck::ToShoutySnakeCase; +use proc_macro2::TokenStream; +use quote::quote; +use serde::Deserialize; +use valence_build_utils::{ident, rerun_if_changed, write_generated_file}; + +pub fn main() -> anyhow::Result<()> { + write_generated_file(build()?, "translation_keys.rs") +} + +fn build() -> anyhow::Result { + rerun_if_changed(["extracted/translation_keys.json"]); + + let translations = + serde_json::from_str::>(include_str!("extracted/translation_keys.json"))?; + + let translation_key_consts = translations + .iter() + .map(|translation| { + let const_id = ident(translation.key.to_shouty_snake_case()); + let key = &translation.key; + let english_translation = &translation.english_translation; + let doc = format!("\"{}\"", escape(english_translation)); + + quote! { + #[doc = #doc] + pub const #const_id: &str = #key; + } + }) + .collect::>(); + + Ok(quote! { + #(#translation_key_consts)* + }) +} + +#[derive(Deserialize, Clone, Debug)] +struct Translation { + key: String, + english_translation: String, +} + +/// Escapes characters that have special meaning inside docs. +fn escape(text: &str) -> String { + text.replace('[', "\\[").replace(']', "\\]") +} diff --git a/vendor/valence/crates/valence_lang/extracted/translation_keys.json b/vendor/valence/crates/valence_lang/extracted/translation_keys.json new file mode 100644 index 00000000..0608e361 --- /dev/null +++ b/vendor/valence/crates/valence_lang/extracted/translation_keys.json @@ -0,0 +1,24914 @@ +[ + { + "key": "options.damageTiltStrength.tooltip", + "english_translation": "The amount of camera shake caused by being hurt." + }, + { + "key": "block.minecraft.brown_terracotta", + "english_translation": "Brown Terracotta" + }, + { + "key": "entity.minecraft.area_effect_cloud", + "english_translation": "Area Effect Cloud" + }, + { + "key": "item.minecraft.gray_dye", + "english_translation": "Gray Dye" + }, + { + "key": "block.minecraft.terracotta", + "english_translation": "Terracotta" + }, + { + "key": "multiplayer.disconnect.flying", + "english_translation": "Flying is not enabled on this server" + }, + { + "key": "key.categories.creative", + "english_translation": "Creative Mode" + }, + { + "key": "item.minecraft.potion.effect.weakness", + "english_translation": "Potion of Weakness" + }, + { + "key": "selectWorld.backupWarning.experimental", + "english_translation": "This world uses experimental settings that could stop working at any time. We cannot guarantee it will load or work. Here be dragons!" + }, + { + "key": "block.minecraft.dark_prismarine_slab", + "english_translation": "Dark Prismarine Slab" + }, + { + "key": "subtitles.entity.mooshroom.milk", + "english_translation": "Mooshroom gets milked" + }, + { + "key": "block.minecraft.red_nether_brick_slab", + "english_translation": "Red Nether Brick Slab" + }, + { + "key": "block.minecraft.yellow_terracotta", + "english_translation": "Yellow Terracotta" + }, + { + "key": "entity.minecraft.creeper", + "english_translation": "Creeper" + }, + { + "key": "key.keyboard.world.1", + "english_translation": "World 1" + }, + { + "key": "key.keyboard.world.2", + "english_translation": "World 2" + }, + { + "key": "block.minecraft.banner.straight_cross.cyan", + "english_translation": "Cyan Cross" + }, + { + "key": "commands.schedule.created.function", + "english_translation": "Scheduled function '%s' in %s tick(s) at gametime %s" + }, + { + "key": "deathScreen.quit.confirm", + "english_translation": "Are you sure you want to quit?" + }, + { + "key": "options.onlyShowSecureChat.tooltip", + "english_translation": "Only display messages from other players that can be verified to have been sent by that player, and have not been modified." + }, + { + "key": "commands.data.modify.invalid_substring", + "english_translation": "Invalid substring indices: %s to %s" + }, + { + "key": "entity.minecraft.allay", + "english_translation": "Allay" + }, + { + "key": "commands.bossbar.remove.success", + "english_translation": "Removed custom bossbar %s" + }, + { + "key": "block.minecraft.sculk_sensor", + "english_translation": "Sculk Sensor" + }, + { + "key": "gamerule.disableElytraMovementCheck", + "english_translation": "Disable elytra movement check" + }, + { + "key": "advancements.nether.create_full_beacon.description", + "english_translation": "Bring a Beacon to full power" + }, + { + "key": "block.minecraft.banner.creeper.orange", + "english_translation": "Orange Creeper Charge" + }, + { + "key": "addServer.enterIp", + "english_translation": "Server Address" + }, + { + "key": "item.minecraft.charcoal", + "english_translation": "Charcoal" + }, + { + "key": "stat.minecraft.clean_shulker_box", + "english_translation": "Shulker Boxes Cleaned" + }, + { + "key": "item.minecraft.tipped_arrow.effect.night_vision", + "english_translation": "Arrow of Night Vision" + }, + { + "key": "block.minecraft.stone_brick_slab", + "english_translation": "Stone Brick Slab" + }, + { + "key": "key.keyboard.left", + "english_translation": "Left Arrow" + }, + { + "key": "block.minecraft.banner.mojang.cyan", + "english_translation": "Cyan Thing" + }, + { + "key": "subtitles.entity.iron_golem.hurt", + "english_translation": "Iron Golem hurts" + }, + { + "key": "selectWorld.loading_list", + "english_translation": "Loading world list" + }, + { + "key": "block.minecraft.white_stained_glass", + "english_translation": "White Stained Glass" + }, + { + "key": "item.minecraft.bowl", + "english_translation": "Bowl" + }, + { + "key": "item.minecraft.bone_meal", + "english_translation": "Bone Meal" + }, + { + "key": "block.minecraft.cherry_wall_sign", + "english_translation": "Cherry Wall Sign" + }, + { + "key": "mco.configure.world.subscription.timeleft", + "english_translation": "Time left" + }, + { + "key": "multiplayer.status.no_connection", + "english_translation": "(no connection)" + }, + { + "key": "subtitles.block.respawn_anchor.deplete", + "english_translation": "Respawn Anchor depletes" + }, + { + "key": "createWorld.customize.custom.useOceanRuins", + "english_translation": "Ocean Ruins" + }, + { + "key": "arguments.objective.readonly", + "english_translation": "Scoreboard objective '%s' is read-only" + }, + { + "key": "gui.banned.reason.spam_or_advertising", + "english_translation": "Spam or advertising" + }, + { + "key": "commands.team.leave.success.single", + "english_translation": "Removed %s from any team" + }, + { + "key": "advancements.end.elytra.title", + "english_translation": "Sky's the Limit" + }, + { + "key": "entity.minecraft.piglin_brute", + "english_translation": "Piglin Brute" + }, + { + "key": "subtitles.entity.wandering_trader.hurt", + "english_translation": "Wandering Trader hurts" + }, + { + "key": "block.minecraft.banner.diagonal_left.cyan", + "english_translation": "Cyan Per Bend Sinister" + }, + { + "key": "block.minecraft.banner.stripe_bottom.light_blue", + "english_translation": "Light Blue Base" + }, + { + "key": "menu.preparingSpawn", + "english_translation": "Preparing spawn area: %s%%" + }, + { + "key": "createWorld.customize.custom.biomeScaleWeight", + "english_translation": "Biome Scale Weight" + }, + { + "key": "block.minecraft.end_stone", + "english_translation": "End Stone" + }, + { + "key": "subtitles.entity.horse.armor", + "english_translation": "Horse armor equips" + }, + { + "key": "block.minecraft.potted_white_tulip", + "english_translation": "Potted White Tulip" + }, + { + "key": "block.minecraft.warped_door", + "english_translation": "Warped Door" + }, + { + "key": "chat.cannotSend", + "english_translation": "Cannot send chat message" + }, + { + "key": "mco.download.title", + "english_translation": "Downloading latest world" + }, + { + "key": "item.minecraft.splash_potion.effect.fire_resistance", + "english_translation": "Splash Potion of Fire Resistance" + }, + { + "key": "block.minecraft.banner.half_vertical_right.pink", + "english_translation": "Pink Per Pale Inverted" + }, + { + "key": "block.minecraft.banner.triangles_bottom.light_gray", + "english_translation": "Light Gray Base Indented" + }, + { + "key": "selectWorld.edit.export_worldgen_settings.success", + "english_translation": "Exported" + }, + { + "key": "item.minecraft.mourner_pottery_sherd", + "english_translation": "Mourner Pottery Sherd" + }, + { + "key": "stat.minecraft.damage_dealt", + "english_translation": "Damage Dealt" + }, + { + "key": "createWorld.customize.presets.list", + "english_translation": "Alternatively, here's some we made earlier!" + }, + { + "key": "block.minecraft.stripped_bamboo_block", + "english_translation": "Block of Stripped Bamboo" + }, + { + "key": "item.minecraft.shield.red", + "english_translation": "Red Shield" + }, + { + "key": "block.minecraft.quartz_pillar", + "english_translation": "Quartz Pillar" + }, + { + "key": "commands.bossbar.get.visible.hidden", + "english_translation": "Custom bossbar %s is currently hidden" + }, + { + "key": "title.32bit.deprecation.realms.check", + "english_translation": "Do not show this screen again" + }, + { + "key": "argument.pos3d.incomplete", + "english_translation": "Incomplete (expected 3 coordinates)" + }, + { + "key": "item.minecraft.diamond_sword", + "english_translation": "Diamond Sword" + }, + { + "key": "mco.backup.entry.gameMode", + "english_translation": "Game Mode" + }, + { + "key": "block.minecraft.oak_planks", + "english_translation": "Oak Planks" + }, + { + "key": "item.minecraft.amethyst_shard", + "english_translation": "Amethyst Shard" + }, + { + "key": "subtitles.entity.piglin.celebrate", + "english_translation": "Piglin celebrates" + }, + { + "key": "block.minecraft.structure_void", + "english_translation": "Structure Void" + }, + { + "key": "tutorial.socialInteractions.title", + "english_translation": "Social Interactions" + }, + { + "key": "block.minecraft.purple_shulker_box", + "english_translation": "Purple Shulker Box" + }, + { + "key": "commands.item.source.not_a_container", + "english_translation": "Source position %s, %s, %s is not a container" + }, + { + "key": "jigsaw_block.pool", + "english_translation": "Target Pool:" + }, + { + "key": "block.minecraft.potatoes", + "english_translation": "Potatoes" + }, + { + "key": "subtitles.entity.camel.step_sand", + "english_translation": "Camel sands" + }, + { + "key": "datapackFailure.safeMode", + "english_translation": "Safe Mode" + }, + { + "key": "block.minecraft.light_blue_bed", + "english_translation": "Light Blue Bed" + }, + { + "key": "subtitles.block.sniffer_egg.crack", + "english_translation": "Sniffer Egg cracks" + }, + { + "key": "item.modifiers.head", + "english_translation": "When on Head:" + }, + { + "key": "options.on.composed", + "english_translation": "%s: ON" + }, + { + "key": "advancements.adventure.honey_block_slide.title", + "english_translation": "Sticky Situation" + }, + { + "key": "commands.worldborder.damage.buffer.success", + "english_translation": "Set the world border damage buffer to %s block(s)" + }, + { + "key": "subtitles.entity.player.levelup", + "english_translation": "Player dings" + }, + { + "key": "block.minecraft.glass_pane", + "english_translation": "Glass Pane" + }, + { + "key": "block.minecraft.banner.diagonal_right.cyan", + "english_translation": "Cyan Per Bend" + }, + { + "key": "subtitles.entity.camel.sit", + "english_translation": "Camel sits down" + }, + { + "key": "block.minecraft.cut_copper_slab", + "english_translation": "Cut Copper Slab" + }, + { + "key": "gui.chatReport.report_sent_msg", + "english_translation": "We’ve successfully received your report. Thank you!\n\nOur team will review it as soon as possible." + }, + { + "key": "gui.socialInteractions.blocking_hint", + "english_translation": "Manage with Microsoft account" + }, + { + "key": "options.telemetry.button.tooltip", + "english_translation": "\"%s\" includes only the required data.\n\"%s\" includes optional, as well as the required data." + }, + { + "key": "trim_pattern.minecraft.coast", + "english_translation": "Coast Armor Trim" + }, + { + "key": "biome.minecraft.warped_forest", + "english_translation": "Warped Forest" + }, + { + "key": "item.minecraft.splash_potion.effect.slow_falling", + "english_translation": "Splash Potion of Slow Falling" + }, + { + "key": "item.minecraft.book", + "english_translation": "Book" + }, + { + "key": "block.minecraft.banner.gradient.brown", + "english_translation": "Brown Gradient" + }, + { + "key": "entity.minecraft.magma_cube", + "english_translation": "Magma Cube" + }, + { + "key": "block.minecraft.banner.curly_border.gray", + "english_translation": "Gray Bordure Indented" + }, + { + "key": "options.particles.all", + "english_translation": "All" + }, + { + "key": "block.minecraft.black_shulker_box", + "english_translation": "Black Shulker Box" + }, + { + "key": "subtitles.block.amethyst_block.chime", + "english_translation": "Amethyst chimes" + }, + { + "key": "advancements.nether.root.description", + "english_translation": "Bring summer clothes" + }, + { + "key": "block.minecraft.banner.straight_cross.purple", + "english_translation": "Purple Cross" + }, + { + "key": "multiplayer.texturePrompt.serverPrompt", + "english_translation": "%s\n\nMessage from server:\n%s" + }, + { + "key": "key.forward", + "english_translation": "Walk Forwards" + }, + { + "key": "mco.template.trailer.tooltip", + "english_translation": "Map trailer" + }, + { + "key": "gamerule.showDeathMessages", + "english_translation": "Show death messages" + }, + { + "key": "commands.enchant.success.single", + "english_translation": "Applied enchantment %s to %s's item" + }, + { + "key": "advancements.end.find_end_city.title", + "english_translation": "The City at the End of the Game" + }, + { + "key": "item.minecraft.bamboo_chest_raft", + "english_translation": "Bamboo Raft with Chest" + }, + { + "key": "block.minecraft.banner.square_top_left.blue", + "english_translation": "Blue Chief Dexter Canton" + }, + { + "key": "block.minecraft.banner.stripe_center.yellow", + "english_translation": "Yellow Pale" + }, + { + "key": "mco.configure.world.invite.profile.name", + "english_translation": "Name" + }, + { + "key": "entity.minecraft.evoker", + "english_translation": "Evoker" + }, + { + "key": "item.minecraft.firework_star.cyan", + "english_translation": "Cyan" + }, + { + "key": "block.minecraft.brick_slab", + "english_translation": "Brick Slab" + }, + { + "key": "mco.errorMessage.generic", + "english_translation": "An error occurred: " + }, + { + "key": "subtitles.entity.slime.hurt", + "english_translation": "Slime hurts" + }, + { + "key": "advancements.adventure.throw_trident.title", + "english_translation": "A Throwaway Joke" + }, + { + "key": "block.minecraft.deepslate_emerald_ore", + "english_translation": "Deepslate Emerald Ore" + }, + { + "key": "commands.jfr.stopped", + "english_translation": "JFR profiling stopped and dumped to %s" + }, + { + "key": "block.minecraft.crimson_wall_sign", + "english_translation": "Crimson Wall Sign" + }, + { + "key": "block.minecraft.bamboo_slab", + "english_translation": "Bamboo Slab" + }, + { + "key": "gamerule.reducedDebugInfo.description", + "english_translation": "Limits contents of debug screen." + }, + { + "key": "item.minecraft.apple", + "english_translation": "Apple" + }, + { + "key": "block.minecraft.brown_wool", + "english_translation": "Brown Wool" + }, + { + "key": "subtitles.entity.ghast.ambient", + "english_translation": "Ghast cries" + }, + { + "key": "arguments.function.tag.unknown", + "english_translation": "Unknown function tag '%s'" + }, + { + "key": "subtitles.entity.ravager.stunned", + "english_translation": "Ravager stunned" + }, + { + "key": "entity.minecraft.turtle", + "english_translation": "Turtle" + }, + { + "key": "subtitles.entity.bee.loop", + "english_translation": "Bee buzzes" + }, + { + "key": "commands.datapack.list.available.success", + "english_translation": "There are %s data pack(s) available: %s" + }, + { + "key": "advancements.story.cure_zombie_villager.title", + "english_translation": "Zombie Doctor" + }, + { + "key": "item.minecraft.bone", + "english_translation": "Bone" + }, + { + "key": "advancements.husbandry.netherite_hoe.description", + "english_translation": "Use a Netherite Ingot to upgrade a Hoe, and then reevaluate your life choices" + }, + { + "key": "selectWorld.edit.save", + "english_translation": "Save" + }, + { + "key": "argument.angle.incomplete", + "english_translation": "Incomplete (expected 1 angle)" + }, + { + "key": "effect.minecraft.speed", + "english_translation": "Speed" + }, + { + "key": "subtitles.entity.tadpole.death", + "english_translation": "Tadpole dies" + }, + { + "key": "block.minecraft.polished_andesite", + "english_translation": "Polished Andesite" + }, + { + "key": "subtitles.block.sweet_berry_bush.pick_berries", + "english_translation": "Berries pop" + }, + { + "key": "chat.editBox", + "english_translation": "chat" + }, + { + "key": "gui.chatReport.read_info", + "english_translation": "Learn About Reporting" + }, + { + "key": "item.minecraft.lapis_lazuli", + "english_translation": "Lapis Lazuli" + }, + { + "key": "subtitles.entity.piglin.ambient", + "english_translation": "Piglin snorts" + }, + { + "key": "multiplayer.status.version.narration", + "english_translation": "Server version: %s" + }, + { + "key": "multiplayer.disconnect.too_many_pending_chats", + "english_translation": "Too many unacknowledged chat messages" + }, + { + "key": "block.minecraft.banner.diagonal_right.orange", + "english_translation": "Orange Per Bend" + }, + { + "key": "mco.configure.world.buttons.switchminigame", + "english_translation": "Switch minigame" + }, + { + "key": "biome.minecraft.small_end_islands", + "english_translation": "Small End Islands" + }, + { + "key": "block.minecraft.banner.base.green", + "english_translation": "Fully Green Field" + }, + { + "key": "commands.experience.add.levels.success.single", + "english_translation": "Gave %s experience levels to %s" + }, + { + "key": "subtitles.entity.guardian.attack", + "english_translation": "Guardian shoots" + }, + { + "key": "commands.effect.clear.specific.success.single", + "english_translation": "Removed effect %s from %s" + }, + { + "key": "block.minecraft.banner.square_top_left.lime", + "english_translation": "Lime Chief Dexter Canton" + }, + { + "key": "stat.minecraft.walk_one_cm", + "english_translation": "Distance Walked" + }, + { + "key": "outOfMemory.title", + "english_translation": "Out of memory!" + }, + { + "key": "subtitles.entity.generic.death", + "english_translation": "Dying" + }, + { + "key": "block.minecraft.banner.square_bottom_left.gray", + "english_translation": "Gray Base Dexter Canton" + }, + { + "key": "commands.scoreboard.objectives.display.set", + "english_translation": "Set display slot %s to show objective %s" + }, + { + "key": "advancements.nether.explore_nether.description", + "english_translation": "Explore all Nether biomes" + }, + { + "key": "itemGroup.tools", + "english_translation": "Tools & Utilities" + }, + { + "key": "commands.bossbar.set.visibility.unchanged.visible", + "english_translation": "Nothing changed. The bossbar is already visible" + }, + { + "key": "pack.source.builtin", + "english_translation": "built-in" + }, + { + "key": "commands.perf.reportFailed", + "english_translation": "Failed to create debug report" + }, + { + "key": "block.minecraft.cyan_stained_glass", + "english_translation": "Cyan Stained Glass" + }, + { + "key": "narrator.joining", + "english_translation": "Joining" + }, + { + "key": "item.minecraft.bee_spawn_egg", + "english_translation": "Bee Spawn Egg" + }, + { + "key": "commands.place.structure.success", + "english_translation": "Generated structure \"%s\" at %s, %s, %s" + }, + { + "key": "enchantment.minecraft.luck_of_the_sea", + "english_translation": "Luck of the Sea" + }, + { + "key": "item.minecraft.fox_spawn_egg", + "english_translation": "Fox Spawn Egg" + }, + { + "key": "commands.reload.success", + "english_translation": "Reloading!" + }, + { + "key": "mco.connect.connecting", + "english_translation": "Connecting to the realm..." + }, + { + "key": "block.minecraft.spruce_slab", + "english_translation": "Spruce Slab" + }, + { + "key": "painting.minecraft.bust.title", + "english_translation": "Bust" + }, + { + "key": "subtitles.entity.boat.paddle_land", + "english_translation": "Rowing" + }, + { + "key": "painting.minecraft.wind.title", + "english_translation": "Wind" + }, + { + "key": "pack.dropConfirm", + "english_translation": "Do you want to add the following packs to Minecraft?" + }, + { + "key": "block.minecraft.banner.border.magenta", + "english_translation": "Magenta Bordure" + }, + { + "key": "gui.chatReport.discard.content", + "english_translation": "If you leave, you'll lose this report and your comments.\nAre you sure you want to leave?" + }, + { + "key": "block.minecraft.banner.creeper.red", + "english_translation": "Red Creeper Charge" + }, + { + "key": "entity.minecraft.tropical_fish", + "english_translation": "Tropical Fish" + }, + { + "key": "options.autoJump", + "english_translation": "Auto-Jump" + }, + { + "key": "event.minecraft.raid.raiders_remaining", + "english_translation": "Raiders Remaining: %s" + }, + { + "key": "subtitles.entity.piglin.admiring_item", + "english_translation": "Piglin admires item" + }, + { + "key": "block.minecraft.oak_trapdoor", + "english_translation": "Oak Trapdoor" + }, + { + "key": "options.framerate", + "english_translation": "%s fps" + }, + { + "key": "block.minecraft.glass", + "english_translation": "Glass" + }, + { + "key": "subtitles.entity.elder_guardian.hurt", + "english_translation": "Elder Guardian hurts" + }, + { + "key": "gui.chatReport.title", + "english_translation": "Report Player" + }, + { + "key": "container.hopper", + "english_translation": "Item Hopper" + }, + { + "key": "entity.minecraft.bee", + "english_translation": "Bee" + }, + { + "key": "block.minecraft.budding_amethyst", + "english_translation": "Budding Amethyst" + }, + { + "key": "arguments.item.tag.unknown", + "english_translation": "Unknown item tag '%s'" + }, + { + "key": "block.minecraft.white_bed", + "english_translation": "White Bed" + }, + { + "key": "createWorld.customize.custom.presets.title", + "english_translation": "Customize World Presets" + }, + { + "key": "commands.debug.function.success.single", + "english_translation": "Traced %s command(s) from function '%s' to output file %s" + }, + { + "key": "subtitles.entity.pillager.ambient", + "english_translation": "Pillager murmurs" + }, + { + "key": "block.minecraft.banner.rhombus.red", + "english_translation": "Red Lozenge" + }, + { + "key": "mco.notification.visitUrl.buttonText.default", + "english_translation": "Open link" + }, + { + "key": "stat.minecraft.damage_dealt_resisted", + "english_translation": "Damage Dealt (Resisted)" + }, + { + "key": "createWorld.customize.custom.defaults", + "english_translation": "Defaults" + }, + { + "key": "entity.minecraft.item_frame", + "english_translation": "Item Frame" + }, + { + "key": "block.minecraft.brain_coral_block", + "english_translation": "Brain Coral Block" + }, + { + "key": "item.minecraft.tropical_fish", + "english_translation": "Tropical Fish" + }, + { + "key": "stat.minecraft.mob_kills", + "english_translation": "Mob Kills" + }, + { + "key": "death.attack.fall.player", + "english_translation": "%1$s hit the ground too hard whilst trying to escape %2$s" + }, + { + "key": "mco.download.percent", + "english_translation": "%s %%" + }, + { + "key": "options.telemetry.state.minimal", + "english_translation": "Minimal" + }, + { + "key": "gui.socialInteractions.status_blocked_offline", + "english_translation": "Blocked - Offline" + }, + { + "key": "block.minecraft.banner.piglin.pink", + "english_translation": "Pink Snout" + }, + { + "key": "block.minecraft.banner.stripe_right.cyan", + "english_translation": "Cyan Pale Sinister" + }, + { + "key": "accessibility.onboarding.screen.title", + "english_translation": "Welcome to Minecraft!\n\nWould you like to enable the Narrator or visit the Accessibility Settings?" + }, + { + "key": "subtitles.entity.villager.work_toolsmith", + "english_translation": "Toolsmith works" + }, + { + "key": "block.minecraft.banner.border.white", + "english_translation": "White Bordure" + }, + { + "key": "item.minecraft.tipped_arrow.effect.harming", + "english_translation": "Arrow of Harming" + }, + { + "key": "stat.minecraft.animals_bred", + "english_translation": "Animals Bred" + }, + { + "key": "block.minecraft.dark_oak_slab", + "english_translation": "Dark Oak Slab" + }, + { + "key": "createWorld.customize.custom.riverSize", + "english_translation": "River Size" + }, + { + "key": "subtitles.block.respawn_anchor.ambient", + "english_translation": "Portal whooshes" + }, + { + "key": "block.minecraft.banner.triangle_bottom.light_blue", + "english_translation": "Light Blue Chevron" + }, + { + "key": "block.minecraft.cartography_table", + "english_translation": "Cartography Table" + }, + { + "key": "itemGroup.consumables", + "english_translation": "Consumables" + }, + { + "key": "permissions.requires.entity", + "english_translation": "An entity is required to run this command here" + }, + { + "key": "subtitles.block.bubble_column.whirlpool_ambient", + "english_translation": "Bubbles whirl" + }, + { + "key": "subtitles.entity.dolphin.ambient", + "english_translation": "Dolphin chirps" + }, + { + "key": "subtitles.entity.guardian.death", + "english_translation": "Guardian dies" + }, + { + "key": "entity.minecraft.bat", + "english_translation": "Bat" + }, + { + "key": "block.minecraft.stripped_birch_log", + "english_translation": "Stripped Birch Log" + }, + { + "key": "subtitles.entity.dolphin.death", + "english_translation": "Dolphin dies" + }, + { + "key": "death.attack.thrown.item", + "english_translation": "%1$s was pummeled by %2$s using %3$s" + }, + { + "key": "commands.enchant.success.multiple", + "english_translation": "Applied enchantment %s to %s entities" + }, + { + "key": "commands.advancement.grant.many.to.one.failure", + "english_translation": "Couldn't grant %s advancements to %s as they already have them" + }, + { + "key": "subtitles.entity.llama.spit", + "english_translation": "Llama spits" + }, + { + "key": "options.viewBobbing", + "english_translation": "View Bobbing" + }, + { + "key": "enchantment.minecraft.flame", + "english_translation": "Flame" + }, + { + "key": "commands.advancement.revoke.many.to.many.failure", + "english_translation": "Couldn't revoke %s advancements from %s players as they don't have them" + }, + { + "key": "advancements.adventure.hero_of_the_village.title", + "english_translation": "Hero of the Village" + }, + { + "key": "advancements.story.deflect_arrow.description", + "english_translation": "Deflect a projectile with a Shield" + }, + { + "key": "block.minecraft.pink_bed", + "english_translation": "Pink Bed" + }, + { + "key": "debug.creative_spectator.help", + "english_translation": "F3 + N = Cycle previous game mode <-> spectator" + }, + { + "key": "block.minecraft.glow_lichen", + "english_translation": "Glow Lichen" + }, + { + "key": "menu.options", + "english_translation": "Options..." + }, + { + "key": "block.minecraft.mangrove_hanging_sign", + "english_translation": "Mangrove Hanging Sign" + }, + { + "key": "stat_type.minecraft.killed.none", + "english_translation": "You have never killed %s" + }, + { + "key": "entity.minecraft.villager.butcher", + "english_translation": "Butcher" + }, + { + "key": "subtitles.entity.panda.death", + "english_translation": "Panda dies" + }, + { + "key": "block.minecraft.banner.bricks.black", + "english_translation": "Black Field Masoned" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.light_gray", + "english_translation": "Light Gray Per Fess Inverted" + }, + { + "key": "block.minecraft.raw_copper_block", + "english_translation": "Block of Raw Copper" + }, + { + "key": "mco.configure.world.subscription.recurring.daysleft", + "english_translation": "Renewed automatically in" + }, + { + "key": "block.minecraft.packed_mud", + "english_translation": "Packed Mud" + }, + { + "key": "entity.minecraft.mule", + "english_translation": "Mule" + }, + { + "key": "gamerule.doMobSpawning.description", + "english_translation": "Some entities might have separate rules." + }, + { + "key": "block.minecraft.gray_shulker_box", + "english_translation": "Gray Shulker Box" + }, + { + "key": "block.minecraft.skeleton_skull", + "english_translation": "Skeleton Skull" + }, + { + "key": "gui.chatReport.more_comments", + "english_translation": "Please describe what happened:" + }, + { + "key": "subtitles.block.shulker_box.close", + "english_translation": "Shulker closes" + }, + { + "key": "team.visibility.hideForOwnTeam", + "english_translation": "Hide for own team" + }, + { + "key": "options.customizeTitle", + "english_translation": "Customize World Settings" + }, + { + "key": "selectWorld.data_read", + "english_translation": "Reading world data..." + }, + { + "key": "gui.stats", + "english_translation": "Statistics" + }, + { + "key": "gui.abuseReport.reason.description", + "english_translation": "Description:" + }, + { + "key": "item.minecraft.golden_pickaxe", + "english_translation": "Golden Pickaxe" + }, + { + "key": "block.minecraft.banner.stripe_downright.yellow", + "english_translation": "Yellow Bend" + }, + { + "key": "block.minecraft.banner.stripe_left.pink", + "english_translation": "Pink Pale Dexter" + }, + { + "key": "entity.minecraft.chicken", + "english_translation": "Chicken" + }, + { + "key": "subtitles.entity.wolf.death", + "english_translation": "Wolf dies" + }, + { + "key": "potion.withDuration", + "english_translation": "%s (%s)" + }, + { + "key": "argument.literal.incorrect", + "english_translation": "Expected literal %s" + }, + { + "key": "block.minecraft.lilac", + "english_translation": "Lilac" + }, + { + "key": "gamerule.doLimitedCrafting", + "english_translation": "Require recipe for crafting" + }, + { + "key": "mco.upload.done", + "english_translation": "Upload done" + }, + { + "key": "block.minecraft.banner.base.black", + "english_translation": "Fully Black Field" + }, + { + "key": "item.minecraft.tipped_arrow.effect.leaping", + "english_translation": "Arrow of Leaping" + }, + { + "key": "item.minecraft.burn_pottery_sherd", + "english_translation": "Burn Pottery Sherd" + }, + { + "key": "item.minecraft.snort_pottery_sherd", + "english_translation": "Snort Pottery Sherd" + }, + { + "key": "mco.connect.success", + "english_translation": "Done" + }, + { + "key": "block.minecraft.banner.triangles_top.purple", + "english_translation": "Purple Chief Indented" + }, + { + "key": "commands.bossbar.get.visible.visible", + "english_translation": "Custom bossbar %s is currently shown" + }, + { + "key": "block.minecraft.oxidized_cut_copper_slab", + "english_translation": "Oxidized Cut Copper Slab" + }, + { + "key": "commands.data.entity.query", + "english_translation": "%s has the following entity data: %s" + }, + { + "key": "block.minecraft.bricks", + "english_translation": "Bricks" + }, + { + "key": "block.minecraft.warped_nylium", + "english_translation": "Warped Nylium" + }, + { + "key": "stats.tooltip.type.statistic", + "english_translation": "Statistic" + }, + { + "key": "block.minecraft.diorite_slab", + "english_translation": "Diorite Slab" + }, + { + "key": "block.minecraft.banner.border.black", + "english_translation": "Black Bordure" + }, + { + "key": "block.minecraft.banner.square_bottom_right.brown", + "english_translation": "Brown Base Sinister Canton" + }, + { + "key": "block.minecraft.banner.triangles_bottom.brown", + "english_translation": "Brown Base Indented" + }, + { + "key": "mco.account.privacy.info", + "english_translation": "Read more about Mojang and privacy laws" + }, + { + "key": "menu.respawning", + "english_translation": "Respawning" + }, + { + "key": "container.crafting", + "english_translation": "Crafting" + }, + { + "key": "pack.incompatible", + "english_translation": "Incompatible" + }, + { + "key": "debug.pause_focus.on", + "english_translation": "Pause on lost focus: enabled" + }, + { + "key": "tutorial.open_inventory.description", + "english_translation": "Press %s" + }, + { + "key": "block.minecraft.dark_oak_planks", + "english_translation": "Dark Oak Planks" + }, + { + "key": "argument.pos.missing.int", + "english_translation": "Expected a block position" + }, + { + "key": "item.minecraft.pig_spawn_egg", + "english_translation": "Pig Spawn Egg" + }, + { + "key": "item.minecraft.skull_pottery_shard", + "english_translation": "Skull Pottery Shard" + }, + { + "key": "advancements.end.root.description", + "english_translation": "Or the beginning?" + }, + { + "key": "block.minecraft.melon_stem", + "english_translation": "Melon Stem" + }, + { + "key": "argument.long.low", + "english_translation": "Long must not be less than %s, found %s" + }, + { + "key": "color.minecraft.yellow", + "english_translation": "Yellow" + }, + { + "key": "block.minecraft.banner.half_horizontal.light_gray", + "english_translation": "Light Gray Per Fess" + }, + { + "key": "multiplayer.status.unknown", + "english_translation": "???" + }, + { + "key": "item.minecraft.iron_pickaxe", + "english_translation": "Iron Pickaxe" + }, + { + "key": "block.minecraft.mossy_cobblestone_stairs", + "english_translation": "Mossy Cobblestone Stairs" + }, + { + "key": "block.minecraft.cobbled_deepslate_wall", + "english_translation": "Cobbled Deepslate Wall" + }, + { + "key": "enchantment.minecraft.fire_aspect", + "english_translation": "Fire Aspect" + }, + { + "key": "commands.whitelist.alreadyOn", + "english_translation": "Whitelist is already turned on" + }, + { + "key": "subtitles.entity.iron_golem.attack", + "english_translation": "Iron Golem attacks" + }, + { + "key": "commands.bossbar.create.failed", + "english_translation": "A bossbar already exists with the ID '%s'" + }, + { + "key": "mco.configure.world.spawnMonsters", + "english_translation": "Spawn monsters" + }, + { + "key": "disconnect.loginFailedInfo", + "english_translation": "Failed to log in: %s" + }, + { + "key": "subtitles.entity.villager.work_armorer", + "english_translation": "Armorer works" + }, + { + "key": "multiplayer.requiredTexturePrompt.disconnect", + "english_translation": "Server requires a custom resource pack" + }, + { + "key": "block.minecraft.potted_orange_tulip", + "english_translation": "Potted Orange Tulip" + }, + { + "key": "subtitles.entity.shulker_bullet.hurt", + "english_translation": "Shulker Bullet breaks" + }, + { + "key": "block.minecraft.bubble_coral_fan", + "english_translation": "Bubble Coral Fan" + }, + { + "key": "block.minecraft.deepslate_coal_ore", + "english_translation": "Deepslate Coal Ore" + }, + { + "key": "block.minecraft.dead_fire_coral", + "english_translation": "Dead Fire Coral" + }, + { + "key": "block.minecraft.banner.gradient.light_gray", + "english_translation": "Light Gray Gradient" + }, + { + "key": "tutorial.socialInteractions.description", + "english_translation": "Press %s to open" + }, + { + "key": "block.minecraft.brain_coral_fan", + "english_translation": "Brain Coral Fan" + }, + { + "key": "argument.entity.notfound.player", + "english_translation": "No player was found" + }, + { + "key": "sleep.skipping_night", + "english_translation": "Sleeping through this night" + }, + { + "key": "telemetry.property.server_modded.title", + "english_translation": "Server Modded" + }, + { + "key": "entity.minecraft.zombie_villager", + "english_translation": "Zombie Villager" + }, + { + "key": "container.enchant.lapis.many", + "english_translation": "%s Lapis Lazuli" + }, + { + "key": "item.minecraft.wandering_trader_spawn_egg", + "english_translation": "Wandering Trader Spawn Egg" + }, + { + "key": "subtitles.entity.parrot.imitate.witch", + "english_translation": "Parrot giggles" + }, + { + "key": "multiplayer.disconnect.missing_tags", + "english_translation": "Incomplete set of tags received from server.\nPlease contact server operator." + }, + { + "key": "options.chat.height.unfocused", + "english_translation": "Unfocused Height" + }, + { + "key": "subtitles.entity.stray.ambient", + "english_translation": "Stray rattles" + }, + { + "key": "argument.block.property.novalue", + "english_translation": "Expected value for property '%s' on block %s" + }, + { + "key": "block.minecraft.bed.not_safe", + "english_translation": "You may not rest now; there are monsters nearby" + }, + { + "key": "commands.kill.success.single", + "english_translation": "Killed %s" + }, + { + "key": "options.chat.links", + "english_translation": "Web Links" + }, + { + "key": "block.minecraft.banner.straight_cross.light_blue", + "english_translation": "Light Blue Cross" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.gray", + "english_translation": "Gray Per Bend Sinister Inverted" + }, + { + "key": "flat_world_preset.minecraft.desert", + "english_translation": "Desert" + }, + { + "key": "commands.place.template.failed", + "english_translation": "Failed to place template" + }, + { + "key": "advancements.end.find_end_city.description", + "english_translation": "Go on in, what could happen?" + }, + { + "key": "commands.drop.success.multiple", + "english_translation": "Dropped %s items" + }, + { + "key": "item.minecraft.cooked_salmon", + "english_translation": "Cooked Salmon" + }, + { + "key": "narrator.select", + "english_translation": "Selected: %s" + }, + { + "key": "selectWorld.gameMode.spectator.info", + "english_translation": "You can look but don't touch." + }, + { + "key": "block.minecraft.banner.globe.brown", + "english_translation": "Brown Globe" + }, + { + "key": "biome.minecraft.end_barrens", + "english_translation": "End Barrens" + }, + { + "key": "subtitles.block.anvil.land", + "english_translation": "Anvil landed" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.pink", + "english_translation": "Pink Per Bend Inverted" + }, + { + "key": "item.minecraft.iron_axe", + "english_translation": "Iron Axe" + }, + { + "key": "block.minecraft.banner.border.green", + "english_translation": "Green Bordure" + }, + { + "key": "mco.selectServer.openserver", + "english_translation": "Open realm" + }, + { + "key": "item.minecraft.archer_pottery_sherd", + "english_translation": "Archer Pottery Sherd" + }, + { + "key": "block.minecraft.iron_door", + "english_translation": "Iron Door" + }, + { + "key": "commands.team.option.collisionRule.unchanged", + "english_translation": "Nothing changed. Collision rule is already that value" + }, + { + "key": "options.vsync", + "english_translation": "VSync" + }, + { + "key": "gamerule.commandModificationBlockLimit.description", + "english_translation": "Number of blocks that can be changed at once by one command, such as fill or clone." + }, + { + "key": "block.minecraft.piston", + "english_translation": "Piston" + }, + { + "key": "block.minecraft.mangrove_fence_gate", + "english_translation": "Mangrove Fence Gate" + }, + { + "key": "narration.button.usage.hovered", + "english_translation": "Left click to activate" + }, + { + "key": "container.enchant.level.requirement", + "english_translation": "Level Requirement: %s" + }, + { + "key": "gamerule.forgiveDeadPlayers.description", + "english_translation": "Angered neutral mobs stop being angry when the targeted player dies nearby." + }, + { + "key": "subtitles.entity.piglin_brute.angry", + "english_translation": "Piglin Brute snorts angrily" + }, + { + "key": "commands.attribute.failed.no_modifier", + "english_translation": "Attribute %s for entity %s has no modifier %s" + }, + { + "key": "gamerule.doTileDrops", + "english_translation": "Drop blocks" + }, + { + "key": "painting.minecraft.skull_and_roses.title", + "english_translation": "Skull and Roses" + }, + { + "key": "entity.minecraft.llama_spit", + "english_translation": "Llama Spit" + }, + { + "key": "structure_block.show_air", + "english_translation": "Show Invisible Blocks:" + }, + { + "key": "item.minecraft.lingering_potion.effect.weakness", + "english_translation": "Lingering Potion of Weakness" + }, + { + "key": "subtitles.block.iron_trapdoor.open", + "english_translation": "Trapdoor opens" + }, + { + "key": "options.accessibility.text_background.chat", + "english_translation": "Chat" + }, + { + "key": "chat.type.text.narrate", + "english_translation": "%s says %s" + }, + { + "key": "block.minecraft.grass_block", + "english_translation": "Grass Block" + }, + { + "key": "narration.tab_navigation.usage", + "english_translation": "Press Ctrl and Tab to switch between tabs" + }, + { + "key": "commands.enchant.failed.level", + "english_translation": "%s is higher than the maximum level of %s supported by that enchantment" + }, + { + "key": "options.graphics.fabulous", + "english_translation": "Fabulous!" + }, + { + "key": "chat.link.confirmTrusted", + "english_translation": "Do you want to open this link or copy it to your clipboard?" + }, + { + "key": "block.minecraft.brown_bed", + "english_translation": "Brown Bed" + }, + { + "key": "subtitles.entity.dolphin.ambient_water", + "english_translation": "Dolphin whistles" + }, + { + "key": "translation.test.complex", + "english_translation": "Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again!" + }, + { + "key": "block.minecraft.banner.square_top_right.red", + "english_translation": "Red Chief Sinister Canton" + }, + { + "key": "commands.setidletimeout.success", + "english_translation": "The player idle timeout is now %s minute(s)" + }, + { + "key": "title.multiplayer.disabled.banned.temporary", + "english_translation": "Your account is temporarily suspended from online play" + }, + { + "key": "commands.team.option.friendlyfire.enabled", + "english_translation": "Enabled friendly fire for team %s" + }, + { + "key": "item.minecraft.lodestone_compass", + "english_translation": "Lodestone Compass" + }, + { + "key": "block.minecraft.banner.gradient_up.white", + "english_translation": "White Base Gradient" + }, + { + "key": "block.minecraft.banner.small_stripes.yellow", + "english_translation": "Yellow Paly" + }, + { + "key": "painting.minecraft.graham.title", + "english_translation": "Graham" + }, + { + "key": "subtitles.entity.witch.drink", + "english_translation": "Witch drinks" + }, + { + "key": "commands.banip.failed", + "english_translation": "Nothing changed. That IP is already banned" + }, + { + "key": "narrator.ready_to_play", + "english_translation": "Ready to play" + }, + { + "key": "block.minecraft.banner.bricks.green", + "english_translation": "Green Field Masoned" + }, + { + "key": "key.right", + "english_translation": "Strafe Right" + }, + { + "key": "subtitles.entity.villager.yes", + "english_translation": "Villager agrees" + }, + { + "key": "gui.multiLineEditBox.character_limit", + "english_translation": "%s/%s" + }, + { + "key": "block.minecraft.infested_chiseled_stone_bricks", + "english_translation": "Infested Chiseled Stone Bricks" + }, + { + "key": "advancements.adventure.totem_of_undying.description", + "english_translation": "Use a Totem of Undying to cheat death" + }, + { + "key": "options.darknessEffectScale", + "english_translation": "Darkness Pulsing" + }, + { + "key": "death.attack.lava", + "english_translation": "%1$s tried to swim in lava" + }, + { + "key": "block.minecraft.jungle_wall_hanging_sign", + "english_translation": "Jungle Wall Hanging Sign" + }, + { + "key": "gamerule.drowningDamage", + "english_translation": "Deal drowning damage" + }, + { + "key": "block.minecraft.banner.triangle_top.cyan", + "english_translation": "Cyan Inverted Chevron" + }, + { + "key": "subtitles.entity.zombie.infect", + "english_translation": "Zombie infects" + }, + { + "key": "subtitles.entity.generic.splash", + "english_translation": "Splashing" + }, + { + "key": "event.minecraft.raid.victory", + "english_translation": "Victory" + }, + { + "key": "item.minecraft.firework_star.red", + "english_translation": "Red" + }, + { + "key": "death.attack.fireball.item", + "english_translation": "%1$s was fireballed by %2$s using %3$s" + }, + { + "key": "key.keyboard.keypad.equal", + "english_translation": "Keypad =" + }, + { + "key": "subtitles.block.pressure_plate.click", + "english_translation": "Pressure Plate clicks" + }, + { + "key": "subtitles.entity.husk.ambient", + "english_translation": "Husk groans" + }, + { + "key": "options.difficulty", + "english_translation": "Difficulty" + }, + { + "key": "argument.uuid.invalid", + "english_translation": "Invalid UUID" + }, + { + "key": "death.attack.inFire", + "english_translation": "%1$s went up in flames" + }, + { + "key": "commands.scoreboard.players.set.success.single", + "english_translation": "Set %s for %s to %s" + }, + { + "key": "entity.minecraft.skeleton", + "english_translation": "Skeleton" + }, + { + "key": "item.minecraft.blaze_spawn_egg", + "english_translation": "Blaze Spawn Egg" + }, + { + "key": "multiplayerWarning.message", + "english_translation": "Caution: Online play is offered by third-party servers that are not owned, operated, or supervised by Mojang Studios or Microsoft. During online play, you may be exposed to unmoderated chat messages or other types of user-generated content that may not be suitable for everyone." + }, + { + "key": "block.minecraft.banner.triangle_bottom.black", + "english_translation": "Black Chevron" + }, + { + "key": "commands.advancement.grant.criterion.to.one.success", + "english_translation": "Granted criterion '%s' of advancement %s to %s" + }, + { + "key": "block.minecraft.warped_slab", + "english_translation": "Warped Slab" + }, + { + "key": "item.modifiers.offhand", + "english_translation": "When in Off Hand:" + }, + { + "key": "multiplayer.status.incompatible", + "english_translation": "Incompatible version!" + }, + { + "key": "commands.drop.no_loot_table", + "english_translation": "Entity %s has no loot table" + }, + { + "key": "item.dyed", + "english_translation": "Dyed" + }, + { + "key": "subtitles.entity.wandering_trader.yes", + "english_translation": "Wandering Trader agrees" + }, + { + "key": "entity.minecraft.tnt_minecart", + "english_translation": "Minecart with TNT" + }, + { + "key": "key.mouse.left", + "english_translation": "Left Button" + }, + { + "key": "block.minecraft.banner.stripe_middle.orange", + "english_translation": "Orange Fess" + }, + { + "key": "mco.configure.world.spawnAnimals", + "english_translation": "Spawn animals" + }, + { + "key": "block.minecraft.magma_block", + "english_translation": "Magma Block" + }, + { + "key": "block.minecraft.lime_candle_cake", + "english_translation": "Cake with Lime Candle" + }, + { + "key": "item.minecraft.splash_potion.effect.awkward", + "english_translation": "Awkward Splash Potion" + }, + { + "key": "block.minecraft.decorated_pot", + "english_translation": "Decorated Pot" + }, + { + "key": "block.minecraft.spruce_door", + "english_translation": "Spruce Door" + }, + { + "key": "tutorial.find_tree.title", + "english_translation": "Find a tree" + }, + { + "key": "block.minecraft.pumpkin", + "english_translation": "Pumpkin" + }, + { + "key": "subtitles.entity.mule.death", + "english_translation": "Mule dies" + }, + { + "key": "subtitles.block.candle.crackle", + "english_translation": "Candle crackles" + }, + { + "key": "commands.ride.already_riding", + "english_translation": "%s is already riding %s" + }, + { + "key": "block.minecraft.banner.circle.pink", + "english_translation": "Pink Roundel" + }, + { + "key": "subtitles.entity.chicken.egg", + "english_translation": "Chicken plops" + }, + { + "key": "painting.minecraft.creebet.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.sponge", + "english_translation": "Sponge" + }, + { + "key": "options.online.title", + "english_translation": "Online Options" + }, + { + "key": "subtitles.entity.zoglin.death", + "english_translation": "Zoglin dies" + }, + { + "key": "block.minecraft.light_gray_candle", + "english_translation": "Light Gray Candle" + }, + { + "key": "advancements.nether.create_beacon.description", + "english_translation": "Construct and place a Beacon" + }, + { + "key": "subtitles.entity.warden.death", + "english_translation": "Warden dies" + }, + { + "key": "options.sounds", + "english_translation": "Music & Sounds..." + }, + { + "key": "stat.minecraft.player_kills", + "english_translation": "Player Kills" + }, + { + "key": "telemetry.property.advancement_id.title", + "english_translation": "Advancement ID" + }, + { + "key": "item.minecraft.golden_boots", + "english_translation": "Golden Boots" + }, + { + "key": "key.keyboard.delete", + "english_translation": "Delete" + }, + { + "key": "commands.advancement.revoke.many.to.many.success", + "english_translation": "Revoked %s advancements from %s players" + }, + { + "key": "gui.chatSelection.selected", + "english_translation": "%s/%s message(s) selected" + }, + { + "key": "advancements.nether.all_effects.title", + "english_translation": "How Did We Get Here?" + }, + { + "key": "item.minecraft.birch_chest_boat", + "english_translation": "Birch Boat with Chest" + }, + { + "key": "subtitles.entity.evoker.prepare_summon", + "english_translation": "Evoker prepares summoning" + }, + { + "key": "block.minecraft.bamboo_door", + "english_translation": "Bamboo Door" + }, + { + "key": "block.minecraft.banner.stripe_downright.light_blue", + "english_translation": "Light Blue Bend" + }, + { + "key": "menu.working", + "english_translation": "Working..." + }, + { + "key": "advMode.mode.auto", + "english_translation": "Repeat" + }, + { + "key": "narrator.controls.reset", + "english_translation": "Reset %s button" + }, + { + "key": "gui.socialInteractions.tooltip.report.not_reportable", + "english_translation": "This player can't be reported, because their chat messages can't be verified on this server" + }, + { + "key": "mco.template.title.minigame", + "english_translation": "Minigames" + }, + { + "key": "dataPack.validation.working", + "english_translation": "Validating selected data packs..." + }, + { + "key": "argument.entity.options.y.description", + "english_translation": "y position" + }, + { + "key": "block.minecraft.cocoa", + "english_translation": "Cocoa" + }, + { + "key": "advancements.adventure.sleep_in_bed.description", + "english_translation": "Sleep in a Bed to change your respawn point" + }, + { + "key": "block.minecraft.banner.cross.purple", + "english_translation": "Purple Saltire" + }, + { + "key": "gui.hours", + "english_translation": "%s hour(s)" + }, + { + "key": "block.minecraft.andesite_stairs", + "english_translation": "Andesite Stairs" + }, + { + "key": "item.minecraft.carrot", + "english_translation": "Carrot" + }, + { + "key": "block.minecraft.banner.skull.orange", + "english_translation": "Orange Skull Charge" + }, + { + "key": "block.minecraft.red_sand", + "english_translation": "Red Sand" + }, + { + "key": "death.attack.witherSkull.item", + "english_translation": "%1$s was shot by a skull from %2$s using %3$s" + }, + { + "key": "block.minecraft.banner.half_horizontal.gray", + "english_translation": "Gray Per Fess" + }, + { + "key": "painting.minecraft.wasteland.title", + "english_translation": "Wasteland" + }, + { + "key": "advancements.nether.return_to_sender.description", + "english_translation": "Destroy a Ghast with a fireball" + }, + { + "key": "gamerule.doWardenSpawning", + "english_translation": "Spawn Wardens" + }, + { + "key": "item.minecraft.iron_ingot", + "english_translation": "Iron Ingot" + }, + { + "key": "painting.minecraft.sea.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "subtitles.entity.cat.death", + "english_translation": "Cat dies" + }, + { + "key": "item.minecraft.snowball", + "english_translation": "Snowball" + }, + { + "key": "block.minecraft.banner.curly_border.yellow", + "english_translation": "Yellow Bordure Indented" + }, + { + "key": "subtitles.entity.illusioner.prepare_blindness", + "english_translation": "Illusioner prepares blindness" + }, + { + "key": "disconnect.endOfStream", + "english_translation": "End of stream" + }, + { + "key": "jigsaw_block.levels", + "english_translation": "Levels: %s" + }, + { + "key": "commands.locate.structure.not_found", + "english_translation": "Could not find a structure of type \"%s\" nearby" + }, + { + "key": "block.minecraft.wet_sponge", + "english_translation": "Wet Sponge" + }, + { + "key": "stat.minecraft.open_chest", + "english_translation": "Chests Opened" + }, + { + "key": "container.repair.cost", + "english_translation": "Enchantment Cost: %1$s" + }, + { + "key": "subtitles.entity.witch.death", + "english_translation": "Witch dies" + }, + { + "key": "block.minecraft.banner.triangles_top.light_blue", + "english_translation": "Light Blue Chief Indented" + }, + { + "key": "item.minecraft.music_disc_mall", + "english_translation": "Music Disc" + }, + { + "key": "subtitles.entity.warden.ambient", + "english_translation": "Warden whines" + }, + { + "key": "block.minecraft.quartz_stairs", + "english_translation": "Quartz Stairs" + }, + { + "key": "argument.resource_tag.not_found", + "english_translation": "Can't find tag '%s' of type '%s'" + }, + { + "key": "commands.advancement.grant.many.to.one.success", + "english_translation": "Granted %s advancements to %s" + }, + { + "key": "connect.joining", + "english_translation": "Joining world..." + }, + { + "key": "block.minecraft.banner.square_top_left.purple", + "english_translation": "Purple Chief Dexter Canton" + }, + { + "key": "item.minecraft.enchanted_book", + "english_translation": "Enchanted Book" + }, + { + "key": "pack.selected.title", + "english_translation": "Selected" + }, + { + "key": "commands.team.option.name.success", + "english_translation": "Updated the name of team %s" + }, + { + "key": "selectWorld.gameMode.adventure.line2", + "english_translation": "be added or removed" + }, + { + "key": "item.minecraft.oak_boat", + "english_translation": "Oak Boat" + }, + { + "key": "selectWorld.gameMode.adventure.line1", + "english_translation": "Same as Survival Mode, but blocks can't" + }, + { + "key": "clear.failed.multiple", + "english_translation": "No items were found on %s players" + }, + { + "key": "selectWorld.warning.deprecated.title", + "english_translation": "Warning! These settings are using deprecated features" + }, + { + "key": "key.left", + "english_translation": "Strafe Left" + }, + { + "key": "block.minecraft.banner.triangles_top.magenta", + "english_translation": "Magenta Chief Indented" + }, + { + "key": "entity.minecraft.spawner_minecart", + "english_translation": "Minecart with Monster Spawner" + }, + { + "key": "item.minecraft.stone_sword", + "english_translation": "Stone Sword" + }, + { + "key": "block.minecraft.white_shulker_box", + "english_translation": "White Shulker Box" + }, + { + "key": "options.off.composed", + "english_translation": "%s: OFF" + }, + { + "key": "advancements.husbandry.breed_all_animals.title", + "english_translation": "Two by Two" + }, + { + "key": "block.minecraft.flowering_azalea", + "english_translation": "Flowering Azalea" + }, + { + "key": "block.minecraft.chiseled_nether_bricks", + "english_translation": "Chiseled Nether Bricks" + }, + { + "key": "block.minecraft.melon", + "english_translation": "Melon" + }, + { + "key": "block.minecraft.acacia_planks", + "english_translation": "Acacia Planks" + }, + { + "key": "item.minecraft.music_disc_stal", + "english_translation": "Music Disc" + }, + { + "key": "entity.minecraft.villager.mason", + "english_translation": "Mason" + }, + { + "key": "block.minecraft.banner.globe.light_gray", + "english_translation": "Light Gray Globe" + }, + { + "key": "item.minecraft.flower_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "mco.configure.world.subscription.extend", + "english_translation": "Extend subscription" + }, + { + "key": "container.repair", + "english_translation": "Repair & Name" + }, + { + "key": "connect.negotiating", + "english_translation": "Negotiating..." + }, + { + "key": "filled_map.monument", + "english_translation": "Ocean Explorer Map" + }, + { + "key": "narration.button.usage.focused", + "english_translation": "Press Enter to activate" + }, + { + "key": "block.minecraft.chipped_anvil", + "english_translation": "Chipped Anvil" + }, + { + "key": "argument.entity.options.type.invalid", + "english_translation": "Invalid or unknown entity type '%s'" + }, + { + "key": "options.chat.scale", + "english_translation": "Chat Text Size" + }, + { + "key": "biome.minecraft.end_midlands", + "english_translation": "End Midlands" + }, + { + "key": "block.minecraft.infested_deepslate", + "english_translation": "Infested Deepslate" + }, + { + "key": "mco.reset.world.experience", + "english_translation": "Experiences" + }, + { + "key": "subtitles.entity.warden.listening_angry", + "english_translation": "Warden takes notice angrily" + }, + { + "key": "effect.minecraft.bad_omen", + "english_translation": "Bad Omen" + }, + { + "key": "optimizeWorld.stage.finished", + "english_translation": "Finishing up..." + }, + { + "key": "subtitles.entity.experience_orb.pickup", + "english_translation": "Experience gained" + }, + { + "key": "gui.chatReport.select_reason", + "english_translation": "Select Report Category" + }, + { + "key": "subtitles.entity.ender_pearl.throw", + "english_translation": "Ender Pearl flies" + }, + { + "key": "commands.experience.query.levels", + "english_translation": "%s has %s experience levels" + }, + { + "key": "debug.inspect.client.entity", + "english_translation": "Copied client-side entity data to clipboard" + }, + { + "key": "mco.brokenworld.minigame.title", + "english_translation": "This minigame is no longer supported" + }, + { + "key": "subtitles.entity.turtle.hurt_baby", + "english_translation": "Turtle baby hurts" + }, + { + "key": "block.minecraft.stripped_mangrove_log", + "english_translation": "Stripped Mangrove Log" + }, + { + "key": "block.minecraft.banner.circle.yellow", + "english_translation": "Yellow Roundel" + }, + { + "key": "block.minecraft.banner.triangle_bottom.green", + "english_translation": "Green Chevron" + }, + { + "key": "editGamerule.default", + "english_translation": "Default: %s" + }, + { + "key": "item.minecraft.firework_star.fade_to", + "english_translation": "Fade to" + }, + { + "key": "item.minecraft.music_disc_cat", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.banner.gradient_up.orange", + "english_translation": "Orange Base Gradient" + }, + { + "key": "block.minecraft.black_stained_glass_pane", + "english_translation": "Black Stained Glass Pane" + }, + { + "key": "subtitles.entity.ghast.death", + "english_translation": "Ghast dies" + }, + { + "key": "subtitles.entity.cow.ambient", + "english_translation": "Cow moos" + }, + { + "key": "block.minecraft.oak_wood", + "english_translation": "Oak Wood" + }, + { + "key": "block.minecraft.powered_rail", + "english_translation": "Powered Rail" + }, + { + "key": "datapackFailure.safeMode.failed.title", + "english_translation": "Failed to load world in Safe Mode." + }, + { + "key": "argument.dimension.invalid", + "english_translation": "Unknown dimension '%s'" + }, + { + "key": "debug.dump_dynamic_textures", + "english_translation": "Saved dynamic textures to %s" + }, + { + "key": "argument.entity.selector.self", + "english_translation": "Current entity" + }, + { + "key": "commands.team.option.prefix.success", + "english_translation": "Team prefix set to %s" + }, + { + "key": "entity.minecraft.husk", + "english_translation": "Husk" + }, + { + "key": "commands.worldborder.center.success", + "english_translation": "Set the center of the world border to %s, %s" + }, + { + "key": "block.minecraft.banner.half_vertical_right.yellow", + "english_translation": "Yellow Per Pale Inverted" + }, + { + "key": "block.minecraft.banner.mojang.light_blue", + "english_translation": "Light Blue Thing" + }, + { + "key": "title.multiplayer.disabled", + "english_translation": "Multiplayer is disabled. Please check your Microsoft account settings." + }, + { + "key": "biome.minecraft.windswept_gravelly_hills", + "english_translation": "Windswept Gravelly Hills" + }, + { + "key": "block.minecraft.green_shulker_box", + "english_translation": "Green Shulker Box" + }, + { + "key": "entity.minecraft.wither_skeleton", + "english_translation": "Wither Skeleton" + }, + { + "key": "selectWorld.seedInfo", + "english_translation": "Leave blank for a random seed" + }, + { + "key": "commands.bossbar.set.name.success", + "english_translation": "Custom bossbar %s has been renamed" + }, + { + "key": "argument.integer.big", + "english_translation": "Integer must not be more than %s, found %s" + }, + { + "key": "commands.reload.failure", + "english_translation": "Reload failed; keeping old data" + }, + { + "key": "item.minecraft.dark_oak_chest_boat", + "english_translation": "Dark Oak Boat with Chest" + }, + { + "key": "block.minecraft.petrified_oak_slab", + "english_translation": "Petrified Oak Slab" + }, + { + "key": "block.minecraft.banner.square_bottom_left.light_gray", + "english_translation": "Light Gray Base Dexter Canton" + }, + { + "key": "selectWorld.gameMode.adventure", + "english_translation": "Adventure" + }, + { + "key": "effect.minecraft.levitation", + "english_translation": "Levitation" + }, + { + "key": "advancements.adventure.arbalistic.description", + "english_translation": "Kill five unique mobs with one crossbow shot" + }, + { + "key": "subtitles.item.honeycomb.wax_on", + "english_translation": "Wax on" + }, + { + "key": "subtitles.entity.item.break", + "english_translation": "Item breaks" + }, + { + "key": "subtitles.entity.tadpole.grow_up", + "english_translation": "Tadpole grows up" + }, + { + "key": "item.minecraft.chest_minecart", + "english_translation": "Minecart with Chest" + }, + { + "key": "commands.defaultgamemode.success", + "english_translation": "The default game mode is now %s" + }, + { + "key": "block.minecraft.banner.half_vertical.pink", + "english_translation": "Pink Per Pale" + }, + { + "key": "argument.component.invalid", + "english_translation": "Invalid chat component: %s" + }, + { + "key": "block.minecraft.zombie_head", + "english_translation": "Zombie Head" + }, + { + "key": "commands.tag.remove.success.multiple", + "english_translation": "Removed tag '%s' from %s entities" + }, + { + "key": "block.minecraft.warped_roots", + "english_translation": "Warped Roots" + }, + { + "key": "telemetry.property.client_modded.title", + "english_translation": "Client Modded" + }, + { + "key": "commands.recipe.take.success.single", + "english_translation": "Took %s recipes from %s" + }, + { + "key": "biome.minecraft.ocean", + "english_translation": "Ocean" + }, + { + "key": "block.minecraft.piglin_head", + "english_translation": "Piglin Head" + }, + { + "key": "options.attack.hotbar", + "english_translation": "Hotbar" + }, + { + "key": "block.minecraft.banner.bricks.white", + "english_translation": "White Field Masoned" + }, + { + "key": "commands.message.display.outgoing", + "english_translation": "You whisper to %s: %s" + }, + { + "key": "effect.minecraft.weakness", + "english_translation": "Weakness" + }, + { + "key": "arguments.swizzle.invalid", + "english_translation": "Invalid swizzle, expected combination of 'x', 'y' and 'z'" + }, + { + "key": "menu.multiplayer", + "english_translation": "Multiplayer" + }, + { + "key": "mco.news", + "english_translation": "Realms news" + }, + { + "key": "subtitles.entity.arrow.hit", + "english_translation": "Arrow hits" + }, + { + "key": "item.minecraft.music_disc_relic.desc", + "english_translation": "Aaron Cherof - Relic" + }, + { + "key": "options.prioritizeChunkUpdates.nearby", + "english_translation": "Fully Blocking" + }, + { + "key": "advancements.adventure.fall_from_world_height.title", + "english_translation": "Caves & Cliffs" + }, + { + "key": "block.minecraft.banner.gradient.yellow", + "english_translation": "Yellow Gradient" + }, + { + "key": "enchantment.minecraft.soul_speed", + "english_translation": "Soul Speed" + }, + { + "key": "subtitles.entity.warden.dig", + "english_translation": "Warden digs" + }, + { + "key": "block.minecraft.sand", + "english_translation": "Sand" + }, + { + "key": "item.minecraft.zombified_piglin_spawn_egg", + "english_translation": "Zombified Piglin Spawn Egg" + }, + { + "key": "advancements.adventure.read_power_from_chiseled_bookshelf.description", + "english_translation": "Read the power signal of a Chiseled Bookshelf using a Comparator" + }, + { + "key": "selectWorld.versionUnknown", + "english_translation": "unknown" + }, + { + "key": "subtitles.block.sniffer_egg.hatch", + "english_translation": "Sniffer Egg hatches" + }, + { + "key": "biome.minecraft.bamboo_jungle", + "english_translation": "Bamboo Jungle" + }, + { + "key": "structure_block.integrity", + "english_translation": "Structure Integrity and Seed" + }, + { + "key": "block.minecraft.stripped_oak_log", + "english_translation": "Stripped Oak Log" + }, + { + "key": "selectWorld.import_worldgen_settings.select_file", + "english_translation": "Select settings file (.json)" + }, + { + "key": "debug.show_hitboxes.off", + "english_translation": "Hitboxes: hidden" + }, + { + "key": "block.minecraft.smooth_quartz_stairs", + "english_translation": "Smooth Quartz Stairs" + }, + { + "key": "block.minecraft.ender_chest", + "english_translation": "Ender Chest" + }, + { + "key": "commands.data.get.invalid", + "english_translation": "Can't get %s; only numeric tags are allowed" + }, + { + "key": "options.mouseWheelSensitivity", + "english_translation": "Scroll Sensitivity" + }, + { + "key": "argument.double.low", + "english_translation": "Double must not be less than %s, found %s" + }, + { + "key": "subtitles.block.end_portal_frame.fill", + "english_translation": "Eye of Ender attaches" + }, + { + "key": "subtitles.entity.puffer_fish.flop", + "english_translation": "Pufferfish flops" + }, + { + "key": "block.minecraft.bamboo_mosaic_slab", + "english_translation": "Bamboo Mosaic Slab" + }, + { + "key": "dataPack.update_1_20.description", + "english_translation": "New features and content for Minecraft 1.20" + }, + { + "key": "block.minecraft.azalea_leaves", + "english_translation": "Azalea Leaves" + }, + { + "key": "effect.duration.infinite", + "english_translation": "∞" + }, + { + "key": "structure_block.size_success", + "english_translation": "Size successfully detected for '%s'" + }, + { + "key": "item.minecraft.potion.effect.poison", + "english_translation": "Potion of Poison" + }, + { + "key": "block.minecraft.banner.bricks.blue", + "english_translation": "Blue Field Masoned" + }, + { + "key": "advancements.husbandry.safely_harvest_honey.title", + "english_translation": "Bee Our Guest" + }, + { + "key": "mco.configure.world.restore.download.question.line2", + "english_translation": "Do you want to continue?" + }, + { + "key": "mco.configure.world.restore.download.question.line1", + "english_translation": "The world will be downloaded and added to your single player worlds." + }, + { + "key": "options.multiplayer.title", + "english_translation": "Multiplayer Settings..." + }, + { + "key": "mco.create.world.wait", + "english_translation": "Creating the realm..." + }, + { + "key": "key.keyboard.right.alt", + "english_translation": "Right Alt" + }, + { + "key": "stat.minecraft.damage_absorbed", + "english_translation": "Damage Absorbed" + }, + { + "key": "translation.test.none", + "english_translation": "Hello, world!" + }, + { + "key": "gamerule.doMobSpawning", + "english_translation": "Spawn mobs" + }, + { + "key": "commands.op.failed", + "english_translation": "Nothing changed. The player already is an operator" + }, + { + "key": "selectWorld.gameMode.hardcore.line2", + "english_translation": "difficulty, and one life only" + }, + { + "key": "selectWorld.gameMode.hardcore.line1", + "english_translation": "Same as Survival Mode, locked at hardest" + }, + { + "key": "block.minecraft.acacia_slab", + "english_translation": "Acacia Slab" + }, + { + "key": "commands.attribute.modifier.remove.success", + "english_translation": "Removed modifier %s from attribute %s for entity %s" + }, + { + "key": "item.minecraft.tipped_arrow.effect.slowness", + "english_translation": "Arrow of Slowness" + }, + { + "key": "subtitles.entity.dolphin.jump", + "english_translation": "Dolphin jumps" + }, + { + "key": "item.minecraft.ender_pearl", + "english_translation": "Ender Pearl" + }, + { + "key": "subtitles.entity.piglin_brute.hurt", + "english_translation": "Piglin Brute hurts" + }, + { + "key": "painting.minecraft.match.title", + "english_translation": "Match" + }, + { + "key": "multiplayer.status.player_count.narration", + "english_translation": "%s out of %s players online" + }, + { + "key": "block.minecraft.banner.triangles_bottom.yellow", + "english_translation": "Yellow Base Indented" + }, + { + "key": "subtitles.item.bucket.fill_fish", + "english_translation": "Fish captured" + }, + { + "key": "item.minecraft.music_disc_otherside.desc", + "english_translation": "Lena Raine - otherside" + }, + { + "key": "block.minecraft.banner.base.light_blue", + "english_translation": "Fully Light Blue Field" + }, + { + "key": "mco.configure.world.buttons.delete", + "english_translation": "Delete" + }, + { + "key": "subtitles.entity.fox.sniff", + "english_translation": "Fox sniffs" + }, + { + "key": "item.minecraft.music_disc_5.desc", + "english_translation": "Samuel Åberg - 5" + }, + { + "key": "selectWorld.incompatible_series", + "english_translation": "Created by an incompatible version" + }, + { + "key": "soundCategory.voice", + "english_translation": "Voice/Speech" + }, + { + "key": "attribute.name.generic.knockback_resistance", + "english_translation": "Knockback Resistance" + }, + { + "key": "subtitles.entity.rabbit.attack", + "english_translation": "Rabbit attacks" + }, + { + "key": "createWorld.customize.custom.lowerLimitScale", + "english_translation": "Lower Limit Scale" + }, + { + "key": "subtitles.entity.wolf.shake", + "english_translation": "Wolf shakes" + }, + { + "key": "advancements.story.root.description", + "english_translation": "The heart and story of the game" + }, + { + "key": "commands.stop.stopping", + "english_translation": "Stopping the server" + }, + { + "key": "biome.minecraft.old_growth_spruce_taiga", + "english_translation": "Old Growth Spruce Taiga" + }, + { + "key": "multiplayer.texturePrompt.failure.line1", + "english_translation": "Server resource pack couldn't be applied" + }, + { + "key": "multiplayer.texturePrompt.failure.line2", + "english_translation": "Any functionality that requires custom resources might not work as expected" + }, + { + "key": "advancements.adventure.trade_at_world_height.title", + "english_translation": "Star Trader" + }, + { + "key": "gui.abuseReport.reason.self_harm_or_suicide", + "english_translation": "Imminent harm - Self-harm or suicide" + }, + { + "key": "block.minecraft.light_gray_concrete_powder", + "english_translation": "Light Gray Concrete Powder" + }, + { + "key": "item.minecraft.splash_potion.effect.mundane", + "english_translation": "Mundane Splash Potion" + }, + { + "key": "block.minecraft.banner.gradient.pink", + "english_translation": "Pink Gradient" + }, + { + "key": "block.minecraft.activator_rail", + "english_translation": "Activator Rail" + }, + { + "key": "commands.list.players", + "english_translation": "There are %s of a max of %s players online: %s" + }, + { + "key": "createWorld.customize.custom.biomeDepthWeight", + "english_translation": "Biome Depth Weight" + }, + { + "key": "multiplayer.status.motd.narration", + "english_translation": "Message of the day: %s" + }, + { + "key": "block.minecraft.red_sandstone_wall", + "english_translation": "Red Sandstone Wall" + }, + { + "key": "item.minecraft.diamond_axe", + "english_translation": "Diamond Axe" + }, + { + "key": "argument.pos.unloaded", + "english_translation": "That position is not loaded" + }, + { + "key": "block.minecraft.mangrove_planks", + "english_translation": "Mangrove Planks" + }, + { + "key": "commands.scoreboard.players.list.success", + "english_translation": "There are %s tracked entity/entities: %s" + }, + { + "key": "book.byAuthor", + "english_translation": "by %1$s" + }, + { + "key": "options.percent_value", + "english_translation": "%s: %s%%" + }, + { + "key": "advancements.nether.all_potions.description", + "english_translation": "Have every potion effect applied at the same time" + }, + { + "key": "item.minecraft.diamond_helmet", + "english_translation": "Diamond Helmet" + }, + { + "key": "item.minecraft.fire_charge", + "english_translation": "Fire Charge" + }, + { + "key": "subtitles.entity.parrot.imitate.illusioner", + "english_translation": "Parrot murmurs" + }, + { + "key": "subtitles.item.book.put", + "english_translation": "Book thumps" + }, + { + "key": "subtitles.entity.zombified_piglin.angry", + "english_translation": "Zombified Piglin grunts angrily" + }, + { + "key": "block.minecraft.birch_leaves", + "english_translation": "Birch Leaves" + }, + { + "key": "block.minecraft.banner.square_bottom_right.pink", + "english_translation": "Pink Base Sinister Canton" + }, + { + "key": "item.minecraft.diamond_pickaxe", + "english_translation": "Diamond Pickaxe" + }, + { + "key": "block.minecraft.sea_pickle", + "english_translation": "Sea Pickle" + }, + { + "key": "entity.minecraft.sheep", + "english_translation": "Sheep" + }, + { + "key": "block.minecraft.dark_oak_door", + "english_translation": "Dark Oak Door" + }, + { + "key": "subtitles.entity.player.hurt_drown", + "english_translation": "Player drowning" + }, + { + "key": "block.minecraft.light_gray_carpet", + "english_translation": "Light Gray Carpet" + }, + { + "key": "selectWorld.delete", + "english_translation": "Delete" + }, + { + "key": "subtitles.entity.item.pickup", + "english_translation": "Item plops" + }, + { + "key": "mco.terms.buttons.disagree", + "english_translation": "Don't agree" + }, + { + "key": "biome.minecraft.snowy_plains", + "english_translation": "Snowy Plains" + }, + { + "key": "resourcepack.progress", + "english_translation": "Downloading file (%s MB)..." + }, + { + "key": "block.minecraft.light_blue_wool", + "english_translation": "Light Blue Wool" + }, + { + "key": "item.minecraft.netherite_hoe", + "english_translation": "Netherite Hoe" + }, + { + "key": "subtitles.entity.player.hurt_on_fire", + "english_translation": "Player burns" + }, + { + "key": "options.modelPart.cape", + "english_translation": "Cape" + }, + { + "key": "commands.whitelist.disabled", + "english_translation": "Whitelist is now turned off" + }, + { + "key": "options.generic_value", + "english_translation": "%s: %s" + }, + { + "key": "subtitles.entity.panda.bite", + "english_translation": "Panda bites" + }, + { + "key": "block.minecraft.banner.square_bottom_right.yellow", + "english_translation": "Yellow Base Sinister Canton" + }, + { + "key": "subtitles.block.portal.ambient", + "english_translation": "Portal whooshes" + }, + { + "key": "subtitles.entity.parrot.death", + "english_translation": "Parrot dies" + }, + { + "key": "block.minecraft.trapped_chest", + "english_translation": "Trapped Chest" + }, + { + "key": "block.minecraft.banner.triangles_top.gray", + "english_translation": "Gray Chief Indented" + }, + { + "key": "subtitles.entity.illusioner.ambient", + "english_translation": "Illusioner murmurs" + }, + { + "key": "commands.whitelist.reloaded", + "english_translation": "Reloaded the whitelist" + }, + { + "key": "block.minecraft.mud_bricks", + "english_translation": "Mud Bricks" + }, + { + "key": "commands.data.merge.failed", + "english_translation": "Nothing changed. The specified properties already have these values" + }, + { + "key": "subtitles.entity.axolotl.attack", + "english_translation": "Axolotl attacks" + }, + { + "key": "block.minecraft.potted_warped_fungus", + "english_translation": "Potted Warped Fungus" + }, + { + "key": "biome.minecraft.river", + "english_translation": "River" + }, + { + "key": "createWorld.customize.custom.stretchY", + "english_translation": "Height Stretch" + }, + { + "key": "subtitles.block.conduit.ambient", + "english_translation": "Conduit pulses" + }, + { + "key": "subtitles.item.axe.strip", + "english_translation": "Axe strips" + }, + { + "key": "subtitles.block.beehive.drip", + "english_translation": "Honey drips" + }, + { + "key": "subtitles.entity.bat.ambient", + "english_translation": "Bat screeches" + }, + { + "key": "commands.tag.add.success.multiple", + "english_translation": "Added tag '%s' to %s entities" + }, + { + "key": "entity.minecraft.spectral_arrow", + "english_translation": "Spectral Arrow" + }, + { + "key": "selectWorld.deleteQuestion", + "english_translation": "Are you sure you want to delete this world?" + }, + { + "key": "block.minecraft.cherry_pressure_plate", + "english_translation": "Cherry Pressure Plate" + }, + { + "key": "selectWorld.edit.export_worldgen_settings.failure", + "english_translation": "Export failed" + }, + { + "key": "createWorld.customize.custom.depthNoiseScaleZ", + "english_translation": "Depth Noise Scale Z" + }, + { + "key": "item.minecraft.netherite_pickaxe", + "english_translation": "Netherite Pickaxe" + }, + { + "key": "block.minecraft.mangrove_wood", + "english_translation": "Mangrove Wood" + }, + { + "key": "item.minecraft.husk_spawn_egg", + "english_translation": "Husk Spawn Egg" + }, + { + "key": "commands.recipe.give.success.single", + "english_translation": "Unlocked %s recipes for %s" + }, + { + "key": "subtitles.block.generic.footsteps", + "english_translation": "Footsteps" + }, + { + "key": "block.minecraft.mangrove_wall_hanging_sign", + "english_translation": "Mangrove Wall Hanging Sign" + }, + { + "key": "commands.attribute.modifier.add.success", + "english_translation": "Added modifier %s to attribute %s for entity %s" + }, + { + "key": "block.minecraft.orange_tulip", + "english_translation": "Orange Tulip" + }, + { + "key": "item.minecraft.disc_fragment_5", + "english_translation": "Disc Fragment" + }, + { + "key": "commands.title.show.actionbar.multiple", + "english_translation": "Showing new actionbar title for %s players" + }, + { + "key": "block.minecraft.banner.stripe_bottom.red", + "english_translation": "Red Base" + }, + { + "key": "block.minecraft.netherite_block", + "english_translation": "Block of Netherite" + }, + { + "key": "commands.debug.started", + "english_translation": "Started tick profiling" + }, + { + "key": "block.minecraft.infested_cracked_stone_bricks", + "english_translation": "Infested Cracked Stone Bricks" + }, + { + "key": "filled_map.unknown", + "english_translation": "Unknown Map" + }, + { + "key": "item.minecraft.tipped_arrow.effect.thick", + "english_translation": "Tipped Arrow" + }, + { + "key": "subtitles.entity.guardian.ambient", + "english_translation": "Guardian moans" + }, + { + "key": "commands.team.list.teams.empty", + "english_translation": "There are no teams" + }, + { + "key": "item.minecraft.goat_spawn_egg", + "english_translation": "Goat Spawn Egg" + }, + { + "key": "block.minecraft.oak_hanging_sign", + "english_translation": "Oak Hanging Sign" + }, + { + "key": "block.minecraft.banner.piglin.light_gray", + "english_translation": "Light Gray Snout" + }, + { + "key": "subtitles.block.dispenser.dispense", + "english_translation": "Dispensed item" + }, + { + "key": "subtitles.block.sculk_sensor.clicking_stop", + "english_translation": "Sculk Sensor stops clicking" + }, + { + "key": "block.minecraft.banner.gradient_up.brown", + "english_translation": "Brown Base Gradient" + }, + { + "key": "stat.itemsButton", + "english_translation": "Items" + }, + { + "key": "block.minecraft.banner.stripe_downleft.brown", + "english_translation": "Brown Bend Sinister" + }, + { + "key": "subtitles.entity.panda.ambient", + "english_translation": "Panda pants" + }, + { + "key": "item.minecraft.lingering_potion.effect.fire_resistance", + "english_translation": "Lingering Potion of Fire Resistance" + }, + { + "key": "telemetry.property.render_distance.title", + "english_translation": "Render Distance" + }, + { + "key": "block.minecraft.repeater", + "english_translation": "Redstone Repeater" + }, + { + "key": "block.minecraft.tuff", + "english_translation": "Tuff" + }, + { + "key": "options.graphics.warning.accept", + "english_translation": "Continue Without Support" + }, + { + "key": "createWorld.customize.custom.depthNoiseScaleX", + "english_translation": "Depth Noise Scale X" + }, + { + "key": "subtitles.block.chorus_flower.grow", + "english_translation": "Chorus Flower grows" + }, + { + "key": "advancements.adventure.salvage_sherd.title", + "english_translation": "Respecting the Remnants" + }, + { + "key": "debug.chunk_boundaries.help", + "english_translation": "F3 + G = Show chunk boundaries" + }, + { + "key": "container.dispenser", + "english_translation": "Dispenser" + }, + { + "key": "painting.minecraft.creebet.title", + "english_translation": "Creebet" + }, + { + "key": "block.minecraft.potted_flowering_azalea_bush", + "english_translation": "Potted Flowering Azalea" + }, + { + "key": "subtitles.entity.turtle.ambient_land", + "english_translation": "Turtle chirps" + }, + { + "key": "container.chestDouble", + "english_translation": "Large Chest" + }, + { + "key": "flat_world_preset.minecraft.classic_flat", + "english_translation": "Classic Flat" + }, + { + "key": "advancements.husbandry.wax_on.title", + "english_translation": "Wax On" + }, + { + "key": "painting.minecraft.aztec2.title", + "english_translation": "de_aztec" + }, + { + "key": "gui.abuseReport.send.generic_error", + "english_translation": "Encountered an unexpected error while sending your report." + }, + { + "key": "item.minecraft.splash_potion.effect.weakness", + "english_translation": "Splash Potion of Weakness" + }, + { + "key": "multiplayer.disconnect.illegal_characters", + "english_translation": "Illegal characters in chat" + }, + { + "key": "subtitles.entity.bee.hurt", + "english_translation": "Bee hurts" + }, + { + "key": "subtitles.entity.warden.step", + "english_translation": "Warden steps" + }, + { + "key": "item.minecraft.ghast_tear", + "english_translation": "Ghast Tear" + }, + { + "key": "commands.worldborder.set.failed.big", + "english_translation": "World border cannot be bigger than %s blocks wide" + }, + { + "key": "block.minecraft.red_sandstone_stairs", + "english_translation": "Red Sandstone Stairs" + }, + { + "key": "commands.debug.notRunning", + "english_translation": "The tick profiler hasn't started" + }, + { + "key": "block.minecraft.banner.bricks.light_blue", + "english_translation": "Light Blue Field Masoned" + }, + { + "key": "block.minecraft.cobbled_deepslate", + "english_translation": "Cobbled Deepslate" + }, + { + "key": "argument.id.unknown", + "english_translation": "Unknown ID: %s" + }, + { + "key": "selectWorld.moreWorldOptions", + "english_translation": "More World Options..." + }, + { + "key": "painting.minecraft.stage.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "subtitles.entity.allay.item_given", + "english_translation": "Allay chortles" + }, + { + "key": "subtitles.entity.stray.hurt", + "english_translation": "Stray hurts" + }, + { + "key": "advancements.story.enter_the_end.title", + "english_translation": "The End?" + }, + { + "key": "block.minecraft.lime_banner", + "english_translation": "Lime Banner" + }, + { + "key": "selectWorld.edit.backupFailed", + "english_translation": "Backup failed" + }, + { + "key": "container.smoker", + "english_translation": "Smoker" + }, + { + "key": "block.minecraft.banner.half_vertical.light_blue", + "english_translation": "Light Blue Per Pale" + }, + { + "key": "block.minecraft.brown_carpet", + "english_translation": "Brown Carpet" + }, + { + "key": "quickplay.error.realm_connect", + "english_translation": "Could not connect to Realm" + }, + { + "key": "advancements.story.enter_the_nether.title", + "english_translation": "We Need to Go Deeper" + }, + { + "key": "block.minecraft.dark_oak_wall_hanging_sign", + "english_translation": "Dark Oak Wall Hanging Sign" + }, + { + "key": "selectWorld.bonusItems", + "english_translation": "Bonus Chest" + }, + { + "key": "block.minecraft.brain_coral_wall_fan", + "english_translation": "Brain Coral Wall Fan" + }, + { + "key": "mco.minigame.world.stopButton", + "english_translation": "End minigame" + }, + { + "key": "selectWorld.edit.openFolder", + "english_translation": "Open World Folder" + }, + { + "key": "block.minecraft.cake", + "english_translation": "Cake" + }, + { + "key": "entity.minecraft.frog", + "english_translation": "Frog" + }, + { + "key": "commands.worldborder.warning.distance.failed", + "english_translation": "Nothing changed. The world border warning is already that distance" + }, + { + "key": "mco.selectServer.popup", + "english_translation": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay." + }, + { + "key": "block.minecraft.end_stone_bricks", + "english_translation": "End Stone Bricks" + }, + { + "key": "mco.create.world.reset.title", + "english_translation": "Creating world..." + }, + { + "key": "fabric-registry-sync-v0.unknown-remote.subtitle.2", + "english_translation": " See the client logs for more details.\nThe following registry entry namespaces may be related:\n\n" + }, + { + "key": "fabric-registry-sync-v0.unknown-remote.subtitle.1", + "english_translation": "This is usually caused by a mismatched mod set between the client and server." + }, + { + "key": "stat_type.minecraft.killed", + "english_translation": "You killed %s %s" + }, + { + "key": "block.minecraft.banner.diagonal_right.gray", + "english_translation": "Gray Per Bend" + }, + { + "key": "item.minecraft.splash_potion", + "english_translation": "Splash Potion" + }, + { + "key": "block.minecraft.jungle_log", + "english_translation": "Jungle Log" + }, + { + "key": "argument.float.big", + "english_translation": "Float must not be more than %s, found %s" + }, + { + "key": "arguments.nbtpath.too_large", + "english_translation": "Resulting NBT too large" + }, + { + "key": "item.minecraft.mangrove_chest_boat", + "english_translation": "Mangrove Boat with Chest" + }, + { + "key": "block.minecraft.gray_glazed_terracotta", + "english_translation": "Gray Glazed Terracotta" + }, + { + "key": "gui.all", + "english_translation": "All" + }, + { + "key": "death.attack.stalagmite", + "english_translation": "%1$s was impaled on a stalagmite" + }, + { + "key": "subtitles.entity.witch.celebrate", + "english_translation": "Witch cheers" + }, + { + "key": "block.minecraft.chiseled_polished_blackstone", + "english_translation": "Chiseled Polished Blackstone" + }, + { + "key": "container.dropper", + "english_translation": "Dropper" + }, + { + "key": "commands.particle.success", + "english_translation": "Displaying particle %s" + }, + { + "key": "advancements.story.deflect_arrow.title", + "english_translation": "Not Today, Thank You" + }, + { + "key": "flat_world_preset.unknown", + "english_translation": "???" + }, + { + "key": "block.minecraft.black_terracotta", + "english_translation": "Black Terracotta" + }, + { + "key": "instrument.minecraft.admire_goat_horn", + "english_translation": "Admire" + }, + { + "key": "block.minecraft.lily_pad", + "english_translation": "Lily Pad" + }, + { + "key": "commands.data.block.invalid", + "english_translation": "The target block is not a block entity" + }, + { + "key": "trim_pattern.minecraft.rib", + "english_translation": "Rib Armor Trim" + }, + { + "key": "subtitles.entity.chicken.ambient", + "english_translation": "Chicken clucks" + }, + { + "key": "commands.forceload.added.none", + "english_translation": "No force loaded chunks were found in %s" + }, + { + "key": "item.minecraft.smithing_template.armor_trim.applies_to", + "english_translation": "Armor" + }, + { + "key": "advancements.husbandry.balanced_diet.description", + "english_translation": "Eat everything that is edible, even if it's not good for you" + }, + { + "key": "subtitles.block.bubble_column.bubble_pop", + "english_translation": "Bubbles pop" + }, + { + "key": "key.saveToolbarActivator", + "english_translation": "Save Hotbar Activator" + }, + { + "key": "item.minecraft.netherite_boots", + "english_translation": "Netherite Boots" + }, + { + "key": "argument.entity.options.nbt.description", + "english_translation": "Entities with NBT" + }, + { + "key": "block.minecraft.banner.square_bottom_left.pink", + "english_translation": "Pink Base Dexter Canton" + }, + { + "key": "block.minecraft.warped_trapdoor", + "english_translation": "Warped Trapdoor" + }, + { + "key": "advMode.triggering", + "english_translation": "Triggering" + }, + { + "key": "key.keyboard.right.shift", + "english_translation": "Right Shift" + }, + { + "key": "subtitles.entity.villager.work_fletcher", + "english_translation": "Fletcher works" + }, + { + "key": "enchantment.minecraft.vanishing_curse", + "english_translation": "Curse of Vanishing" + }, + { + "key": "options.mainHand", + "english_translation": "Main Hand" + }, + { + "key": "item.minecraft.pumpkin_seeds", + "english_translation": "Pumpkin Seeds" + }, + { + "key": "block.minecraft.nether_brick_wall", + "english_translation": "Nether Brick Wall" + }, + { + "key": "item.minecraft.plenty_pottery_sherd", + "english_translation": "Plenty Pottery Sherd" + }, + { + "key": "item.minecraft.firework_star.trail", + "english_translation": "Trail" + }, + { + "key": "block.minecraft.banner.creeper.magenta", + "english_translation": "Magenta Creeper Charge" + }, + { + "key": "advMode.allEntities", + "english_translation": "Use \"@e\" to target all entities" + }, + { + "key": "subtitles.entity.zombified_piglin.ambient", + "english_translation": "Zombified Piglin grunts" + }, + { + "key": "item.minecraft.armor_stand", + "english_translation": "Armor Stand" + }, + { + "key": "death.attack.fall", + "english_translation": "%1$s hit the ground too hard" + }, + { + "key": "disconnect.spam", + "english_translation": "Kicked for spamming" + }, + { + "key": "key.keyboard.insert", + "english_translation": "Insert" + }, + { + "key": "block.minecraft.banner.creeper.green", + "english_translation": "Green Creeper Charge" + }, + { + "key": "block.minecraft.dragon_wall_head", + "english_translation": "Dragon Wall Head" + }, + { + "key": "advancements.husbandry.breed_an_animal.title", + "english_translation": "The Parrots and the Bats" + }, + { + "key": "block.minecraft.cyan_glazed_terracotta", + "english_translation": "Cyan Glazed Terracotta" + }, + { + "key": "block.minecraft.potted_spruce_sapling", + "english_translation": "Potted Spruce Sapling" + }, + { + "key": "item.minecraft.cave_spider_spawn_egg", + "english_translation": "Cave Spider Spawn Egg" + }, + { + "key": "subtitles.entity.parrot.imitate.hoglin", + "english_translation": "Parrot growls" + }, + { + "key": "block.minecraft.banner.gradient.magenta", + "english_translation": "Magenta Gradient" + }, + { + "key": "block.minecraft.deepslate_tile_wall", + "english_translation": "Deepslate Tile Wall" + }, + { + "key": "multiplayer.status.request_handled", + "english_translation": "Status request has been handled" + }, + { + "key": "item.minecraft.splash_potion.effect.swiftness", + "english_translation": "Splash Potion of Swiftness" + }, + { + "key": "subtitles.entity.pig.saddle", + "english_translation": "Saddle equips" + }, + { + "key": "block.minecraft.banner.circle.magenta", + "english_translation": "Magenta Roundel" + }, + { + "key": "item.minecraft.trader_llama_spawn_egg", + "english_translation": "Trader Llama Spawn Egg" + }, + { + "key": "gui.abuseReport.error.title", + "english_translation": "Problem sending your report" + }, + { + "key": "commands.worldborder.warning.distance.success", + "english_translation": "Set the world border warning distance to %s block(s)" + }, + { + "key": "block.minecraft.banner.stripe_bottom.yellow", + "english_translation": "Yellow Base" + }, + { + "key": "block.minecraft.cut_sandstone_slab", + "english_translation": "Cut Sandstone Slab" + }, + { + "key": "options.accessibility.high_contrast.tooltip", + "english_translation": "Enhances the contrast of UI elements" + }, + { + "key": "block.minecraft.potted_cherry_sapling", + "english_translation": "Potted Cherry Sapling" + }, + { + "key": "block.minecraft.dark_oak_sapling", + "english_translation": "Dark Oak Sapling" + }, + { + "key": "block.minecraft.banner.cross.cyan", + "english_translation": "Cyan Saltire" + }, + { + "key": "selectServer.delete", + "english_translation": "Delete" + }, + { + "key": "commands.spreadplayers.success.entities", + "english_translation": "Spread %s player(s) around %s, %s with an average distance of %s blocks apart" + }, + { + "key": "biome.minecraft.deep_lukewarm_ocean", + "english_translation": "Deep Lukewarm Ocean" + }, + { + "key": "createWorld.customize.custom.preset.goodLuck", + "english_translation": "Good Luck" + }, + { + "key": "mco.download.downloading", + "english_translation": "Downloading" + }, + { + "key": "commands.execute.conditional.pass_count", + "english_translation": "Test passed, count: %s" + }, + { + "key": "block.minecraft.potted_poppy", + "english_translation": "Potted Poppy" + }, + { + "key": "advancements.nether.find_fortress.description", + "english_translation": "Break your way into a Nether Fortress" + }, + { + "key": "mco.selectServer.expires.day", + "english_translation": "Expires in a day" + }, + { + "key": "subtitles.entity.mooshroom.convert", + "english_translation": "Mooshroom transforms" + }, + { + "key": "subtitles.entity.sheep.hurt", + "english_translation": "Sheep hurts" + }, + { + "key": "subtitles.item.bottle.fill", + "english_translation": "Bottle fills" + }, + { + "key": "block.minecraft.dead_tube_coral_block", + "english_translation": "Dead Tube Coral Block" + }, + { + "key": "block.minecraft.banner.stripe_downright.magenta", + "english_translation": "Magenta Bend" + }, + { + "key": "block.minecraft.spruce_sapling", + "english_translation": "Spruce Sapling" + }, + { + "key": "block.minecraft.sticky_piston", + "english_translation": "Sticky Piston" + }, + { + "key": "item.minecraft.birch_boat", + "english_translation": "Birch Boat" + }, + { + "key": "subtitles.block.amethyst_block.resonate", + "english_translation": "Amethyst resonates" + }, + { + "key": "block.minecraft.banner.skull.pink", + "english_translation": "Pink Skull Charge" + }, + { + "key": "item.minecraft.wooden_sword", + "english_translation": "Wooden Sword" + }, + { + "key": "jigsaw_block.generate", + "english_translation": "Generate" + }, + { + "key": "commands.banlist.entry", + "english_translation": "%s was banned by %s: %s" + }, + { + "key": "gui.socialInteractions.search_empty", + "english_translation": "Couldn't find any players with that name" + }, + { + "key": "subtitles.entity.llama.chest", + "english_translation": "Llama Chest equips" + }, + { + "key": "mco.errorMessage.realmsService", + "english_translation": "An error occurred (%s):" + }, + { + "key": "painting.minecraft.pigscene.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.magenta_concrete_powder", + "english_translation": "Magenta Concrete Powder" + }, + { + "key": "screenshot.success", + "english_translation": "Saved screenshot as %s" + }, + { + "key": "commands.effect.give.success.multiple", + "english_translation": "Applied effect %s to %s targets" + }, + { + "key": "advMode.mode.redstone", + "english_translation": "Impulse" + }, + { + "key": "block.minecraft.black_concrete", + "english_translation": "Black Concrete" + }, + { + "key": "block.minecraft.banner.globe.yellow", + "english_translation": "Yellow Globe" + }, + { + "key": "selectServer.title", + "english_translation": "Select Server" + }, + { + "key": "block.minecraft.prismarine_wall", + "english_translation": "Prismarine Wall" + }, + { + "key": "subtitles.entity.evoker.prepare_attack", + "english_translation": "Evoker prepares attack" + }, + { + "key": "block.minecraft.banner.diagonal_left.gray", + "english_translation": "Gray Per Bend Sinister" + }, + { + "key": "block.minecraft.banner.gradient_up.black", + "english_translation": "Black Base Gradient" + }, + { + "key": "block.minecraft.spruce_button", + "english_translation": "Spruce Button" + }, + { + "key": "commands.bossbar.set.players.success.none", + "english_translation": "Custom bossbar %s no longer has any players" + }, + { + "key": "options.fullscreen.unavailable", + "english_translation": "Setting unavailable" + }, + { + "key": "argument.scoreboardDisplaySlot.invalid", + "english_translation": "Unknown display slot '%s'" + }, + { + "key": "item.unbreakable", + "english_translation": "Unbreakable" + }, + { + "key": "telemetry.property.new_world.title", + "english_translation": "New World" + }, + { + "key": "block.minecraft.tinted_glass", + "english_translation": "Tinted Glass" + }, + { + "key": "block.minecraft.banner.triangle_bottom.pink", + "english_translation": "Pink Chevron" + }, + { + "key": "commands.team.join.success.multiple", + "english_translation": "Added %s members to team %s" + }, + { + "key": "death.attack.sonic_boom", + "english_translation": "%1$s was obliterated by a sonically-charged shriek" + }, + { + "key": "multiplayer.disconnect.invalid_entity_attacked", + "english_translation": "Attempting to attack an invalid entity" + }, + { + "key": "spectatorMenu.next_page", + "english_translation": "Next Page" + }, + { + "key": "block.minecraft.banner.skull.black", + "english_translation": "Black Skull Charge" + }, + { + "key": "block.minecraft.blue_ice", + "english_translation": "Blue Ice" + }, + { + "key": "demo.help.jump", + "english_translation": "Jump by pressing the %1$s key" + }, + { + "key": "subtitles.entity.ender_eye.death", + "english_translation": "Eye of Ender falls" + }, + { + "key": "lanServer.scanning", + "english_translation": "Scanning for games on your local network" + }, + { + "key": "parsing.double.expected", + "english_translation": "Expected double" + }, + { + "key": "commands.gamemode.success.self", + "english_translation": "Set own game mode to %s" + }, + { + "key": "mco.configure.world.slot.tooltip.minigame", + "english_translation": "Switch to minigame" + }, + { + "key": "menu.sendFeedback", + "english_translation": "Give Feedback" + }, + { + "key": "entity.minecraft.parrot", + "english_translation": "Parrot" + }, + { + "key": "gui.abuseReport.reason.non_consensual_intimate_imagery.description", + "english_translation": "Someone is talking about, sharing, or otherwise promoting private and intimate images." + }, + { + "key": "argument.entity.options.sort.irreversible", + "english_translation": "Invalid or unknown sort type '%s'" + }, + { + "key": "block.minecraft.acacia_log", + "english_translation": "Acacia Log" + }, + { + "key": "subtitles.entity.slime.squish", + "english_translation": "Slime squishes" + }, + { + "key": "subtitles.entity.donkey.death", + "english_translation": "Donkey dies" + }, + { + "key": "block.minecraft.orange_glazed_terracotta", + "english_translation": "Orange Glazed Terracotta" + }, + { + "key": "item.minecraft.shield.lime", + "english_translation": "Lime Shield" + }, + { + "key": "parsing.quote.expected.start", + "english_translation": "Expected quote to start a string" + }, + { + "key": "entity.minecraft.phantom", + "english_translation": "Phantom" + }, + { + "key": "item.minecraft.egg", + "english_translation": "Egg" + }, + { + "key": "commands.worldborder.set.failed.far", + "english_translation": "World border cannot be further out than %s blocks" + }, + { + "key": "item.minecraft.music_disc_blocks.desc", + "english_translation": "C418 - blocks" + }, + { + "key": "entity.minecraft.dolphin", + "english_translation": "Dolphin" + }, + { + "key": "biome.minecraft.plains", + "english_translation": "Plains" + }, + { + "key": "item.minecraft.honey_bottle", + "english_translation": "Honey Bottle" + }, + { + "key": "gui.entity_tooltip.type", + "english_translation": "Type: %s" + }, + { + "key": "block.minecraft.banner.creeper.black", + "english_translation": "Black Creeper Charge" + }, + { + "key": "commands.advancement.grant.criterion.to.one.failure", + "english_translation": "Couldn't grant criterion '%s' of advancement %s to %s as they already have it" + }, + { + "key": "block.minecraft.banner.bricks.lime", + "english_translation": "Lime Field Masoned" + }, + { + "key": "subtitles.entity.wandering_trader.drink_potion", + "english_translation": "Wandering Trader drinks potion" + }, + { + "key": "commands.scoreboard.objectives.list.empty", + "english_translation": "There are no objectives" + }, + { + "key": "item.minecraft.glow_berries", + "english_translation": "Glow Berries" + }, + { + "key": "block.minecraft.bed.occupied", + "english_translation": "This bed is occupied" + }, + { + "key": "structure_block.hover.load", + "english_translation": "Load: %s" + }, + { + "key": "item.minecraft.dragon_breath", + "english_translation": "Dragon's Breath" + }, + { + "key": "subtitles.block.bubble_column.whirlpool_inside", + "english_translation": "Bubbles zoom" + }, + { + "key": "chat.filtered", + "english_translation": "Filtered by the server." + }, + { + "key": "block.minecraft.banner.stripe_left.gray", + "english_translation": "Gray Pale Dexter" + }, + { + "key": "subtitles.entity.parrot.imitate.drowned", + "english_translation": "Parrot gurgles" + }, + { + "key": "block.minecraft.banner.rhombus.cyan", + "english_translation": "Cyan Lozenge" + }, + { + "key": "color.minecraft.lime", + "english_translation": "Lime" + }, + { + "key": "gamerule.category.updates", + "english_translation": "World Updates" + }, + { + "key": "block.minecraft.yellow_stained_glass_pane", + "english_translation": "Yellow Stained Glass Pane" + }, + { + "key": "block.minecraft.banner.stripe_downleft.light_gray", + "english_translation": "Light Gray Bend Sinister" + }, + { + "key": "commands.locate.biome.not_found", + "english_translation": "Could not find a biome of type \"%s\" within reasonable distance" + }, + { + "key": "attribute.modifier.equals.2", + "english_translation": "%s%% %s" + }, + { + "key": "attribute.modifier.equals.1", + "english_translation": "%s%% %s" + }, + { + "key": "attribute.modifier.equals.0", + "english_translation": "%s %s" + }, + { + "key": "block.minecraft.polished_blackstone_bricks", + "english_translation": "Polished Blackstone Bricks" + }, + { + "key": "options.accessibility.high_contrast.error.tooltip", + "english_translation": "High Contrast resource pack is not available" + }, + { + "key": "attribute.name.zombie.spawn_reinforcements", + "english_translation": "Zombie Reinforcements" + }, + { + "key": "subtitles.entity.panda.sneeze", + "english_translation": "Panda sneezes" + }, + { + "key": "block.minecraft.banner.gradient_up.green", + "english_translation": "Green Base Gradient" + }, + { + "key": "block.minecraft.banner.globe.lime", + "english_translation": "Lime Globe" + }, + { + "key": "telemetry.property.world_session_id.title", + "english_translation": "World Session ID" + }, + { + "key": "block.minecraft.warped_hanging_sign", + "english_translation": "Warped Hanging Sign" + }, + { + "key": "subtitles.entity.villager.work_fisherman", + "english_translation": "Fisherman works" + }, + { + "key": "enchantment.minecraft.fire_protection", + "english_translation": "Fire Protection" + }, + { + "key": "chat.type.advancement.goal", + "english_translation": "%s has reached the goal %s" + }, + { + "key": "block.minecraft.cherry_planks", + "english_translation": "Cherry Planks" + }, + { + "key": "argument.range.empty", + "english_translation": "Expected value or range of values" + }, + { + "key": "multiplayer.disconnect.server_shutdown", + "english_translation": "Server closed" + }, + { + "key": "multiplayer.disconnect.banned_ip.reason", + "english_translation": "Your IP address is banned from this server.\nReason: %s" + }, + { + "key": "key.use", + "english_translation": "Use Item/Place Block" + }, + { + "key": "resourcepack.downloading", + "english_translation": "Downloading Resource Pack" + }, + { + "key": "generator.single_biome_floating_islands", + "english_translation": "Floating Islands" + }, + { + "key": "commands.enchant.failed.itemless", + "english_translation": "%s is not holding any item" + }, + { + "key": "createWorld.customize.presets.share", + "english_translation": "Want to share your preset with someone? Use the box below!" + }, + { + "key": "sleep.not_possible", + "english_translation": "No amount of rest can pass this night" + }, + { + "key": "block.minecraft.brown_candle", + "english_translation": "Brown Candle" + }, + { + "key": "structure_block.show_boundingbox", + "english_translation": "Show Bounding Box:" + }, + { + "key": "gui.chatReport.discard.title", + "english_translation": "Discard report and comments?" + }, + { + "key": "stat.minecraft.clean_banner", + "english_translation": "Banners Cleaned" + }, + { + "key": "block.minecraft.banner.straight_cross.black", + "english_translation": "Black Cross" + }, + { + "key": "item.minecraft.firework_star.purple", + "english_translation": "Purple" + }, + { + "key": "item.minecraft.shield.yellow", + "english_translation": "Yellow Shield" + }, + { + "key": "key.keyboard.backspace", + "english_translation": "Backspace" + }, + { + "key": "block.minecraft.banner.stripe_middle.red", + "english_translation": "Red Fess" + }, + { + "key": "block.minecraft.stripped_birch_wood", + "english_translation": "Stripped Birch Wood" + }, + { + "key": "item.minecraft.firework_star.flicker", + "english_translation": "Twinkle" + }, + { + "key": "item.minecraft.creeper_banner_pattern.desc", + "english_translation": "Creeper Charge" + }, + { + "key": "gameMode.spectator", + "english_translation": "Spectator Mode" + }, + { + "key": "subtitles.entity.shulker.shoot", + "english_translation": "Shulker shoots" + }, + { + "key": "menu.modded", + "english_translation": " (Modded)" + }, + { + "key": "block.minecraft.banner.curly_border.cyan", + "english_translation": "Cyan Bordure Indented" + }, + { + "key": "subtitles.item.shears.shear", + "english_translation": "Shears click" + }, + { + "key": "stat.generalButton", + "english_translation": "General" + }, + { + "key": "block.minecraft.banner.square_top_right.light_blue", + "english_translation": "Light Blue Chief Sinister Canton" + }, + { + "key": "structure_block.hover.save", + "english_translation": "Save: %s" + }, + { + "key": "argument.angle.invalid", + "english_translation": "Invalid angle" + }, + { + "key": "item.minecraft.echo_shard", + "english_translation": "Echo Shard" + }, + { + "key": "block.minecraft.stonecutter", + "english_translation": "Stonecutter" + }, + { + "key": "painting.minecraft.earth.title", + "english_translation": "Earth" + }, + { + "key": "block.minecraft.jukebox", + "english_translation": "Jukebox" + }, + { + "key": "block.minecraft.potted_mangrove_propagule", + "english_translation": "Potted Mangrove Propagule" + }, + { + "key": "entity.minecraft.command_block_minecart", + "english_translation": "Minecart with Command Block" + }, + { + "key": "effect.minecraft.nausea", + "english_translation": "Nausea" + }, + { + "key": "block.minecraft.gold_block", + "english_translation": "Block of Gold" + }, + { + "key": "block.minecraft.lime_concrete_powder", + "english_translation": "Lime Concrete Powder" + }, + { + "key": "telemetry.property.platform.title", + "english_translation": "Platform" + }, + { + "key": "advancements.adventure.lightning_rod_with_villager_no_fire.title", + "english_translation": "Surge Protector" + }, + { + "key": "block.minecraft.banner.square_top_left.magenta", + "english_translation": "Magenta Chief Dexter Canton" + }, + { + "key": "subtitles.entity.zoglin.attack", + "english_translation": "Zoglin attacks" + }, + { + "key": "enchantment.minecraft.looting", + "english_translation": "Looting" + }, + { + "key": "key.chat", + "english_translation": "Open Chat" + }, + { + "key": "block.minecraft.ancient_debris", + "english_translation": "Ancient Debris" + }, + { + "key": "block.minecraft.banner.stripe_right.black", + "english_translation": "Black Pale Sinister" + }, + { + "key": "disconnect.kicked", + "english_translation": "Was kicked from the game" + }, + { + "key": "block.minecraft.banner.skull.green", + "english_translation": "Green Skull Charge" + }, + { + "key": "block.minecraft.banner.square_top_right.magenta", + "english_translation": "Magenta Chief Sinister Canton" + }, + { + "key": "advancements.nether.ride_strider_in_overworld_lava.description", + "english_translation": "Take a Strider for a loooong ride on a lava lake in the Overworld" + }, + { + "key": "gui.none", + "english_translation": "None" + }, + { + "key": "commands.schedule.cleared.failure", + "english_translation": "No schedules with id %s" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.cyan", + "english_translation": "Cyan Per Bend Sinister Inverted" + }, + { + "key": "color.minecraft.blue", + "english_translation": "Blue" + }, + { + "key": "block.minecraft.banner.gradient_up.light_blue", + "english_translation": "Light Blue Base Gradient" + }, + { + "key": "enchantment.minecraft.efficiency", + "english_translation": "Efficiency" + }, + { + "key": "demo.help.later", + "english_translation": "Continue Playing!" + }, + { + "key": "block.minecraft.exposed_copper", + "english_translation": "Exposed Copper" + }, + { + "key": "selectWorld.edit.backupCreated", + "english_translation": "Backed up: %s" + }, + { + "key": "options.hideMatchedNames", + "english_translation": "Hide Matched Names" + }, + { + "key": "compliance.playtime.message", + "english_translation": "Excessive gaming may interfere with normal daily life" + }, + { + "key": "block.minecraft.banner.square_bottom_left.green", + "english_translation": "Green Base Dexter Canton" + }, + { + "key": "advancements.husbandry.plant_any_sniffer_seed.description", + "english_translation": "Plant any Sniffer seed" + }, + { + "key": "effect.minecraft.unluck", + "english_translation": "Bad Luck" + }, + { + "key": "commands.data.storage.modified", + "english_translation": "Modified storage %s" + }, + { + "key": "block.minecraft.dead_horn_coral_fan", + "english_translation": "Dead Horn Coral Fan" + }, + { + "key": "narrator.select.world_info", + "english_translation": "Selected %s, last played: %s, %s" + }, + { + "key": "mco.configure.world.subscription.days", + "english_translation": "days" + }, + { + "key": "subtitles.entity.vindicator.hurt", + "english_translation": "Vindicator hurts" + }, + { + "key": "block.minecraft.banner.globe.blue", + "english_translation": "Blue Globe" + }, + { + "key": "createWorld.customize.custom.preset.drought", + "english_translation": "Drought" + }, + { + "key": "block.minecraft.iron_trapdoor", + "english_translation": "Iron Trapdoor" + }, + { + "key": "item.minecraft.music_disc_11.desc", + "english_translation": "C418 - 11" + }, + { + "key": "item.minecraft.polar_bear_spawn_egg", + "english_translation": "Polar Bear Spawn Egg" + }, + { + "key": "arguments.item.overstacked", + "english_translation": "%s can only stack up to %s" + }, + { + "key": "block.minecraft.banner.diagonal_right.brown", + "english_translation": "Brown Per Bend" + }, + { + "key": "death.attack.fallingBlock", + "english_translation": "%1$s was squashed by a falling block" + }, + { + "key": "block.minecraft.banner.flower.magenta", + "english_translation": "Magenta Flower Charge" + }, + { + "key": "block.minecraft.black_glazed_terracotta", + "english_translation": "Black Glazed Terracotta" + }, + { + "key": "mco.invites.title", + "english_translation": "Pending Invites" + }, + { + "key": "mco.account.update", + "english_translation": "Update account" + }, + { + "key": "block.minecraft.light_blue_candle", + "english_translation": "Light Blue Candle" + }, + { + "key": "item.minecraft.firework_star", + "english_translation": "Firework Star" + }, + { + "key": "createWorld.customize.custom.mainNoiseScaleX", + "english_translation": "Main Noise Scale X" + }, + { + "key": "block.minecraft.cherry_trapdoor", + "english_translation": "Cherry Trapdoor" + }, + { + "key": "createWorld.customize.custom.mainNoiseScaleY", + "english_translation": "Main Noise Scale Y" + }, + { + "key": "createWorld.customize.custom.mainNoiseScaleZ", + "english_translation": "Main Noise Scale Z" + }, + { + "key": "key.categories.ui", + "english_translation": "Game Interface" + }, + { + "key": "options.gamma.min", + "english_translation": "Moody" + }, + { + "key": "mco.configure.world.subscription.unknown", + "english_translation": "Unknown" + }, + { + "key": "block.minecraft.banner.half_vertical.orange", + "english_translation": "Orange Per Pale" + }, + { + "key": "mco.minigame.world.startButton", + "english_translation": "Switch" + }, + { + "key": "commands.data.modify.invalid_index", + "english_translation": "Invalid list index: %s" + }, + { + "key": "block.minecraft.banner.square_bottom_left.black", + "english_translation": "Black Base Dexter Canton" + }, + { + "key": "block.minecraft.spruce_wall_hanging_sign", + "english_translation": "Spruce Wall Hanging Sign" + }, + { + "key": "biome.minecraft.wooded_badlands", + "english_translation": "Wooded Badlands" + }, + { + "key": "block.minecraft.cornflower", + "english_translation": "Cornflower" + }, + { + "key": "options.discrete_mouse_scroll", + "english_translation": "Discrete Scrolling" + }, + { + "key": "chat_screen.title", + "english_translation": "Chat screen" + }, + { + "key": "structure_block.mode_info.corner", + "english_translation": "Corner Mode - Placement and Size Marker" + }, + { + "key": "block.minecraft.bamboo_fence", + "english_translation": "Bamboo Fence" + }, + { + "key": "debug.inspect.client.block", + "english_translation": "Copied client-side block data to clipboard" + }, + { + "key": "dataPack.validation.failed", + "english_translation": "Data pack validation failed!" + }, + { + "key": "mco.activity.noactivity", + "english_translation": "No activity for the past %s day(s)" + }, + { + "key": "entity.minecraft.villager.weaponsmith", + "english_translation": "Weaponsmith" + }, + { + "key": "block.minecraft.purple_glazed_terracotta", + "english_translation": "Purple Glazed Terracotta" + }, + { + "key": "menu.paused", + "english_translation": "Game Paused" + }, + { + "key": "mco.selectServer.play", + "english_translation": "Play" + }, + { + "key": "block.minecraft.spawner.desc2", + "english_translation": "Sets Mob Type" + }, + { + "key": "block.minecraft.spawner.desc1", + "english_translation": "Interact with Spawn Egg:" + }, + { + "key": "subtitles.entity.magma_cube.hurt", + "english_translation": "Magma Cube hurts" + }, + { + "key": "advancements.story.cure_zombie_villager.description", + "english_translation": "Weaken and then cure a Zombie Villager" + }, + { + "key": "commands.trigger.failed.unprimed", + "english_translation": "You cannot trigger this objective yet" + }, + { + "key": "advancements.husbandry.complete_catalogue.title", + "english_translation": "A Complete Catalogue" + }, + { + "key": "selectWorld.unable_to_load", + "english_translation": "Unable to load worlds" + }, + { + "key": "subtitles.entity.goat.screaming.ambient", + "english_translation": "Goat bellows" + }, + { + "key": "options.language", + "english_translation": "Language..." + }, + { + "key": "block.minecraft.vine", + "english_translation": "Vines" + }, + { + "key": "block.minecraft.banner.diagonal_left.yellow", + "english_translation": "Yellow Per Bend Sinister" + }, + { + "key": "block.minecraft.orange_concrete", + "english_translation": "Orange Concrete" + }, + { + "key": "subtitles.entity.illusioner.mirror_move", + "english_translation": "Illusioner displaces" + }, + { + "key": "block.minecraft.infested_stone_bricks", + "english_translation": "Infested Stone Bricks" + }, + { + "key": "commands.playsound.failed", + "english_translation": "The sound is too far away to be heard" + }, + { + "key": "block.minecraft.banner.flower.lime", + "english_translation": "Lime Flower Charge" + }, + { + "key": "commands.whitelist.enabled", + "english_translation": "Whitelist is now turned on" + }, + { + "key": "block.minecraft.magenta_wool", + "english_translation": "Magenta Wool" + }, + { + "key": "entity.minecraft.villager.fletcher", + "english_translation": "Fletcher" + }, + { + "key": "debug.gamemodes.select_next", + "english_translation": "%s Next" + }, + { + "key": "subtitles.entity.goat.hurt", + "english_translation": "Goat hurts" + }, + { + "key": "block.minecraft.brown_concrete_powder", + "english_translation": "Brown Concrete Powder" + }, + { + "key": "subtitles.entity.wither_skeleton.ambient", + "english_translation": "Wither Skeleton rattles" + }, + { + "key": "trim_pattern.minecraft.silence", + "english_translation": "Silence Armor Trim" + }, + { + "key": "block.minecraft.acacia_trapdoor", + "english_translation": "Acacia Trapdoor" + }, + { + "key": "commands.spectate.success.stopped", + "english_translation": "No longer spectating an entity" + }, + { + "key": "block.minecraft.stripped_cherry_log", + "english_translation": "Stripped Cherry Log" + }, + { + "key": "createWorld.customize.custom.depthNoiseScaleExponent", + "english_translation": "Depth Noise Exponent" + }, + { + "key": "tutorial.move.description", + "english_translation": "Jump with %s" + }, + { + "key": "block.minecraft.amethyst_cluster", + "english_translation": "Amethyst Cluster" + }, + { + "key": "block.minecraft.banner.straight_cross.green", + "english_translation": "Green Cross" + }, + { + "key": "commands.bossbar.set.style.unchanged", + "english_translation": "Nothing changed. That's already the style of this bossbar" + }, + { + "key": "gui.days", + "english_translation": "%s day(s)" + }, + { + "key": "subtitles.block.fire.extinguish", + "english_translation": "Fire extinguished" + }, + { + "key": "resourcePack.vanilla.name", + "english_translation": "Default" + }, + { + "key": "mco.configure.world.slot", + "english_translation": "World %s" + }, + { + "key": "block.minecraft.waxed_cut_copper", + "english_translation": "Waxed Cut Copper" + }, + { + "key": "block.minecraft.birch_slab", + "english_translation": "Birch Slab" + }, + { + "key": "gui.chatSelection.fold", + "english_translation": "%s message(s) hidden" + }, + { + "key": "painting.minecraft.alban.title", + "english_translation": "Albanian" + }, + { + "key": "mco.upload.failed", + "english_translation": "Upload failed! (%s)" + }, + { + "key": "biome.minecraft.cold_ocean", + "english_translation": "Cold Ocean" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.pink", + "english_translation": "Pink Per Fess Inverted" + }, + { + "key": "options.framerateLimit", + "english_translation": "Max Framerate" + }, + { + "key": "trim_material.minecraft.amethyst", + "english_translation": "Amethyst Material" + }, + { + "key": "narrator.button.difficulty_lock.unlocked", + "english_translation": "Unlocked" + }, + { + "key": "commands.datapack.list.available.none", + "english_translation": "There are no more data packs available" + }, + { + "key": "enchantment.minecraft.riptide", + "english_translation": "Riptide" + }, + { + "key": "selectWorld.warning.deprecated.question", + "english_translation": "Some features used are deprecated and will stop working in the future. Do you wish to proceed?" + }, + { + "key": "argument.nbt.array.mixed", + "english_translation": "Can't insert %s into %s" + }, + { + "key": "block.minecraft.banner.triangle_top.gray", + "english_translation": "Gray Inverted Chevron" + }, + { + "key": "commands.kill.success.multiple", + "english_translation": "Killed %s entities" + }, + { + "key": "block.minecraft.brown_concrete", + "english_translation": "Brown Concrete" + }, + { + "key": "disconnect.loginFailedInfo.userBanned", + "english_translation": "You are banned from playing online" + }, + { + "key": "block.minecraft.potted_bamboo", + "english_translation": "Potted Bamboo" + }, + { + "key": "block.minecraft.blackstone_wall", + "english_translation": "Blackstone Wall" + }, + { + "key": "advMode.command", + "english_translation": "Console Command" + }, + { + "key": "subtitles.entity.parrot.imitate.warden", + "english_translation": "Parrot whines" + }, + { + "key": "options.chat.line_spacing", + "english_translation": "Line Spacing" + }, + { + "key": "block.minecraft.banner.flower.blue", + "english_translation": "Blue Flower Charge" + }, + { + "key": "datapackFailure.title", + "english_translation": "Errors in currently selected data packs prevented the world from loading.\nYou can either try to load it with only the vanilla data pack (\"safe mode\"), or go back to the title screen and fix it manually." + }, + { + "key": "biome.minecraft.frozen_peaks", + "english_translation": "Frozen Peaks" + }, + { + "key": "key.keyboard.keypad.divide", + "english_translation": "Keypad /" + }, + { + "key": "block.minecraft.sugar_cane", + "english_translation": "Sugar Cane" + }, + { + "key": "item.color", + "english_translation": "Color: %s" + }, + { + "key": "block.minecraft.end_gateway", + "english_translation": "End Gateway" + }, + { + "key": "advancements.nether.summon_wither.description", + "english_translation": "Summon the Wither" + }, + { + "key": "block.minecraft.deepslate_copper_ore", + "english_translation": "Deepslate Copper Ore" + }, + { + "key": "item.minecraft.shelter_pottery_sherd", + "english_translation": "Shelter Pottery Sherd" + }, + { + "key": "resourcePack.server.name", + "english_translation": "World Specific Resources" + }, + { + "key": "block.minecraft.cracked_deepslate_bricks", + "english_translation": "Cracked Deepslate Bricks" + }, + { + "key": "subtitles.block.door.toggle", + "english_translation": "Door creaks" + }, + { + "key": "multiplayer.disconnect.outdated_client", + "english_translation": "Incompatible client! Please use %s" + }, + { + "key": "block.minecraft.horn_coral_wall_fan", + "english_translation": "Horn Coral Wall Fan" + }, + { + "key": "entity.minecraft.warden", + "english_translation": "Warden" + }, + { + "key": "mco.selectServer.mapOnlySupportedForVersion", + "english_translation": "This map is unsupported in %s" + }, + { + "key": "item.minecraft.golden_axe", + "english_translation": "Golden Axe" + }, + { + "key": "item.minecraft.skull_pottery_sherd", + "english_translation": "Skull Pottery Sherd" + }, + { + "key": "block.minecraft.deepslate_tiles", + "english_translation": "Deepslate Tiles" + }, + { + "key": "commands.execute.conditional.pass", + "english_translation": "Test passed" + }, + { + "key": "gui.abuseReport.reason.defamation_impersonation_false_information.description", + "english_translation": "Someone is damaging someone else's reputation, pretending to be someone they're not, or sharing false information with the aim to exploit or mislead others." + }, + { + "key": "block.minecraft.banner.gradient_up.cyan", + "english_translation": "Cyan Base Gradient" + }, + { + "key": "mco.backup.entry.undefined", + "english_translation": "Undefined Change" + }, + { + "key": "subtitles.entity.turtle.shamble_baby", + "english_translation": "Turtle baby shambles" + }, + { + "key": "biome.minecraft.snowy_slopes", + "english_translation": "Snowy Slopes" + }, + { + "key": "death.attack.fallingStalactite", + "english_translation": "%1$s was skewered by a falling stalactite" + }, + { + "key": "block.minecraft.blue_concrete", + "english_translation": "Blue Concrete" + }, + { + "key": "block.minecraft.banner.creeper.white", + "english_translation": "White Creeper Charge" + }, + { + "key": "selectWorld.import_worldgen_settings", + "english_translation": "Import Settings" + }, + { + "key": "block.minecraft.banner.triangles_bottom.lime", + "english_translation": "Lime Base Indented" + }, + { + "key": "item.minecraft.smithing_template.ingredients", + "english_translation": "Ingredients:" + }, + { + "key": "mco.terms.title", + "english_translation": "Realms Terms of Service" + }, + { + "key": "item.minecraft.light_gray_dye", + "english_translation": "Light Gray Dye" + }, + { + "key": "block.minecraft.banner.border.brown", + "english_translation": "Brown Bordure" + }, + { + "key": "block.minecraft.fire_coral_wall_fan", + "english_translation": "Fire Coral Wall Fan" + }, + { + "key": "block.minecraft.dispenser", + "english_translation": "Dispenser" + }, + { + "key": "subtitles.item.armor.equip", + "english_translation": "Gear equips" + }, + { + "key": "biome.minecraft.meadow", + "english_translation": "Meadow" + }, + { + "key": "subtitles.entity.parrot.imitate.skeleton", + "english_translation": "Parrot rattles" + }, + { + "key": "argument.entity.toomany", + "english_translation": "Only one entity is allowed, but the provided selector allows more than one" + }, + { + "key": "item.minecraft.heartbreak_pottery_shard", + "english_translation": "Heartbreak Pottery Shard" + }, + { + "key": "commands.playsound.success.single", + "english_translation": "Played sound %s to %s" + }, + { + "key": "subtitles.entity.ravager.celebrate", + "english_translation": "Ravager cheers" + }, + { + "key": "lanServer.start", + "english_translation": "Start LAN World" + }, + { + "key": "subtitles.entity.player.attack.sweep", + "english_translation": "Sweeping attack" + }, + { + "key": "block.minecraft.emerald_ore", + "english_translation": "Emerald Ore" + }, + { + "key": "mco.template.select.narrate.version", + "english_translation": "version %s" + }, + { + "key": "subtitles.entity.elder_guardian.ambient", + "english_translation": "Elder Guardian moans" + }, + { + "key": "advancements.nether.brew_potion.description", + "english_translation": "Brew a Potion" + }, + { + "key": "chat.disabled.launcher", + "english_translation": "Chat disabled by launcher option. Cannot send message." + }, + { + "key": "subtitles.entity.magma_cube.squish", + "english_translation": "Magma Cube squishes" + }, + { + "key": "block.minecraft.dead_tube_coral_wall_fan", + "english_translation": "Dead Tube Coral Wall Fan" + }, + { + "key": "subtitles.block.beehive.exit", + "english_translation": "Bee leaves hive" + }, + { + "key": "options.gamma.max", + "english_translation": "Bright" + }, + { + "key": "block.minecraft.polished_blackstone_pressure_plate", + "english_translation": "Polished Blackstone Pressure Plate" + }, + { + "key": "commands.enchant.failed.entity", + "english_translation": "%s is not a valid entity for this command" + }, + { + "key": "subtitles.block.chest.open", + "english_translation": "Chest opens" + }, + { + "key": "block.minecraft.banner.border.orange", + "english_translation": "Orange Bordure" + }, + { + "key": "subtitles.entity.husk.converted_to_zombie", + "english_translation": "Husk converts to Zombie" + }, + { + "key": "subtitles.entity.pig.death", + "english_translation": "Pig dies" + }, + { + "key": "argument.id.invalid", + "english_translation": "Invalid ID" + }, + { + "key": "block.minecraft.purple_bed", + "english_translation": "Purple Bed" + }, + { + "key": "options.credits_and_attribution", + "english_translation": "Credits & Attribution..." + }, + { + "key": "mco.create.world.subtitle", + "english_translation": "Optionally, select what world to put on your new realm" + }, + { + "key": "options.screenEffectScale", + "english_translation": "Distortion Effects" + }, + { + "key": "block.minecraft.banner.flower.purple", + "english_translation": "Purple Flower Charge" + }, + { + "key": "mco.configure.world.edit.subscreen.inspiration", + "english_translation": "Some settings are disabled since your current world is an inspiration" + }, + { + "key": "entity.minecraft.small_fireball", + "english_translation": "Small Fireball" + }, + { + "key": "advancements.toast.goal", + "english_translation": "Goal Reached!" + }, + { + "key": "block.minecraft.banner.circle.light_blue", + "english_translation": "Light Blue Roundel" + }, + { + "key": "item.minecraft.bundle", + "english_translation": "Bundle" + }, + { + "key": "block.minecraft.banner.stripe_top.red", + "english_translation": "Red Chief" + }, + { + "key": "key.categories.movement", + "english_translation": "Movement" + }, + { + "key": "block.minecraft.magenta_glazed_terracotta", + "english_translation": "Magenta Glazed Terracotta" + }, + { + "key": "subtitles.entity.puffer_fish.hurt", + "english_translation": "Pufferfish hurts" + }, + { + "key": "advancements.adventure.lightning_rod_with_villager_no_fire.description", + "english_translation": "Protect a Villager from an undesired shock without starting a fire" + }, + { + "key": "commands.bossbar.set.players.unchanged", + "english_translation": "Nothing changed. Those players are already on the bossbar with nobody to add or remove" + }, + { + "key": "block.minecraft.moving_piston", + "english_translation": "Moving Piston" + }, + { + "key": "subtitles.entity.squid.ambient", + "english_translation": "Squid swims" + }, + { + "key": "block.minecraft.fire", + "english_translation": "Fire" + }, + { + "key": "block.minecraft.banner.stripe_downleft.yellow", + "english_translation": "Yellow Bend Sinister" + }, + { + "key": "block.minecraft.birch_door", + "english_translation": "Birch Door" + }, + { + "key": "block.minecraft.cyan_shulker_box", + "english_translation": "Cyan Shulker Box" + }, + { + "key": "advancements.nether.obtain_blaze_rod.description", + "english_translation": "Relieve a Blaze of its rod" + }, + { + "key": "block.minecraft.smooth_sandstone_stairs", + "english_translation": "Smooth Sandstone Stairs" + }, + { + "key": "subtitles.entity.spider.death", + "english_translation": "Spider dies" + }, + { + "key": "block.minecraft.lime_glazed_terracotta", + "english_translation": "Lime Glazed Terracotta" + }, + { + "key": "subtitles.entity.ender_dragon.death", + "english_translation": "Dragon dies" + }, + { + "key": "key.keyboard.down", + "english_translation": "Down Arrow" + }, + { + "key": "stat.minecraft.open_barrel", + "english_translation": "Barrels Opened" + }, + { + "key": "debug.creative_spectator.error", + "english_translation": "Unable to switch game mode; no permission" + }, + { + "key": "mco.brokenworld.nonowner.title", + "english_translation": "World is out of date" + }, + { + "key": "block.minecraft.heavy_weighted_pressure_plate", + "english_translation": "Heavy Weighted Pressure Plate" + }, + { + "key": "telemetry.property.frame_rate_samples.title", + "english_translation": "Frame Rate Samples (FPS)" + }, + { + "key": "block.minecraft.banner.half_vertical.gray", + "english_translation": "Gray Per Pale" + }, + { + "key": "gui.socialInteractions.search_hint", + "english_translation": "Search..." + }, + { + "key": "entity.minecraft.cod", + "english_translation": "Cod" + }, + { + "key": "argument.entity.options.sort.description", + "english_translation": "Sort the entities" + }, + { + "key": "commands.banlist.list", + "english_translation": "There are %s ban(s):" + }, + { + "key": "entity.minecraft.hoglin", + "english_translation": "Hoglin" + }, + { + "key": "biome.minecraft.basalt_deltas", + "english_translation": "Basalt Deltas" + }, + { + "key": "block.minecraft.banner.stripe_right.green", + "english_translation": "Green Pale Sinister" + }, + { + "key": "argument.block.tag.disallowed", + "english_translation": "Tags aren't allowed here, only actual blocks" + }, + { + "key": "options.videoTitle", + "english_translation": "Video Settings" + }, + { + "key": "entity.minecraft.cow", + "english_translation": "Cow" + }, + { + "key": "generator.minecraft.debug_all_block_states", + "english_translation": "Debug Mode" + }, + { + "key": "block.minecraft.pink_glazed_terracotta", + "english_translation": "Pink Glazed Terracotta" + }, + { + "key": "painting.minecraft.bust.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "telemetry.property.ticks_since_load.title", + "english_translation": "Time Since Load (Ticks)" + }, + { + "key": "subtitles.entity.hoglin.retreat", + "english_translation": "Hoglin retreats" + }, + { + "key": "commands.forceload.removed.single", + "english_translation": "Unmarked chunk %s in %s for force loading" + }, + { + "key": "block.minecraft.light_blue_carpet", + "english_translation": "Light Blue Carpet" + }, + { + "key": "subtitles.entity.axolotl.death", + "english_translation": "Axolotl dies" + }, + { + "key": "chat.disabled.chain_broken", + "english_translation": "Chat disabled due to broken chain. Please try reconnecting." + }, + { + "key": "enchantment.minecraft.piercing", + "english_translation": "Piercing" + }, + { + "key": "entity.minecraft.ravager", + "english_translation": "Ravager" + }, + { + "key": "mco.configure.world.invited", + "english_translation": "Invited" + }, + { + "key": "options.glintStrength.tooltip", + "english_translation": "Controls how transparent the visual glint is on enchanted items." + }, + { + "key": "death.attack.thrown", + "english_translation": "%1$s was pummeled by %2$s" + }, + { + "key": "entity.minecraft.tnt", + "english_translation": "Primed TNT" + }, + { + "key": "item.minecraft.potion.effect.slowness", + "english_translation": "Potion of Slowness" + }, + { + "key": "block.minecraft.mossy_stone_brick_slab", + "english_translation": "Mossy Stone Brick Slab" + }, + { + "key": "createWorld.customize.custom.useLavaOceans", + "english_translation": "Lava Oceans" + }, + { + "key": "biome.minecraft.stony_peaks", + "english_translation": "Stony Peaks" + }, + { + "key": "color.minecraft.light_gray", + "english_translation": "Light Gray" + }, + { + "key": "subtitles.entity.slime.death", + "english_translation": "Slime dies" + }, + { + "key": "subtitles.entity.firework_rocket.blast", + "english_translation": "Firework blasts" + }, + { + "key": "addServer.title", + "english_translation": "Edit Server Info" + }, + { + "key": "key.keyboard.grave.accent", + "english_translation": "`" + }, + { + "key": "block.minecraft.lime_candle", + "english_translation": "Lime Candle" + }, + { + "key": "subtitles.particle.soul_escape", + "english_translation": "Soul escapes" + }, + { + "key": "mco.selectServer.expired", + "english_translation": "Expired realm" + }, + { + "key": "color.minecraft.white", + "english_translation": "White" + }, + { + "key": "commands.datapack.enable.failed", + "english_translation": "Pack '%s' is already enabled!" + }, + { + "key": "block.minecraft.enchanting_table", + "english_translation": "Enchanting Table" + }, + { + "key": "block.minecraft.barrel", + "english_translation": "Barrel" + }, + { + "key": "narrator.button.language", + "english_translation": "Language" + }, + { + "key": "gui.recipebook.toggleRecipes.blastable", + "english_translation": "Showing Blastable" + }, + { + "key": "mco.configure.world.leave.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "mco.configure.world.leave.question.line1", + "english_translation": "If you leave this realm you won't see it unless you are invited again" + }, + { + "key": "subtitles.item.crossbow.charge", + "english_translation": "Crossbow charges up" + }, + { + "key": "block.minecraft.chain", + "english_translation": "Chain" + }, + { + "key": "painting.minecraft.plant.title", + "english_translation": "Paradisträd" + }, + { + "key": "item.minecraft.potion.effect.regeneration", + "english_translation": "Potion of Regeneration" + }, + { + "key": "subtitles.entity.villager.death", + "english_translation": "Villager dies" + }, + { + "key": "subtitles.entity.phantom.bite", + "english_translation": "Phantom bites" + }, + { + "key": "block.minecraft.banner.triangle_top.red", + "english_translation": "Red Inverted Chevron" + }, + { + "key": "stat.minecraft.interact_with_smithing_table", + "english_translation": "Interactions with Smithing Table" + }, + { + "key": "item.minecraft.tipped_arrow.effect.fire_resistance", + "english_translation": "Arrow of Fire Resistance" + }, + { + "key": "block.minecraft.cave_vines_plant", + "english_translation": "Cave Vines Plant" + }, + { + "key": "subtitles.entity.glow_item_frame.remove_item", + "english_translation": "Glow Item Frame empties" + }, + { + "key": "block.minecraft.quartz_block", + "english_translation": "Block of Quartz" + }, + { + "key": "subtitles.block.shulker_box.open", + "english_translation": "Shulker opens" + }, + { + "key": "commands.bossbar.set.max.unchanged", + "english_translation": "Nothing changed. That's already the max of this bossbar" + }, + { + "key": "block.minecraft.banner.gradient.gray", + "english_translation": "Gray Gradient" + }, + { + "key": "key.mouse", + "english_translation": "Button %1$s" + }, + { + "key": "block.minecraft.cut_copper_stairs", + "english_translation": "Cut Copper Stairs" + }, + { + "key": "block.minecraft.banner.triangles_bottom.blue", + "english_translation": "Blue Base Indented" + }, + { + "key": "block.minecraft.stripped_dark_oak_wood", + "english_translation": "Stripped Dark Oak Wood" + }, + { + "key": "commands.worldborder.warning.time.success", + "english_translation": "Set the world border warning time to %s second(s)" + }, + { + "key": "block.minecraft.banner.border.pink", + "english_translation": "Pink Bordure" + }, + { + "key": "mco.configure.world.restore.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "subtitles.entity.strider.idle", + "english_translation": "Strider chirps" + }, + { + "key": "mco.configure.world.restore.question.line1", + "english_translation": "Your world will be restored to date '%s' (%s)" + }, + { + "key": "dataPack.update_1_20.name", + "english_translation": "Update 1.20" + }, + { + "key": "selectWorld.edit.resetIcon", + "english_translation": "Reset Icon" + }, + { + "key": "disconnect.genericReason", + "english_translation": "%s" + }, + { + "key": "block.minecraft.bamboo_mosaic_stairs", + "english_translation": "Bamboo Mosaic Stairs" + }, + { + "key": "biome.minecraft.flower_forest", + "english_translation": "Flower Forest" + }, + { + "key": "subtitles.chiseled_bookshelf.take", + "english_translation": "Book taken" + }, + { + "key": "stat.minecraft.bell_ring", + "english_translation": "Bells Rung" + }, + { + "key": "subtitles.entity.bat.hurt", + "english_translation": "Bat hurts" + }, + { + "key": "subtitles.entity.squid.death", + "english_translation": "Squid dies" + }, + { + "key": "menu.playdemo", + "english_translation": "Play Demo World" + }, + { + "key": "fabric-registry-sync-v0.unknown-remote.footer", + "english_translation": "And %s more..." + }, + { + "key": "block.minecraft.big_dripleaf_stem", + "english_translation": "Big Dripleaf Stem" + }, + { + "key": "options.allowServerListing.tooltip", + "english_translation": "Servers may list online players as part of their public status.\nWith this option off your name will not show up in such lists." + }, + { + "key": "block.minecraft.stone_pressure_plate", + "english_translation": "Stone Pressure Plate" + }, + { + "key": "biome.minecraft.mangrove_swamp", + "english_translation": "Mangrove Swamp" + }, + { + "key": "block.minecraft.bamboo_button", + "english_translation": "Bamboo Button" + }, + { + "key": "block.minecraft.banner.straight_cross.white", + "english_translation": "White Cross" + }, + { + "key": "advancements.husbandry.breed_an_animal.description", + "english_translation": "Breed two animals together" + }, + { + "key": "block.minecraft.banner.mojang.yellow", + "english_translation": "Yellow Thing" + }, + { + "key": "narrator.loading", + "english_translation": "Loading: %s" + }, + { + "key": "block.minecraft.campfire", + "english_translation": "Campfire" + }, + { + "key": "argument.entity.options.distance.negative", + "english_translation": "Distance cannot be negative" + }, + { + "key": "item.minecraft.oak_chest_boat", + "english_translation": "Oak Boat with Chest" + }, + { + "key": "demo.help.inventory", + "english_translation": "Use the %1$s key to open your inventory" + }, + { + "key": "gui.abuseReport.reason.imminent_harm.description", + "english_translation": "Someone is threatening to harm you or someone else in real life." + }, + { + "key": "subtitles.entity.skeleton_horse.death", + "english_translation": "Skeleton Horse dies" + }, + { + "key": "block.minecraft.spawner", + "english_translation": "Monster Spawner" + }, + { + "key": "commands.enchant.failed", + "english_translation": "Nothing changed. Targets either have no item in their hands or the enchantment could not be applied" + }, + { + "key": "parsing.long.invalid", + "english_translation": "Invalid long '%s'" + }, + { + "key": "mco.selectServer.buy", + "english_translation": "Buy a realm!" + }, + { + "key": "block.minecraft.spruce_wall_sign", + "english_translation": "Spruce Wall Sign" + }, + { + "key": "block.minecraft.banner.gradient_up.red", + "english_translation": "Red Base Gradient" + }, + { + "key": "gamerule.category.drops", + "english_translation": "Drops" + }, + { + "key": "item.minecraft.music_disc_pigstep.desc", + "english_translation": "Lena Raine - Pigstep" + }, + { + "key": "subtitles.entity.zombie_horse.hurt", + "english_translation": "Zombie Horse hurts" + }, + { + "key": "advancements.adventure.arbalistic.title", + "english_translation": "Arbalistic" + }, + { + "key": "subtitles.entity.glow_squid.squirt", + "english_translation": "Glow Squid shoots ink" + }, + { + "key": "item.minecraft.splash_potion.effect.slowness", + "english_translation": "Splash Potion of Slowness" + }, + { + "key": "painting.minecraft.sunset.title", + "english_translation": "sunset_dense" + }, + { + "key": "item.minecraft.music_disc_mall.desc", + "english_translation": "C418 - mall" + }, + { + "key": "item.minecraft.shield.blue", + "english_translation": "Blue Shield" + }, + { + "key": "death.attack.player", + "english_translation": "%1$s was slain by %2$s" + }, + { + "key": "createWorld.customize.custom.confirm2", + "english_translation": "settings and cannot be undone." + }, + { + "key": "mco.worldSlot.minigame", + "english_translation": "Minigame" + }, + { + "key": "createWorld.customize.custom.confirm1", + "english_translation": "This will overwrite your current" + }, + { + "key": "block.minecraft.cherry_button", + "english_translation": "Cherry Button" + }, + { + "key": "block.minecraft.andesite_wall", + "english_translation": "Andesite Wall" + }, + { + "key": "options.gamma", + "english_translation": "Brightness" + }, + { + "key": "subtitles.entity.warden.roar", + "english_translation": "Warden roars" + }, + { + "key": "advancements.adventure.fall_from_world_height.description", + "english_translation": "Free fall from the top of the world (build limit) to the bottom of the world and survive" + }, + { + "key": "parsing.int.invalid", + "english_translation": "Invalid integer '%s'" + }, + { + "key": "chat.tag.system_single_player", + "english_translation": "Server message." + }, + { + "key": "commands.data.get.unknown", + "english_translation": "Can't get %s; tag doesn't exist" + }, + { + "key": "advancements.story.follow_ender_eye.description", + "english_translation": "Follow an Eye of Ender" + }, + { + "key": "block.minecraft.birch_trapdoor", + "english_translation": "Birch Trapdoor" + }, + { + "key": "gamerule.logAdminCommands", + "english_translation": "Broadcast admin commands" + }, + { + "key": "item.minecraft.blue_dye", + "english_translation": "Blue Dye" + }, + { + "key": "block.minecraft.moss_block", + "english_translation": "Moss Block" + }, + { + "key": "block.minecraft.banner.stripe_top.pink", + "english_translation": "Pink Chief" + }, + { + "key": "block.minecraft.torch", + "english_translation": "Torch" + }, + { + "key": "advancements.story.smelt_iron.title", + "english_translation": "Acquire Hardware" + }, + { + "key": "block.minecraft.light_gray_shulker_box", + "english_translation": "Light Gray Shulker Box" + }, + { + "key": "block.minecraft.orange_candle_cake", + "english_translation": "Cake with Orange Candle" + }, + { + "key": "color.minecraft.green", + "english_translation": "Green" + }, + { + "key": "advancements.story.enchant_item.title", + "english_translation": "Enchanter" + }, + { + "key": "mco.upload.select.world.subtitle", + "english_translation": "Please select a singleplayer world to upload" + }, + { + "key": "recipe.notFound", + "english_translation": "Unknown recipe: %s" + }, + { + "key": "options.difficulty.easy", + "english_translation": "Easy" + }, + { + "key": "advMode.mode.redstoneTriggered", + "english_translation": "Needs Redstone" + }, + { + "key": "options.darknessEffectScale.tooltip", + "english_translation": "Controls how much the Darkness effect pulses when a Warden or Sculk Shrieker gives it to you." + }, + { + "key": "subtitles.entity.parrot.imitate.silverfish", + "english_translation": "Parrot hisses" + }, + { + "key": "language.code", + "english_translation": "en_us" + }, + { + "key": "commands.teammsg.failed.noteam", + "english_translation": "You must be on a team to message your team" + }, + { + "key": "block.minecraft.banner.stripe_middle.cyan", + "english_translation": "Cyan Fess" + }, + { + "key": "painting.minecraft.void.title", + "english_translation": "The void" + }, + { + "key": "block.minecraft.dark_oak_button", + "english_translation": "Dark Oak Button" + }, + { + "key": "block.minecraft.large_amethyst_bud", + "english_translation": "Large Amethyst Bud" + }, + { + "key": "trim_pattern.minecraft.spire", + "english_translation": "Spire Armor Trim" + }, + { + "key": "item.minecraft.golden_helmet", + "english_translation": "Golden Helmet" + }, + { + "key": "block.minecraft.soul_lantern", + "english_translation": "Soul Lantern" + }, + { + "key": "block.minecraft.banner.stripe_bottom.pink", + "english_translation": "Pink Base" + }, + { + "key": "commands.team.option.seeFriendlyInvisibles.alreadyDisabled", + "english_translation": "Nothing changed. That team already can't see invisible teammates" + }, + { + "key": "block.minecraft.chiseled_stone_bricks", + "english_translation": "Chiseled Stone Bricks" + }, + { + "key": "block.minecraft.bamboo_planks", + "english_translation": "Bamboo Planks" + }, + { + "key": "block.minecraft.banner.small_stripes.purple", + "english_translation": "Purple Paly" + }, + { + "key": "gamerule.category.chat", + "english_translation": "Chat" + }, + { + "key": "block.minecraft.banner.stripe_right.white", + "english_translation": "White Pale Sinister" + }, + { + "key": "block.minecraft.potted_warped_roots", + "english_translation": "Potted Warped Roots" + }, + { + "key": "painting.minecraft.wind.author", + "english_translation": "Mojang" + }, + { + "key": "entity.minecraft.cat", + "english_translation": "Cat" + }, + { + "key": "item.minecraft.lingering_potion.effect.night_vision", + "english_translation": "Lingering Potion of Night Vision" + }, + { + "key": "argument.entity.selector.randomPlayer", + "english_translation": "Random player" + }, + { + "key": "commands.bossbar.set.players.success.some", + "english_translation": "Custom bossbar %s now has %s player(s): %s" + }, + { + "key": "gamerule.playersSleepingPercentage", + "english_translation": "Sleep percentage" + }, + { + "key": "commands.clear.success.multiple", + "english_translation": "Removed %s item(s) from %s players" + }, + { + "key": "block.minecraft.warped_sign", + "english_translation": "Warped Sign" + }, + { + "key": "block.minecraft.banner.stripe_top.brown", + "english_translation": "Brown Chief" + }, + { + "key": "death.attack.sonic_boom.player", + "english_translation": "%1$s was obliterated by a sonically-charged shriek whilst trying to escape %2$s" + }, + { + "key": "block.minecraft.bamboo", + "english_translation": "Bamboo" + }, + { + "key": "death.attack.thorns.item", + "english_translation": "%1$s was killed by %3$s trying to hurt %2$s" + }, + { + "key": "item.minecraft.cooked_porkchop", + "english_translation": "Cooked Porkchop" + }, + { + "key": "commands.experience.set.points.success.single", + "english_translation": "Set %s experience points on %s" + }, + { + "key": "subtitles.entity.llama.ambient", + "english_translation": "Llama bleats" + }, + { + "key": "block.minecraft.banner.square_bottom_left.red", + "english_translation": "Red Base Dexter Canton" + }, + { + "key": "block.minecraft.sculk", + "english_translation": "Sculk" + }, + { + "key": "painting.minecraft.water.title", + "english_translation": "Water" + }, + { + "key": "selectWorld.gameMode.creative.line1", + "english_translation": "Unlimited resources, free flying and" + }, + { + "key": "block.minecraft.potted_dandelion", + "english_translation": "Potted Dandelion" + }, + { + "key": "options.chat.visibility.full", + "english_translation": "Shown" + }, + { + "key": "advancements.adventure.shoot_arrow.title", + "english_translation": "Take Aim" + }, + { + "key": "mco.configure.world.buttons.subscription", + "english_translation": "Subscription" + }, + { + "key": "subtitles.entity.parrot.imitate.creeper", + "english_translation": "Parrot hisses" + }, + { + "key": "advancements.adventure.adventuring_time.title", + "english_translation": "Adventuring Time" + }, + { + "key": "gui.abuseReport.reason.non_consensual_intimate_imagery", + "english_translation": "Non-consensual intimate imagery" + }, + { + "key": "commands.advancement.grant.many.to.many.failure", + "english_translation": "Couldn't grant %s advancements to %s players as they already have them" + }, + { + "key": "selectWorld.mapFeatures.info", + "english_translation": "Villages, Shipwrecks, etc." + }, + { + "key": "entity.minecraft.tropical_fish.type.snooper", + "english_translation": "Snooper" + }, + { + "key": "item.minecraft.firework_star.shape.small_ball", + "english_translation": "Small Ball" + }, + { + "key": "entity.minecraft.interaction", + "english_translation": "Interaction" + }, + { + "key": "item.minecraft.firework_star.light_blue", + "english_translation": "Light Blue" + }, + { + "key": "effect.minecraft.strength", + "english_translation": "Strength" + }, + { + "key": "block.minecraft.banner.stripe_downright.blue", + "english_translation": "Blue Bend" + }, + { + "key": "item.minecraft.tipped_arrow.effect.water_breathing", + "english_translation": "Arrow of Water Breathing" + }, + { + "key": "block.minecraft.lectern", + "english_translation": "Lectern" + }, + { + "key": "selectWorld.gameMode.creative.line2", + "english_translation": "destroy blocks instantly" + }, + { + "key": "selectWorld.allowCommands", + "english_translation": "Allow Cheats" + }, + { + "key": "advancements.nether.all_potions.title", + "english_translation": "A Furious Cocktail" + }, + { + "key": "painting.minecraft.fire.author", + "english_translation": "Mojang" + }, + { + "key": "block.minecraft.dead_fire_coral_fan", + "english_translation": "Dead Fire Coral Fan" + }, + { + "key": "subtitles.entity.pillager.hurt", + "english_translation": "Pillager hurts" + }, + { + "key": "parsing.long.expected", + "english_translation": "Expected long" + }, + { + "key": "item.minecraft.prize_pottery_shard", + "english_translation": "Prize Pottery Shard" + }, + { + "key": "options.mipmapLevels", + "english_translation": "Mipmap Levels" + }, + { + "key": "block.minecraft.banner.rhombus.purple", + "english_translation": "Purple Lozenge" + }, + { + "key": "createWorld.customize.custom.useStrongholds", + "english_translation": "Strongholds" + }, + { + "key": "block.minecraft.red_stained_glass_pane", + "english_translation": "Red Stained Glass Pane" + }, + { + "key": "commands.data.block.modified", + "english_translation": "Modified block data of %s, %s, %s" + }, + { + "key": "commands.bossbar.unknown", + "english_translation": "No bossbar exists with the ID '%s'" + }, + { + "key": "block.minecraft.smooth_sandstone_slab", + "english_translation": "Smooth Sandstone Slab" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.0", + "english_translation": "Anemone" + }, + { + "key": "commands.advancement.grant.many.to.many.success", + "english_translation": "Granted %s advancements to %s players" + }, + { + "key": "subtitles.entity.fox.hurt", + "english_translation": "Fox hurts" + }, + { + "key": "advancements.adventure.trade.title", + "english_translation": "What a Deal!" + }, + { + "key": "block.minecraft.orange_banner", + "english_translation": "Orange Banner" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.9", + "english_translation": "Goatfish" + }, + { + "key": "block.minecraft.stripped_oak_wood", + "english_translation": "Stripped Oak Wood" + }, + { + "key": "entity.minecraft.salmon", + "english_translation": "Salmon" + }, + { + "key": "stat.minecraft.interact_with_crafting_table", + "english_translation": "Interactions with Crafting Table" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.3", + "english_translation": "Butterflyfish" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.4", + "english_translation": "Cichlid" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.1", + "english_translation": "Black Tang" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.2", + "english_translation": "Blue Tang" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.7", + "english_translation": "Dottyback" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.8", + "english_translation": "Emperor Red Snapper" + }, + { + "key": "block.minecraft.mangrove_roots", + "english_translation": "Mangrove Roots" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.5", + "english_translation": "Clownfish" + }, + { + "key": "team.collision.pushOwnTeam", + "english_translation": "Push own team" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.6", + "english_translation": "Cotton Candy Betta" + }, + { + "key": "multiplayer.disconnect.slow_login", + "english_translation": "Took too long to log in" + }, + { + "key": "block.minecraft.banner.stripe_top.yellow", + "english_translation": "Yellow Chief" + }, + { + "key": "block.minecraft.redstone_ore", + "english_translation": "Redstone Ore" + }, + { + "key": "subtitles.item.shovel.flatten", + "english_translation": "Shovel flattens" + }, + { + "key": "filled_map.scale", + "english_translation": "Scaling at 1:%s" + }, + { + "key": "block.minecraft.banner.stripe_left.red", + "english_translation": "Red Pale Dexter" + }, + { + "key": "commands.scoreboard.players.enable.failed", + "english_translation": "Nothing changed. That trigger is already enabled" + }, + { + "key": "block.minecraft.banner.stripe_downright.lime", + "english_translation": "Lime Bend" + }, + { + "key": "subtitles.block.frogspawn.hatch", + "english_translation": "Tadpole hatches" + }, + { + "key": "connect.failed", + "english_translation": "Failed to connect to the server" + }, + { + "key": "disconnect.disconnected", + "english_translation": "Disconnected by Server" + }, + { + "key": "block.minecraft.warped_hyphae", + "english_translation": "Warped Hyphae" + }, + { + "key": "enchantment.minecraft.knockback", + "english_translation": "Knockback" + }, + { + "key": "subtitles.entity.elder_guardian.flop", + "english_translation": "Elder Guardian flops" + }, + { + "key": "block.minecraft.dark_oak_fence_gate", + "english_translation": "Dark Oak Fence Gate" + }, + { + "key": "item.minecraft.splash_potion.effect.healing", + "english_translation": "Splash Potion of Healing" + }, + { + "key": "subtitles.entity.piglin.retreat", + "english_translation": "Piglin retreats" + }, + { + "key": "block.minecraft.torchflower", + "english_translation": "Torchflower" + }, + { + "key": "subtitles.entity.ravager.death", + "english_translation": "Ravager dies" + }, + { + "key": "subtitles.item.firecharge.use", + "english_translation": "Fireball whooshes" + }, + { + "key": "block.minecraft.warped_stairs", + "english_translation": "Warped Stairs" + }, + { + "key": "entity.minecraft.camel", + "english_translation": "Camel" + }, + { + "key": "item.minecraft.minecart", + "english_translation": "Minecart" + }, + { + "key": "advancements.adventure.kill_all_mobs.title", + "english_translation": "Monsters Hunted" + }, + { + "key": "optimizeWorld.stage.upgrading", + "english_translation": "Upgrading all chunks..." + }, + { + "key": "mco.backup.generate.world", + "english_translation": "Generate world" + }, + { + "key": "painting.minecraft.stage.title", + "english_translation": "The Stage Is Set" + }, + { + "key": "item.minecraft.jungle_boat", + "english_translation": "Jungle Boat" + }, + { + "key": "block.minecraft.waxed_oxidized_cut_copper", + "english_translation": "Waxed Oxidized Cut Copper" + }, + { + "key": "commands.banlist.none", + "english_translation": "There are no bans" + }, + { + "key": "tutorial.punch_tree.title", + "english_translation": "Destroy the tree" + }, + { + "key": "painting.minecraft.match.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "key.sprint", + "english_translation": "Sprint" + }, + { + "key": "subtitles.block.button.click", + "english_translation": "Button clicks" + }, + { + "key": "trim_material.minecraft.redstone", + "english_translation": "Redstone Material" + }, + { + "key": "subtitles.item.chorus_fruit.teleport", + "english_translation": "Player teleports" + }, + { + "key": "commands.scoreboard.players.remove.success.single", + "english_translation": "Removed %s from %s for %s (now %s)" + }, + { + "key": "item.minecraft.guardian_spawn_egg", + "english_translation": "Guardian Spawn Egg" + }, + { + "key": "lanServer.port.invalid.new", + "english_translation": "Not a valid port.\nLeave the edit box empty or enter a number between %s and %s." + }, + { + "key": "advancements.story.mine_stone.description", + "english_translation": "Mine Stone with your new Pickaxe" + }, + { + "key": "chat.disabled.missingProfileKey", + "english_translation": "Chat disabled due to missing profile public key. Please try reconnecting." + }, + { + "key": "painting.minecraft.pointer.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.banner.base.white", + "english_translation": "Fully White Field" + }, + { + "key": "mco.configure.world.slot.tooltip", + "english_translation": "Switch to world" + }, + { + "key": "block.minecraft.banner.cross.black", + "english_translation": "Black Saltire" + }, + { + "key": "block.minecraft.banner.curly_border.purple", + "english_translation": "Purple Bordure Indented" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.orange", + "english_translation": "Orange Per Bend Sinister Inverted" + }, + { + "key": "item.minecraft.clay_ball", + "english_translation": "Clay Ball" + }, + { + "key": "item.minecraft.rabbit_hide", + "english_translation": "Rabbit Hide" + }, + { + "key": "color.minecraft.black", + "english_translation": "Black" + }, + { + "key": "item.minecraft.netherite_leggings", + "english_translation": "Netherite Leggings" + }, + { + "key": "block.minecraft.banner.small_stripes.light_blue", + "english_translation": "Light Blue Paly" + }, + { + "key": "death.attack.dragonBreath.player", + "english_translation": "%1$s was roasted in dragon's breath by %2$s" + }, + { + "key": "advancements.adventure.two_birds_one_arrow.description", + "english_translation": "Kill two Phantoms with a piercing Arrow" + }, + { + "key": "jigsaw_block.joint.rollable", + "english_translation": "Rollable" + }, + { + "key": "subtitles.entity.cow.milk", + "english_translation": "Cow gets milked" + }, + { + "key": "block.minecraft.light_gray_wool", + "english_translation": "Light Gray Wool" + }, + { + "key": "advancements.nether.return_to_sender.title", + "english_translation": "Return to Sender" + }, + { + "key": "block.minecraft.lime_stained_glass", + "english_translation": "Lime Stained Glass" + }, + { + "key": "block.minecraft.banner.half_horizontal.pink", + "english_translation": "Pink Per Fess" + }, + { + "key": "item.minecraft.pufferfish_bucket", + "english_translation": "Bucket of Pufferfish" + }, + { + "key": "advancements.husbandry.complete_catalogue.description", + "english_translation": "Tame all Cat variants!" + }, + { + "key": "sleep.players_sleeping", + "english_translation": "%s/%s players sleeping" + }, + { + "key": "block.minecraft.banner.triangles_top.pink", + "english_translation": "Pink Chief Indented" + }, + { + "key": "block.minecraft.polished_blackstone", + "english_translation": "Polished Blackstone" + }, + { + "key": "subtitles.entity.vindicator.death", + "english_translation": "Vindicator dies" + }, + { + "key": "advancements.end.dragon_egg.description", + "english_translation": "Hold the Dragon Egg" + }, + { + "key": "debug.pause.help", + "english_translation": "F3 + Esc = Pause without pause menu (if pausing is possible)" + }, + { + "key": "spectatorMenu.teleport", + "english_translation": "Teleport to Player" + }, + { + "key": "commands.trigger.failed.invalid", + "english_translation": "You can only trigger objectives that are 'trigger' type" + }, + { + "key": "block.minecraft.banner.square_bottom_right.gray", + "english_translation": "Gray Base Sinister Canton" + }, + { + "key": "advancements.adventure.very_very_frightening.title", + "english_translation": "Very Very Frightening" + }, + { + "key": "item.minecraft.tnt_minecart", + "english_translation": "Minecart with TNT" + }, + { + "key": "argument.block.property.invalid", + "english_translation": "Block %s does not accept '%s' for %s property" + }, + { + "key": "selectWorld.versionWarning", + "english_translation": "This world was last played in version %s and loading it in this version could cause corruption!" + }, + { + "key": "death.attack.lava.player", + "english_translation": "%1$s tried to swim in lava to escape %2$s" + }, + { + "key": "subtitles.item.trident.hit", + "english_translation": "Trident stabs" + }, + { + "key": "key.keyboard.enter", + "english_translation": "Enter" + }, + { + "key": "advancements.story.enter_the_end.description", + "english_translation": "Enter the End Portal" + }, + { + "key": "advMode.notEnabled", + "english_translation": "Command blocks are not enabled on this server" + }, + { + "key": "book.pageIndicator", + "english_translation": "Page %1$s of %2$s" + }, + { + "key": "block.minecraft.purple_terracotta", + "english_translation": "Purple Terracotta" + }, + { + "key": "subtitles.entity.squid.hurt", + "english_translation": "Squid hurts" + }, + { + "key": "block.minecraft.banner.small_stripes.green", + "english_translation": "Green Paly" + }, + { + "key": "item.minecraft.redstone", + "english_translation": "Redstone Dust" + }, + { + "key": "advancements.adventure.trim_with_all_exclusive_armor_patterns.description", + "english_translation": "Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder" + }, + { + "key": "block.minecraft.crimson_wall_hanging_sign", + "english_translation": "Crimson Wall Hanging Sign" + }, + { + "key": "demo.help.fullWrapped", + "english_translation": "This demo will last 5 in-game days (about 1 hour and 40 minutes of real time). Check the advancements for hints! Have fun!" + }, + { + "key": "commands.perf.alreadyRunning", + "english_translation": "The performance profiler is already started" + }, + { + "key": "biome.minecraft.deep_dark", + "english_translation": "Deep Dark" + }, + { + "key": "block.minecraft.oak_sapling", + "english_translation": "Oak Sapling" + }, + { + "key": "commands.ride.mount.failure.wrong_dimension", + "english_translation": "Can't mount entity in different dimension" + }, + { + "key": "effect.minecraft.darkness", + "english_translation": "Darkness" + }, + { + "key": "key.loadToolbarActivator", + "english_translation": "Load Hotbar Activator" + }, + { + "key": "attribute.name.generic.armor", + "english_translation": "Armor" + }, + { + "key": "attribute.name.generic.follow_range", + "english_translation": "Mob Follow Range" + }, + { + "key": "argument.range.ints", + "english_translation": "Only whole numbers allowed, not decimals" + }, + { + "key": "options.title", + "english_translation": "Options" + }, + { + "key": "biome.minecraft.savanna", + "english_translation": "Savanna" + }, + { + "key": "block.minecraft.yellow_carpet", + "english_translation": "Yellow Carpet" + }, + { + "key": "block.minecraft.banner.stripe_center.cyan", + "english_translation": "Cyan Pale" + }, + { + "key": "subtitles.entity.warden.sonic_charge", + "english_translation": "Warden charges" + }, + { + "key": "commands.team.leave.success.multiple", + "english_translation": "Removed %s members from any team" + }, + { + "key": "createWorld.customize.custom.biomeScaleOffset", + "english_translation": "Biome Scale Offset" + }, + { + "key": "advancements.end.kill_dragon.description", + "english_translation": "Good luck" + }, + { + "key": "subtitles.entity.ender_eye.launch", + "english_translation": "Eye of Ender shoots" + }, + { + "key": "subtitles.entity.fox.eat", + "english_translation": "Fox eats" + }, + { + "key": "inventory.hotbarInfo", + "english_translation": "Save hotbar with %1$s+%2$s" + }, + { + "key": "painting.minecraft.void.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.green_terracotta", + "english_translation": "Green Terracotta" + }, + { + "key": "options.prioritizeChunkUpdates.nearby.tooltip", + "english_translation": "Nearby chunks are always compiled immediately. This may impact game performance when blocks are placed or destroyed." + }, + { + "key": "subtitles.entity.warden.nearby_close", + "english_translation": "Warden approaches" + }, + { + "key": "block.minecraft.chorus_flower", + "english_translation": "Chorus Flower" + }, + { + "key": "item.minecraft.scute", + "english_translation": "Scute" + }, + { + "key": "mco.create.world", + "english_translation": "Create" + }, + { + "key": "subtitles.entity.camel.dash", + "english_translation": "Camel yeets" + }, + { + "key": "item.minecraft.popped_chorus_fruit", + "english_translation": "Popped Chorus Fruit" + }, + { + "key": "item.minecraft.lingering_potion.effect.swiftness", + "english_translation": "Lingering Potion of Swiftness" + }, + { + "key": "stat.minecraft.inspect_hopper", + "english_translation": "Hoppers Searched" + }, + { + "key": "block.minecraft.bubble_column", + "english_translation": "Bubble Column" + }, + { + "key": "jigsaw_block.joint_label", + "english_translation": "Joint Type:" + }, + { + "key": "addServer.resourcePack.prompt", + "english_translation": "Prompt" + }, + { + "key": "advancements.husbandry.tactical_fishing.title", + "english_translation": "Tactical Fishing" + }, + { + "key": "block.minecraft.waxed_weathered_cut_copper_slab", + "english_translation": "Waxed Weathered Cut Copper Slab" + }, + { + "key": "item.minecraft.brewer_pottery_sherd", + "english_translation": "Brewer Pottery Sherd" + }, + { + "key": "arguments.operation.div0", + "english_translation": "Cannot divide by zero" + }, + { + "key": "key.keyboard.f22", + "english_translation": "F22" + }, + { + "key": "mco.configure.world.status", + "english_translation": "Status" + }, + { + "key": "key.keyboard.f23", + "english_translation": "F23" + }, + { + "key": "key.keyboard.f20", + "english_translation": "F20" + }, + { + "key": "key.keyboard.f21", + "english_translation": "F21" + }, + { + "key": "block.minecraft.banner.mojang.purple", + "english_translation": "Purple Thing" + }, + { + "key": "advancements.adventure.summon_iron_golem.title", + "english_translation": "Hired Help" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.gray", + "english_translation": "Gray Per Fess Inverted" + }, + { + "key": "commands.schedule.same_tick", + "english_translation": "Can't schedule for current tick" + }, + { + "key": "commands.spreadplayers.success.teams", + "english_translation": "Spread %s team(s) around %s, %s with an average distance of %s blocks apart" + }, + { + "key": "key.keyboard.f24", + "english_translation": "F24" + }, + { + "key": "subtitles.entity.allay.ambient_with_item", + "english_translation": "Allay seeks" + }, + { + "key": "key.keyboard.f25", + "english_translation": "F25" + }, + { + "key": "filled_map.locked", + "english_translation": "Locked" + }, + { + "key": "mco.connect.failed", + "english_translation": "Failed to connect to the realm" + }, + { + "key": "selectWorld.mapType", + "english_translation": "World Type" + }, + { + "key": "death.attack.outOfWorld.player", + "english_translation": "%1$s didn't want to live in the same world as %2$s" + }, + { + "key": "gui.narrate.slider", + "english_translation": "%s slider" + }, + { + "key": "selectWorld.access_failure", + "english_translation": "Failed to access world" + }, + { + "key": "multiplayer.downloadingTerrain", + "english_translation": "Loading terrain..." + }, + { + "key": "block.minecraft.banner.small_stripes.red", + "english_translation": "Red Paly" + }, + { + "key": "block.minecraft.deepslate_redstone_ore", + "english_translation": "Deepslate Redstone Ore" + }, + { + "key": "argument.rotation.incomplete", + "english_translation": "Incomplete (expected 2 coordinates)" + }, + { + "key": "gamerule.category.spawning", + "english_translation": "Spawning" + }, + { + "key": "subtitles.entity.witch.throw", + "english_translation": "Witch throws" + }, + { + "key": "block.minecraft.tall_seagrass", + "english_translation": "Tall Seagrass" + }, + { + "key": "createWorld.customize.custom.useDungeons", + "english_translation": "Dungeons" + }, + { + "key": "painting.minecraft.fire.title", + "english_translation": "Fire" + }, + { + "key": "commands.clone.failed", + "english_translation": "No blocks were cloned" + }, + { + "key": "item.minecraft.axolotl_bucket", + "english_translation": "Bucket of Axolotl" + }, + { + "key": "block.minecraft.banner.stripe_right.red", + "english_translation": "Red Pale Sinister" + }, + { + "key": "subtitles.item.trident.hit_ground", + "english_translation": "Trident vibrates" + }, + { + "key": "advMode.setCommand", + "english_translation": "Set Console Command for Block" + }, + { + "key": "block.minecraft.mangrove_pressure_plate", + "english_translation": "Mangrove Pressure Plate" + }, + { + "key": "commands.save.alreadyOff", + "english_translation": "Saving is already turned off" + }, + { + "key": "item.minecraft.melon_seeds", + "english_translation": "Melon Seeds" + }, + { + "key": "commands.whitelist.list", + "english_translation": "There are %s whitelisted player(s): %s" + }, + { + "key": "block.minecraft.white_glazed_terracotta", + "english_translation": "White Glazed Terracotta" + }, + { + "key": "multiplayer.disconnect.incompatible", + "english_translation": "Incompatible client! Please use %s" + }, + { + "key": "subtitles.entity.snow_golem.hurt", + "english_translation": "Snow Golem hurts" + }, + { + "key": "block.minecraft.nether_bricks", + "english_translation": "Nether Bricks" + }, + { + "key": "subtitles.entity.piglin.angry", + "english_translation": "Piglin snorts angrily" + }, + { + "key": "block.minecraft.banner.diagonal_right.yellow", + "english_translation": "Yellow Per Bend" + }, + { + "key": "key.keyboard.f11", + "english_translation": "F11" + }, + { + "key": "key.keyboard.f12", + "english_translation": "F12" + }, + { + "key": "key.keyboard.f10", + "english_translation": "F10" + }, + { + "key": "options.accessibility.text_background", + "english_translation": "Text Background" + }, + { + "key": "item.minecraft.rabbit", + "english_translation": "Raw Rabbit" + }, + { + "key": "block.minecraft.mushroom_stem", + "english_translation": "Mushroom Stem" + }, + { + "key": "painting.minecraft.bomb.title", + "english_translation": "Target Successfully Bombed" + }, + { + "key": "item.minecraft.tipped_arrow.effect.weakness", + "english_translation": "Arrow of Weakness" + }, + { + "key": "block.minecraft.light_blue_glazed_terracotta", + "english_translation": "Light Blue Glazed Terracotta" + }, + { + "key": "commands.place.feature.success", + "english_translation": "Placed \"%s\" at %s, %s, %s" + }, + { + "key": "advancements.nether.use_lodestone.description", + "english_translation": "Use a Compass on a Lodestone" + }, + { + "key": "block.minecraft.crying_obsidian", + "english_translation": "Crying Obsidian" + }, + { + "key": "options.allowServerListing", + "english_translation": "Allow Server Listings" + }, + { + "key": "key.keyboard.f15", + "english_translation": "F15" + }, + { + "key": "item.minecraft.music_disc_mellohi.desc", + "english_translation": "C418 - mellohi" + }, + { + "key": "key.keyboard.f16", + "english_translation": "F16" + }, + { + "key": "key.keyboard.f13", + "english_translation": "F13" + }, + { + "key": "key.keyboard.f14", + "english_translation": "F14" + }, + { + "key": "key.keyboard.f19", + "english_translation": "F19" + }, + { + "key": "key.keyboard.f17", + "english_translation": "F17" + }, + { + "key": "options.autoSuggestCommands", + "english_translation": "Command Suggestions" + }, + { + "key": "key.keyboard.f18", + "english_translation": "F18" + }, + { + "key": "item.minecraft.creeper_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "painting.minecraft.skull_and_roses.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.polished_blackstone_brick_slab", + "english_translation": "Polished Blackstone Brick Slab" + }, + { + "key": "commands.playsound.success.multiple", + "english_translation": "Played sound %s to %s players" + }, + { + "key": "advancements.nether.fast_travel.description", + "english_translation": "Use the Nether to travel 7 km in the Overworld" + }, + { + "key": "subtitles.item.trident.return", + "english_translation": "Trident returns" + }, + { + "key": "block.minecraft.deepslate_diamond_ore", + "english_translation": "Deepslate Diamond Ore" + }, + { + "key": "book.editTitle", + "english_translation": "Enter Book Title:" + }, + { + "key": "subtitles.entity.mule.chest", + "english_translation": "Mule Chest equips" + }, + { + "key": "pack.source.fabricmod", + "english_translation": "Fabric mod" + }, + { + "key": "block.minecraft.waxed_oxidized_cut_copper_stairs", + "english_translation": "Waxed Oxidized Cut Copper Stairs" + }, + { + "key": "mco.template.button.select", + "english_translation": "Select" + }, + { + "key": "selectWorld.edit", + "english_translation": "Edit" + }, + { + "key": "death.attack.sonic_boom.item", + "english_translation": "%1$s was obliterated by a sonically-charged shriek whilst trying to escape %2$s wielding %3$s" + }, + { + "key": "block.minecraft.banner.stripe_top.white", + "english_translation": "White Chief" + }, + { + "key": "subtitles.entity.drowned.swim", + "english_translation": "Drowned swims" + }, + { + "key": "commands.title.show.title.multiple", + "english_translation": "Showing new title for %s players" + }, + { + "key": "block.minecraft.banner.creeper.light_blue", + "english_translation": "Light Blue Creeper Charge" + }, + { + "key": "commands.damage.invulnerable", + "english_translation": "Target is invulnerable to the given damage type" + }, + { + "key": "item.minecraft.zombie_horse_spawn_egg", + "english_translation": "Zombie Horse Spawn Egg" + }, + { + "key": "telemetry.event.world_unloaded.title", + "english_translation": "World Unloaded" + }, + { + "key": "gui.abuseReport.reason.harassment_or_bullying", + "english_translation": "Harassment or bullying" + }, + { + "key": "commands.spawnpoint.success.multiple", + "english_translation": "Set spawn point to %s, %s, %s [%s] in %s for %s players" + }, + { + "key": "mco.configure.world.subscription.remaining.months", + "english_translation": "%1$s month(s)" + }, + { + "key": "commands.bossbar.set.color.success", + "english_translation": "Custom bossbar %s has changed color" + }, + { + "key": "biome.minecraft.desert", + "english_translation": "Desert" + }, + { + "key": "commands.item.target.no_changes", + "english_translation": "No targets accepted item into slot %s" + }, + { + "key": "mco.gui.ok", + "english_translation": "Ok" + }, + { + "key": "pack.source.builtinMod", + "english_translation": "built-in: %s" + }, + { + "key": "item.minecraft.spider_eye", + "english_translation": "Spider Eye" + }, + { + "key": "stat.minecraft.treasure_fished", + "english_translation": "Treasure Fished" + }, + { + "key": "commands.clone.toobig", + "english_translation": "Too many blocks in the specified area (maximum %s, specified %s)" + }, + { + "key": "block.minecraft.stripped_warped_stem", + "english_translation": "Stripped Warped Stem" + }, + { + "key": "item.minecraft.glow_squid_spawn_egg", + "english_translation": "Glow Squid Spawn Egg" + }, + { + "key": "item.minecraft.smithing_template", + "english_translation": "Smithing Template" + }, + { + "key": "block.minecraft.black_concrete_powder", + "english_translation": "Black Concrete Powder" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.blue", + "english_translation": "Blue Per Bend Inverted" + }, + { + "key": "difficulty.lock.title", + "english_translation": "Lock World Difficulty" + }, + { + "key": "options.difficulty.online", + "english_translation": "Server Difficulty" + }, + { + "key": "argument.color.invalid", + "english_translation": "Unknown color '%s'" + }, + { + "key": "menu.game", + "english_translation": "Game Menu" + }, + { + "key": "block.minecraft.banner.stripe_center.white", + "english_translation": "White Pale" + }, + { + "key": "entity.minecraft.villager.shepherd", + "english_translation": "Shepherd" + }, + { + "key": "block.minecraft.obsidian", + "english_translation": "Obsidian" + }, + { + "key": "attribute.name.horse.jump_strength", + "english_translation": "Horse Jump Strength" + }, + { + "key": "item.minecraft.evoker_spawn_egg", + "english_translation": "Evoker Spawn Egg" + }, + { + "key": "title.32bit.deprecation", + "english_translation": "32-bit system detected: this may prevent you from playing in the future as a 64-bit system will be required!" + }, + { + "key": "resourcePack.title", + "english_translation": "Select Resource Packs" + }, + { + "key": "block.minecraft.beehive", + "english_translation": "Beehive" + }, + { + "key": "item.minecraft.diamond_boots", + "english_translation": "Diamond Boots" + }, + { + "key": "key.keyboard.print.screen", + "english_translation": "Print Screen" + }, + { + "key": "item.minecraft.acacia_boat", + "english_translation": "Acacia Boat" + }, + { + "key": "entity.minecraft.vindicator", + "english_translation": "Vindicator" + }, + { + "key": "tutorial.find_tree.description", + "english_translation": "Punch it to collect wood" + }, + { + "key": "mco.template.select.none", + "english_translation": "Oops, it looks like this content category is currently empty.\nPlease check back later for new content, or if you're a creator,\n%s." + }, + { + "key": "effect.minecraft.saturation", + "english_translation": "Saturation" + }, + { + "key": "commands.effect.clear.everything.success.single", + "english_translation": "Removed every effect from %s" + }, + { + "key": "block.minecraft.orange_terracotta", + "english_translation": "Orange Terracotta" + }, + { + "key": "multiplayer.status.online", + "english_translation": "Online" + }, + { + "key": "subtitles.entity.sniffer.step", + "english_translation": "Sniffer steps" + }, + { + "key": "argument.resource_tag.invalid_type", + "english_translation": "Tag '%s' has wrong type '%s' (expected '%s')" + }, + { + "key": "mco.template.name", + "english_translation": "Template" + }, + { + "key": "subtitles.block.chest.locked", + "english_translation": "Chest locked" + }, + { + "key": "item.minecraft.mourner_pottery_shard", + "english_translation": "Mourner Pottery Shard" + }, + { + "key": "potion.whenDrank", + "english_translation": "When Applied:" + }, + { + "key": "block.minecraft.warped_wall_hanging_sign", + "english_translation": "Warped Wall Hanging Sign" + }, + { + "key": "subtitles.entity.ghast.hurt", + "english_translation": "Ghast hurts" + }, + { + "key": "block.minecraft.verdant_froglight", + "english_translation": "Verdant Froglight" + }, + { + "key": "advancements.adventure.sleep_in_bed.title", + "english_translation": "Sweet Dreams" + }, + { + "key": "subtitles.block.conduit.deactivate", + "english_translation": "Conduit deactivates" + }, + { + "key": "block.minecraft.bamboo_mosaic", + "english_translation": "Bamboo Mosaic" + }, + { + "key": "block.minecraft.kelp_plant", + "english_translation": "Kelp Plant" + }, + { + "key": "controls.keybinds", + "english_translation": "Key Binds..." + }, + { + "key": "key.keyboard.right.control", + "english_translation": "Right Control" + }, + { + "key": "tutorial.look.title", + "english_translation": "Look around" + }, + { + "key": "block.minecraft.orange_stained_glass", + "english_translation": "Orange Stained Glass" + }, + { + "key": "advancements.adventure.craft_decorated_pot_using_only_sherds.description", + "english_translation": "Make a Decorated Pot out of 4 Pottery Sherds" + }, + { + "key": "block.minecraft.attached_pumpkin_stem", + "english_translation": "Attached Pumpkin Stem" + }, + { + "key": "options.accessibility.panorama_speed", + "english_translation": "Panorama Scroll Speed" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.lime", + "english_translation": "Lime Per Bend Inverted" + }, + { + "key": "advMode.randomPlayer", + "english_translation": "Use \"@r\" to target random player" + }, + { + "key": "block.minecraft.acacia_sign", + "english_translation": "Acacia Sign" + }, + { + "key": "subtitles.entity.player.attack.weak", + "english_translation": "Weak attack" + }, + { + "key": "item.minecraft.splash_potion.effect.invisibility", + "english_translation": "Splash Potion of Invisibility" + }, + { + "key": "block.minecraft.soul_torch", + "english_translation": "Soul Torch" + }, + { + "key": "enchantment.minecraft.punch", + "english_translation": "Punch" + }, + { + "key": "key.keyboard.page.down", + "english_translation": "Page Down" + }, + { + "key": "subtitles.entity.puffer_fish.death", + "english_translation": "Pufferfish dies" + }, + { + "key": "block.minecraft.cherry_sign", + "english_translation": "Cherry Sign" + }, + { + "key": "death.fell.accident.ladder", + "english_translation": "%1$s fell off a ladder" + }, + { + "key": "mco.backup.button.reset", + "english_translation": "Reset world" + }, + { + "key": "mco.selectServer.expiredSubscribe", + "english_translation": "Subscribe" + }, + { + "key": "block.minecraft.red_concrete", + "english_translation": "Red Concrete" + }, + { + "key": "debug.chunk_boundaries.off", + "english_translation": "Chunk borders: hidden" + }, + { + "key": "gamerule.commandModificationBlockLimit", + "english_translation": "Command Modification Block Limit" + }, + { + "key": "gui.banned.reason.imminent_harm_to_person_or_property", + "english_translation": "Intent to cause real-life harm to persons or property" + }, + { + "key": "block.minecraft.cactus", + "english_translation": "Cactus" + }, + { + "key": "chat.type.team.hover", + "english_translation": "Message Team" + }, + { + "key": "block.minecraft.dark_oak_wall_sign", + "english_translation": "Dark Oak Wall Sign" + }, + { + "key": "container.upgrade.error_tooltip", + "english_translation": "Item can't be upgraded this way" + }, + { + "key": "subtitles.entity.glow_item_frame.break", + "english_translation": "Glow Item Frame breaks" + }, + { + "key": "block.minecraft.red_nether_brick_stairs", + "english_translation": "Red Nether Brick Stairs" + }, + { + "key": "block.minecraft.diamond_ore", + "english_translation": "Diamond Ore" + }, + { + "key": "commands.kick.success", + "english_translation": "Kicked %s: %s" + }, + { + "key": "key.keyboard.keypad.subtract", + "english_translation": "Keypad -" + }, + { + "key": "block.minecraft.potted_torchflower", + "english_translation": "Potted Torchflower" + }, + { + "key": "commands.forceload.toobig", + "english_translation": "Too many chunks in the specified area (maximum %s, specified %s)" + }, + { + "key": "item.minecraft.leather", + "english_translation": "Leather" + }, + { + "key": "key.categories.inventory", + "english_translation": "Inventory" + }, + { + "key": "painting.minecraft.pool.title", + "english_translation": "The Pool" + }, + { + "key": "multiplayer.disconnect.duplicate_login", + "english_translation": "You logged in from another location" + }, + { + "key": "createWorld.customize.custom.presets", + "english_translation": "Presets" + }, + { + "key": "options.particles.decreased", + "english_translation": "Decreased" + }, + { + "key": "block.minecraft.banner.stripe_left.orange", + "english_translation": "Orange Pale Dexter" + }, + { + "key": "optimizeWorld.confirm.title", + "english_translation": "Optimize World" + }, + { + "key": "merchant.level.4", + "english_translation": "Expert" + }, + { + "key": "merchant.level.5", + "english_translation": "Master" + }, + { + "key": "merchant.level.2", + "english_translation": "Apprentice" + }, + { + "key": "merchant.level.3", + "english_translation": "Journeyman" + }, + { + "key": "block.minecraft.banner.stripe_middle.lime", + "english_translation": "Lime Fess" + }, + { + "key": "merchant.level.1", + "english_translation": "Novice" + }, + { + "key": "commands.item.target.not_a_container", + "english_translation": "Target position %s, %s, %s is not a container" + }, + { + "key": "block.minecraft.warped_fungus", + "english_translation": "Warped Fungus" + }, + { + "key": "deathScreen.spectate", + "english_translation": "Spectate World" + }, + { + "key": "item.minecraft.firework_star.shape.creeper", + "english_translation": "Creeper-shaped" + }, + { + "key": "block.minecraft.birch_log", + "english_translation": "Birch Log" + }, + { + "key": "predicate.unknown", + "english_translation": "Unknown predicate: %s" + }, + { + "key": "block.minecraft.waxed_oxidized_cut_copper_slab", + "english_translation": "Waxed Oxidized Cut Copper Slab" + }, + { + "key": "advancements.adventure.whos_the_pillager_now.title", + "english_translation": "Who's the Pillager Now?" + }, + { + "key": "subtitles.block.sculk_shrieker.shriek", + "english_translation": "Sculk Shrieker shrieks" + }, + { + "key": "block.minecraft.diorite", + "english_translation": "Diorite" + }, + { + "key": "subtitles.entity.glow_squid.death", + "english_translation": "Glow Squid dies" + }, + { + "key": "mco.minigame.world.changeButton", + "english_translation": "Select another minigame" + }, + { + "key": "debug.clear_chat.help", + "english_translation": "F3 + D = Clear chat" + }, + { + "key": "item.minecraft.parrot_spawn_egg", + "english_translation": "Parrot Spawn Egg" + }, + { + "key": "options.fullscreen.current", + "english_translation": "Current" + }, + { + "key": "stat.minecraft.junk_fished", + "english_translation": "Junk Fished" + }, + { + "key": "subtitles.entity.skeleton.ambient", + "english_translation": "Skeleton rattles" + }, + { + "key": "commands.whitelist.none", + "english_translation": "There are no whitelisted players" + }, + { + "key": "block.minecraft.banner.base.orange", + "english_translation": "Fully Orange Field" + }, + { + "key": "selectWorld.backupWarning.customized", + "english_translation": "Unfortunately, we do not support customized worlds in this version of Minecraft. We can still load this world and keep everything the way it was, but any newly generated terrain will no longer be customized. We're sorry for the inconvenience!" + }, + { + "key": "trim_pattern.minecraft.dune", + "english_translation": "Dune Armor Trim" + }, + { + "key": "advancements.story.mine_stone.title", + "english_translation": "Stone Age" + }, + { + "key": "advancements.husbandry.allay_deliver_item_to_player.title", + "english_translation": "You've Got a Friend in Me" + }, + { + "key": "mco.upload.cancelled", + "english_translation": "Upload cancelled" + }, + { + "key": "entity.minecraft.tropical_fish.type.kob", + "english_translation": "Kob" + }, + { + "key": "block.minecraft.composter", + "english_translation": "Composter" + }, + { + "key": "death.attack.onFire", + "english_translation": "%1$s burned to death" + }, + { + "key": "item.minecraft.iron_shovel", + "english_translation": "Iron Shovel" + }, + { + "key": "block.minecraft.stripped_warped_hyphae", + "english_translation": "Stripped Warped Hyphae" + }, + { + "key": "chat.copy.click", + "english_translation": "Click to Copy to Clipboard" + }, + { + "key": "item.minecraft.wooden_hoe", + "english_translation": "Wooden Hoe" + }, + { + "key": "enchantment.minecraft.blast_protection", + "english_translation": "Blast Protection" + }, + { + "key": "entity.minecraft.squid", + "english_translation": "Squid" + }, + { + "key": "container.enchant.level.many", + "english_translation": "%s Enchantment Levels" + }, + { + "key": "item.minecraft.smithing_template.armor_trim.base_slot_description", + "english_translation": "Add a piece of armor" + }, + { + "key": "item.minecraft.lingering_potion.effect.strength", + "english_translation": "Lingering Potion of Strength" + }, + { + "key": "advancements.nether.distract_piglin.description", + "english_translation": "Distract Piglins with gold" + }, + { + "key": "block.minecraft.banner.diagonal_left.orange", + "english_translation": "Orange Per Bend Sinister" + }, + { + "key": "narration.slider.usage.focused", + "english_translation": "Press left or right keyboard buttons to change value" + }, + { + "key": "commands.team.add.duplicate", + "english_translation": "A team already exists by that name" + }, + { + "key": "mco.configure.world.spawn_toggle.message.npc", + "english_translation": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers" + }, + { + "key": "commands.scoreboard.players.reset.all.single", + "english_translation": "Reset all scores for %s" + }, + { + "key": "multiplayer.disconnect.banned_ip.expiration", + "english_translation": "\nYour ban will be removed on %s" + }, + { + "key": "structure_block.button.load", + "english_translation": "LOAD" + }, + { + "key": "block.minecraft.bubble_coral", + "english_translation": "Bubble Coral" + }, + { + "key": "commands.banip.success", + "english_translation": "Banned IP %s: %s" + }, + { + "key": "item.minecraft.tipped_arrow.effect.invisibility", + "english_translation": "Arrow of Invisibility" + }, + { + "key": "subtitles.item.lodestone_compass.lock", + "english_translation": "Lodestone Compass locks onto Lodestone" + }, + { + "key": "biome.minecraft.jungle", + "english_translation": "Jungle" + }, + { + "key": "item.minecraft.glow_ink_sac", + "english_translation": "Glow Ink Sac" + }, + { + "key": "entity.minecraft.piglin", + "english_translation": "Piglin" + }, + { + "key": "block.minecraft.banner.stripe_top.green", + "english_translation": "Green Chief" + }, + { + "key": "item.minecraft.lingering_potion.effect.poison", + "english_translation": "Lingering Potion of Poison" + }, + { + "key": "block.minecraft.banner.base.lime", + "english_translation": "Fully Lime Field" + }, + { + "key": "selectWorld.createDemo", + "english_translation": "Play New Demo World" + }, + { + "key": "subtitles.entity.mule.eat", + "english_translation": "Mule eats" + }, + { + "key": "gui.recipebook.toggleRecipes.craftable", + "english_translation": "Showing Craftable" + }, + { + "key": "stat.minecraft.pot_flower", + "english_translation": "Plants Potted" + }, + { + "key": "block.minecraft.banner.square_bottom_right.light_blue", + "english_translation": "Light Blue Base Sinister Canton" + }, + { + "key": "block.minecraft.banner.triangle_top.pink", + "english_translation": "Pink Inverted Chevron" + }, + { + "key": "item.minecraft.iron_leggings", + "english_translation": "Iron Leggings" + }, + { + "key": "block.minecraft.light_blue_shulker_box", + "english_translation": "Light Blue Shulker Box" + }, + { + "key": "block.minecraft.yellow_shulker_box", + "english_translation": "Yellow Shulker Box" + }, + { + "key": "options.graphics.fast.tooltip", + "english_translation": "Fast graphics reduces the amount of visible rain and snow.\nTransparency effects are disabled for various blocks such as leaves." + }, + { + "key": "itemGroup.combat", + "english_translation": "Combat" + }, + { + "key": "chat.square_brackets", + "english_translation": "[%s]" + }, + { + "key": "entity.minecraft.tropical_fish.type.betty", + "english_translation": "Betty" + }, + { + "key": "block.minecraft.deepslate_brick_stairs", + "english_translation": "Deepslate Brick Stairs" + }, + { + "key": "item.minecraft.potion.effect.night_vision", + "english_translation": "Potion of Night Vision" + }, + { + "key": "mco.configure.world.edit.subscreen.experience", + "english_translation": "Some settings are disabled since your current world is an experience" + }, + { + "key": "selectServer.deleteQuestion", + "english_translation": "Are you sure you want to remove this server?" + }, + { + "key": "mco.configure.world.resourcepack.question.line1", + "english_translation": "You need a custom resource pack to play on this realm" + }, + { + "key": "mco.reset.world.resetting.screen.title", + "english_translation": "Resetting world..." + }, + { + "key": "mco.configure.world.resourcepack.question.line2", + "english_translation": "Do you want to download it and play?" + }, + { + "key": "advancements.adventure.root.title", + "english_translation": "Adventure" + }, + { + "key": "subtitles.entity.generic.explode", + "english_translation": "Explosion" + }, + { + "key": "multiplayer.disconnect.not_whitelisted", + "english_translation": "You are not white-listed on this server!" + }, + { + "key": "block.minecraft.banner.stripe_center.purple", + "english_translation": "Purple Pale" + }, + { + "key": "block.minecraft.chiseled_red_sandstone", + "english_translation": "Chiseled Red Sandstone" + }, + { + "key": "debug.gamemodes.error", + "english_translation": "Unable to open game mode switcher; no permission" + }, + { + "key": "commands.worldborder.set.immediate", + "english_translation": "Set the world border to %s block(s) wide" + }, + { + "key": "team.visibility.never", + "english_translation": "Never" + }, + { + "key": "subtitles.entity.glow_item_frame.place", + "english_translation": "Glow Item Frame placed" + }, + { + "key": "commands.locate.structure.invalid", + "english_translation": "There is no structure with type \"%s\"" + }, + { + "key": "painting.minecraft.skeleton.title", + "english_translation": "Mortal Coil" + }, + { + "key": "subtitles.entity.shulker.close", + "english_translation": "Shulker closes" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.yellow", + "english_translation": "Yellow Per Fess Inverted" + }, + { + "key": "commands.title.show.subtitle.single", + "english_translation": "Showing new subtitle for %s" + }, + { + "key": "block.minecraft.banner.base.blue", + "english_translation": "Fully Blue Field" + }, + { + "key": "block.minecraft.banner.stripe_left.lime", + "english_translation": "Lime Pale Dexter" + }, + { + "key": "block.minecraft.banner.triangle_bottom.brown", + "english_translation": "Brown Chevron" + }, + { + "key": "stat_type.minecraft.killed_by.none", + "english_translation": "You have never been killed by %s" + }, + { + "key": "subtitles.block.bell.resonate", + "english_translation": "Bell resonates" + }, + { + "key": "block.minecraft.banner.half_vertical_right.orange", + "english_translation": "Orange Per Pale Inverted" + }, + { + "key": "block.minecraft.snow_block", + "english_translation": "Snow Block" + }, + { + "key": "structure_block.mode_info.load", + "english_translation": "Load Mode - Load from File" + }, + { + "key": "item.minecraft.end_crystal", + "english_translation": "End Crystal" + }, + { + "key": "subtitles.item.spyglass.stop_using", + "english_translation": "Spyglass retracts" + }, + { + "key": "container.cartography_table", + "english_translation": "Cartography Table" + }, + { + "key": "block.minecraft.purple_carpet", + "english_translation": "Purple Carpet" + }, + { + "key": "block.minecraft.lava", + "english_translation": "Lava" + }, + { + "key": "parsing.float.expected", + "english_translation": "Expected float" + }, + { + "key": "subtitles.entity.horse.eat", + "english_translation": "Horse eats" + }, + { + "key": "trim_material.minecraft.diamond", + "english_translation": "Diamond Material" + }, + { + "key": "debug.copy_location.message", + "english_translation": "Copied location to clipboard" + }, + { + "key": "block.minecraft.beetroots", + "english_translation": "Beetroots" + }, + { + "key": "telemetry.property.operating_system.title", + "english_translation": "Operating System" + }, + { + "key": "commands.data.modify.expected_list", + "english_translation": "Expected list, got: %s" + }, + { + "key": "entity.not_summonable", + "english_translation": "Can't summon entity of type %s" + }, + { + "key": "subtitles.entity.goat.milk", + "english_translation": "Goat gets milked" + }, + { + "key": "gui.socialInteractions.tab_blocked", + "english_translation": "Blocked" + }, + { + "key": "subtitles.entity.drowned.ambient_water", + "english_translation": "Drowned gurgles" + }, + { + "key": "block.minecraft.banner.triangles_bottom.gray", + "english_translation": "Gray Base Indented" + }, + { + "key": "subtitles.entity.potion.throw", + "english_translation": "Bottle thrown" + }, + { + "key": "commands.place.structure.invalid", + "english_translation": "There is no structure with type \"%s\"" + }, + { + "key": "block.minecraft.barrier", + "english_translation": "Barrier" + }, + { + "key": "item.minecraft.leather_boots", + "english_translation": "Leather Boots" + }, + { + "key": "block.minecraft.waxed_cut_copper_stairs", + "english_translation": "Waxed Cut Copper Stairs" + }, + { + "key": "mco.terms.sentence.2", + "english_translation": "Terms of Service" + }, + { + "key": "mco.terms.sentence.1", + "english_translation": "I agree to the Minecraft Realms" + }, + { + "key": "options.framerateLimit.max", + "english_translation": "Unlimited" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.red", + "english_translation": "Red Per Fess Inverted" + }, + { + "key": "subtitles.block.honey_block.slide", + "english_translation": "Sliding down a honey block" + }, + { + "key": "block.minecraft.banner.border.purple", + "english_translation": "Purple Bordure" + }, + { + "key": "commands.worldborder.set.failed.nochange", + "english_translation": "Nothing changed. The world border is already that size" + }, + { + "key": "item.minecraft.powder_snow_bucket", + "english_translation": "Powder Snow Bucket" + }, + { + "key": "block.minecraft.suspicious_sand", + "english_translation": "Suspicious Sand" + }, + { + "key": "block.minecraft.banner.stripe_left.blue", + "english_translation": "Blue Pale Dexter" + }, + { + "key": "block.minecraft.blackstone", + "english_translation": "Blackstone" + }, + { + "key": "subtitles.entity.hoglin.ambient", + "english_translation": "Hoglin growls" + }, + { + "key": "block.minecraft.warped_wart_block", + "english_translation": "Warped Wart Block" + }, + { + "key": "itemGroup.crafting", + "english_translation": "Crafting" + }, + { + "key": "telemetry.event.world_unloaded.description", + "english_translation": "This event is paired with the World Loaded event to calculate how long the world session has lasted.\nThe duration (in seconds and ticks) is measured when a world session has ended (quitting to title, disconnecting from a server)." + }, + { + "key": "language.name", + "english_translation": "English" + }, + { + "key": "block.minecraft.banner.piglin.cyan", + "english_translation": "Cyan Snout" + }, + { + "key": "subtitles.entity.cod.hurt", + "english_translation": "Cod hurts" + }, + { + "key": "block.minecraft.banner.straight_cross.magenta", + "english_translation": "Magenta Cross" + }, + { + "key": "block.minecraft.tube_coral_wall_fan", + "english_translation": "Tube Coral Wall Fan" + }, + { + "key": "subtitles.block.water.ambient", + "english_translation": "Water flows" + }, + { + "key": "entity.minecraft.dragon_fireball", + "english_translation": "Dragon Fireball" + }, + { + "key": "block.minecraft.red_terracotta", + "english_translation": "Red Terracotta" + }, + { + "key": "block.minecraft.polished_blackstone_button", + "english_translation": "Polished Blackstone Button" + }, + { + "key": "entity.minecraft.tropical_fish.type.spotty", + "english_translation": "Spotty" + }, + { + "key": "block.minecraft.coal_block", + "english_translation": "Block of Coal" + }, + { + "key": "block.minecraft.banner.creeper.yellow", + "english_translation": "Yellow Creeper Charge" + }, + { + "key": "painting.minecraft.wasteland.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "subtitles.entity.llama.step", + "english_translation": "Llama steps" + }, + { + "key": "createWorld.customize.custom.useVillages", + "english_translation": "Villages" + }, + { + "key": "death.attack.trident.item", + "english_translation": "%1$s was impaled by %2$s with %3$s" + }, + { + "key": "block.minecraft.banner.stripe_center.light_blue", + "english_translation": "Light Blue Pale" + }, + { + "key": "commands.tag.list.single.empty", + "english_translation": "%s has no tags" + }, + { + "key": "subtitles.entity.piglin.hurt", + "english_translation": "Piglin hurts" + }, + { + "key": "entity.minecraft.axolotl", + "english_translation": "Axolotl" + }, + { + "key": "item.minecraft.raw_gold", + "english_translation": "Raw Gold" + }, + { + "key": "block.minecraft.white_wool", + "english_translation": "White Wool" + }, + { + "key": "block.minecraft.dark_oak_fence", + "english_translation": "Dark Oak Fence" + }, + { + "key": "commands.fill.toobig", + "english_translation": "Too many blocks in the specified area (maximum %s, specified %s)" + }, + { + "key": "multiplayer.disconnect.banned", + "english_translation": "You are banned from this server" + }, + { + "key": "item.minecraft.potion.effect.harming", + "english_translation": "Potion of Harming" + }, + { + "key": "item.minecraft.cookie", + "english_translation": "Cookie" + }, + { + "key": "block.minecraft.banner.square_bottom_right.blue", + "english_translation": "Blue Base Sinister Canton" + }, + { + "key": "block.minecraft.banner.square_top_right.blue", + "english_translation": "Blue Chief Sinister Canton" + }, + { + "key": "createWorld.customize.custom.biomeSize", + "english_translation": "Biome Size" + }, + { + "key": "item.minecraft.leather_leggings", + "english_translation": "Leather Pants" + }, + { + "key": "mco.configure.world.buttons.settings", + "english_translation": "Settings" + }, + { + "key": "block.minecraft.dried_kelp_block", + "english_translation": "Dried Kelp Block" + }, + { + "key": "mco.configure.world.buttons.resetworld", + "english_translation": "Reset world" + }, + { + "key": "block.minecraft.sunflower", + "english_translation": "Sunflower" + }, + { + "key": "block.minecraft.banner.square_bottom_right.black", + "english_translation": "Black Base Sinister Canton" + }, + { + "key": "block.minecraft.redstone_wire", + "english_translation": "Redstone Wire" + }, + { + "key": "item.minecraft.blade_pottery_sherd", + "english_translation": "Blade Pottery Sherd" + }, + { + "key": "block.minecraft.banner.triangles_bottom.black", + "english_translation": "Black Base Indented" + }, + { + "key": "advancements.husbandry.safely_harvest_honey.description", + "english_translation": "Use a Campfire to collect Honey from a Beehive using a Glass Bottle without aggravating the Bees" + }, + { + "key": "menu.returnToMenu", + "english_translation": "Save and Quit to Title" + }, + { + "key": "commands.function.success.multiple.result", + "english_translation": "Executed %s functions" + }, + { + "key": "block.minecraft.banner.creeper.lime", + "english_translation": "Lime Creeper Charge" + }, + { + "key": "options.prioritizeChunkUpdates", + "english_translation": "Chunk Builder" + }, + { + "key": "item.minecraft.potion.effect.water", + "english_translation": "Water Bottle" + }, + { + "key": "item.minecraft.snow_golem_spawn_egg", + "english_translation": "Snow Golem Spawn Egg" + }, + { + "key": "block.minecraft.bamboo_wall_hanging_sign", + "english_translation": "Bamboo Wall Hanging Sign" + }, + { + "key": "book.signButton", + "english_translation": "Sign" + }, + { + "key": "telemetry.property.event_timestamp_utc.title", + "english_translation": "Event Timestamp (UTC)" + }, + { + "key": "subtitles.entity.zombie.hurt", + "english_translation": "Zombie hurts" + }, + { + "key": "subtitles.block.respawn_anchor.set_spawn", + "english_translation": "Respawn Anchor sets spawn" + }, + { + "key": "biome.minecraft.frozen_river", + "english_translation": "Frozen River" + }, + { + "key": "item.minecraft.tipped_arrow.effect.regeneration", + "english_translation": "Arrow of Regeneration" + }, + { + "key": "subtitles.entity.firework_rocket.launch", + "english_translation": "Firework launches" + }, + { + "key": "translation.test.invalid", + "english_translation": "hi %" + }, + { + "key": "item.minecraft.endermite_spawn_egg", + "english_translation": "Endermite Spawn Egg" + }, + { + "key": "subtitles.entity.shulker.hurt", + "english_translation": "Shulker hurts" + }, + { + "key": "block.minecraft.jungle_leaves", + "english_translation": "Jungle Leaves" + }, + { + "key": "subtitles.entity.bee.loop_aggressive", + "english_translation": "Bee buzzes angrily" + }, + { + "key": "createWorld.customize.custom.preset.caveDelight", + "english_translation": "Caver's Delight" + }, + { + "key": "painting.minecraft.kebab.title", + "english_translation": "Kebab med tre pepperoni" + }, + { + "key": "gamerule.category.mobs", + "english_translation": "Mobs" + }, + { + "key": "recipe.toast.title", + "english_translation": "New Recipes Unlocked!" + }, + { + "key": "createWorld.preparing", + "english_translation": "Preparing for world creation..." + }, + { + "key": "block.minecraft.horn_coral_block", + "english_translation": "Horn Coral Block" + }, + { + "key": "key.sneak", + "english_translation": "Sneak" + }, + { + "key": "options.ao", + "english_translation": "Smooth Lighting" + }, + { + "key": "advancements.story.enter_the_nether.description", + "english_translation": "Build, light and enter a Nether Portal" + }, + { + "key": "block.minecraft.banner.square_bottom_right.lime", + "english_translation": "Lime Base Sinister Canton" + }, + { + "key": "block.minecraft.banner.triangle_top.orange", + "english_translation": "Orange Inverted Chevron" + }, + { + "key": "options.modelPart.left_sleeve", + "english_translation": "Left Sleeve" + }, + { + "key": "key.keyboard.right.win", + "english_translation": "Right Win" + }, + { + "key": "block.minecraft.mossy_stone_bricks", + "english_translation": "Mossy Stone Bricks" + }, + { + "key": "options.modelPart.hat", + "english_translation": "Hat" + }, + { + "key": "subtitles.ui.cartography_table.take_result", + "english_translation": "Map drawn" + }, + { + "key": "gameMode.hardcore", + "english_translation": "Hardcore Mode!" + }, + { + "key": "selectWorld.backupJoinSkipButton", + "english_translation": "I know what I'm doing!" + }, + { + "key": "item.minecraft.iron_boots", + "english_translation": "Iron Boots" + }, + { + "key": "narrator.button.difficulty_lock", + "english_translation": "Difficulty lock" + }, + { + "key": "block.minecraft.mossy_stone_brick_wall", + "english_translation": "Mossy Stone Brick Wall" + }, + { + "key": "gui.minutes", + "english_translation": "%s minute(s)" + }, + { + "key": "options.chat.visibility.hidden", + "english_translation": "Hidden" + }, + { + "key": "block.minecraft.banner.small_stripes.white", + "english_translation": "White Paly" + }, + { + "key": "block.minecraft.white_terracotta", + "english_translation": "White Terracotta" + }, + { + "key": "item.minecraft.flower_pot", + "english_translation": "Flower Pot" + }, + { + "key": "block.minecraft.potted_oxeye_daisy", + "english_translation": "Potted Oxeye Daisy" + }, + { + "key": "selectWorld.gameMode.spectator.line2", + "english_translation": "" + }, + { + "key": "selectWorld.gameMode.spectator.line1", + "english_translation": "You can look but don't touch" + }, + { + "key": "block.minecraft.banner.creeper.blue", + "english_translation": "Blue Creeper Charge" + }, + { + "key": "pack.name.fabricMod", + "english_translation": "Fabric Mod \"%s\"" + }, + { + "key": "key.hotbar.8", + "english_translation": "Hotbar Slot 8" + }, + { + "key": "commands.publish.success", + "english_translation": "Multiplayer game is now hosted on port %s" + }, + { + "key": "key.hotbar.7", + "english_translation": "Hotbar Slot 7" + }, + { + "key": "key.hotbar.6", + "english_translation": "Hotbar Slot 6" + }, + { + "key": "key.hotbar.5", + "english_translation": "Hotbar Slot 5" + }, + { + "key": "subtitles.entity.evoker.cast_spell", + "english_translation": "Evoker casts spell" + }, + { + "key": "key.hotbar.4", + "english_translation": "Hotbar Slot 4" + }, + { + "key": "key.hotbar.3", + "english_translation": "Hotbar Slot 3" + }, + { + "key": "key.hotbar.2", + "english_translation": "Hotbar Slot 2" + }, + { + "key": "key.hotbar.1", + "english_translation": "Hotbar Slot 1" + }, + { + "key": "mco.configure.world.backup", + "english_translation": "World backups" + }, + { + "key": "block.minecraft.banner.globe.gray", + "english_translation": "Gray Globe" + }, + { + "key": "itemGroup.hotbar", + "english_translation": "Saved Hotbars" + }, + { + "key": "block.minecraft.banner.skull.red", + "english_translation": "Red Skull Charge" + }, + { + "key": "item.minecraft.mushroom_stew", + "english_translation": "Mushroom Stew" + }, + { + "key": "block.minecraft.banner.gradient.cyan", + "english_translation": "Cyan Gradient" + }, + { + "key": "gui.chatReport.comments", + "english_translation": "Comments" + }, + { + "key": "commands.worldborder.center.failed", + "english_translation": "Nothing changed. The world border is already centered there" + }, + { + "key": "subtitles.entity.sniffer.hurt", + "english_translation": "Sniffer hurts" + }, + { + "key": "key.hotbar.9", + "english_translation": "Hotbar Slot 9" + }, + { + "key": "commands.item.source.no_such_slot", + "english_translation": "The source does not have slot %s" + }, + { + "key": "advancements.nether.distract_piglin.title", + "english_translation": "Oh Shiny" + }, + { + "key": "block.minecraft.quartz_bricks", + "english_translation": "Quartz Bricks" + }, + { + "key": "multiplayer.socialInteractions.not_available", + "english_translation": "Social Interactions are only available in Multiplayer worlds" + }, + { + "key": "block.minecraft.chiseled_quartz_block", + "english_translation": "Chiseled Quartz Block" + }, + { + "key": "subtitles.entity.vex.death", + "english_translation": "Vex dies" + }, + { + "key": "selectWorld.warning.experimental.title", + "english_translation": "Warning! These settings are using experimental features" + }, + { + "key": "spectatorMenu.teleport.prompt", + "english_translation": "Select a player to teleport to" + }, + { + "key": "subtitles.block.decorated_pot.shatter", + "english_translation": "Pot shatters" + }, + { + "key": "tutorial.bundleInsert.title", + "english_translation": "Use a Bundle" + }, + { + "key": "block.minecraft.purple_concrete_powder", + "english_translation": "Purple Concrete Powder" + }, + { + "key": "subtitles.entity.blaze.shoot", + "english_translation": "Blaze shoots" + }, + { + "key": "block.minecraft.bookshelf", + "english_translation": "Bookshelf" + }, + { + "key": "block.minecraft.blue_shulker_box", + "english_translation": "Blue Shulker Box" + }, + { + "key": "subtitles.entity.sniffer.eat", + "english_translation": "Sniffer eats" + }, + { + "key": "death.attack.onFire.item", + "english_translation": "%1$s was burnt to a crisp whilst fighting %2$s wielding %3$s" + }, + { + "key": "item.minecraft.potion.effect.empty", + "english_translation": "Uncraftable Potion" + }, + { + "key": "commands.scoreboard.players.get.null", + "english_translation": "Can't get value of %s for %s; none is set" + }, + { + "key": "mco.time.minutesAgo", + "english_translation": "%1$s minute(s) ago" + }, + { + "key": "death.fell.finish.item", + "english_translation": "%1$s fell too far and was finished by %2$s using %3$s" + }, + { + "key": "createWorld.customize.custom.spread", + "english_translation": "Spread Height" + }, + { + "key": "chat.link.open", + "english_translation": "Open in Browser" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.green", + "english_translation": "Green Per Bend Sinister Inverted" + }, + { + "key": "block.minecraft.banner.gradient_up.magenta", + "english_translation": "Magenta Base Gradient" + }, + { + "key": "menu.shareToLan", + "english_translation": "Open to LAN" + }, + { + "key": "block.minecraft.polished_blackstone_wall", + "english_translation": "Polished Blackstone Wall" + }, + { + "key": "block.minecraft.tripwire_hook", + "english_translation": "Tripwire Hook" + }, + { + "key": "argument.entity.options.dy.description", + "english_translation": "Entities between y and y + dy" + }, + { + "key": "block.minecraft.banner.stripe_middle.light_gray", + "english_translation": "Light Gray Fess" + }, + { + "key": "block.minecraft.smooth_red_sandstone", + "english_translation": "Smooth Red Sandstone" + }, + { + "key": "block.minecraft.candle", + "english_translation": "Candle" + }, + { + "key": "block.minecraft.banner.circle.blue", + "english_translation": "Blue Roundel" + }, + { + "key": "commands.recipe.take.failed", + "english_translation": "No recipes could be forgotten" + }, + { + "key": "mco.errorMessage.realmsService.realmsError", + "english_translation": "Realms (%s):" + }, + { + "key": "item.minecraft.shulker_shell", + "english_translation": "Shulker Shell" + }, + { + "key": "multiplayer.disconnect.invalid_public_key_signature.new", + "english_translation": "Invalid signature for profile public key.\nTry restarting your game." + }, + { + "key": "biome.minecraft.frozen_ocean", + "english_translation": "Frozen Ocean" + }, + { + "key": "commands.datapack.unknown", + "english_translation": "Unknown data pack '%s'" + }, + { + "key": "soundCategory.music", + "english_translation": "Music" + }, + { + "key": "subtitles.entity.villager.work_cartographer", + "english_translation": "Cartographer works" + }, + { + "key": "commands.whitelist.add.failed", + "english_translation": "Player is already whitelisted" + }, + { + "key": "subtitles.entity.player.attack.knockback", + "english_translation": "Knockback attack" + }, + { + "key": "death.attack.even_more_magic", + "english_translation": "%1$s was killed by even more magic" + }, + { + "key": "enchantment.minecraft.fortune", + "english_translation": "Fortune" + }, + { + "key": "mco.template.select.narrate.authors", + "english_translation": "Authors: %s" + }, + { + "key": "death.attack.wither", + "english_translation": "%1$s withered away" + }, + { + "key": "advancements.nether.uneasy_alliance.description", + "english_translation": "Rescue a Ghast from the Nether, bring it safely home to the Overworld... and then kill it" + }, + { + "key": "key.keyboard.tab", + "english_translation": "Tab" + }, + { + "key": "options.biomeBlendRadius.13", + "english_translation": "13x13 (Showoff)" + }, + { + "key": "options.biomeBlendRadius.15", + "english_translation": "15x15 (Maximum)" + }, + { + "key": "gamerule.disableRaids", + "english_translation": "Disable raids" + }, + { + "key": "options.biomeBlendRadius.11", + "english_translation": "11x11 (Extreme)" + }, + { + "key": "subtitles.entity.evoker.hurt", + "english_translation": "Evoker hurts" + }, + { + "key": "structure_block.detect_size", + "english_translation": "Detect Structure Size and Position:" + }, + { + "key": "block.minecraft.end_portal", + "english_translation": "End Portal" + }, + { + "key": "block.minecraft.black_banner", + "english_translation": "Black Banner" + }, + { + "key": "disconnect.loginFailed", + "english_translation": "Failed to log in" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.black", + "english_translation": "Black Per Bend Sinister Inverted" + }, + { + "key": "block.minecraft.tube_coral_block", + "english_translation": "Tube Coral Block" + }, + { + "key": "enchantment.minecraft.channeling", + "english_translation": "Channeling" + }, + { + "key": "subtitles.entity.endermite.ambient", + "english_translation": "Endermite scuttles" + }, + { + "key": "block.minecraft.banner.stripe_left.magenta", + "english_translation": "Magenta Pale Dexter" + }, + { + "key": "block.minecraft.banner.square_top_right.lime", + "english_translation": "Lime Chief Sinister Canton" + }, + { + "key": "createWorld.customize.flat.layer.bottom", + "english_translation": "Bottom - %s" + }, + { + "key": "tutorial.craft_planks.title", + "english_translation": "Craft wooden planks" + }, + { + "key": "item.minecraft.pottery_shard_arms_up", + "english_translation": "Arms Up Pottery Shard" + }, + { + "key": "instrument.minecraft.feel_goat_horn", + "english_translation": "Feel" + }, + { + "key": "subtitles.entity.sniffer.searching", + "english_translation": "Sniffer searches" + }, + { + "key": "item.minecraft.potion.effect.luck", + "english_translation": "Potion of Luck" + }, + { + "key": "block.minecraft.purple_wool", + "english_translation": "Purple Wool" + }, + { + "key": "options.chat.delay", + "english_translation": "Chat Delay: %s seconds" + }, + { + "key": "block.minecraft.yellow_concrete_powder", + "english_translation": "Yellow Concrete Powder" + }, + { + "key": "item.minecraft.potion.effect.thick", + "english_translation": "Thick Potion" + }, + { + "key": "block.minecraft.banner.stripe_left.green", + "english_translation": "Green Pale Dexter" + }, + { + "key": "entity.minecraft.tadpole", + "english_translation": "Tadpole" + }, + { + "key": "item.minecraft.tropical_fish_bucket", + "english_translation": "Bucket of Tropical Fish" + }, + { + "key": "argument.entity.options.z.description", + "english_translation": "z position" + }, + { + "key": "argument.entity.options.limit.toosmall", + "english_translation": "Limit must be at least 1" + }, + { + "key": "gamerule.doDaylightCycle", + "english_translation": "Advance time of day" + }, + { + "key": "block.minecraft.banner.circle.lime", + "english_translation": "Lime Roundel" + }, + { + "key": "block.minecraft.banner.skull.yellow", + "english_translation": "Yellow Skull Charge" + }, + { + "key": "block.minecraft.dirt", + "english_translation": "Dirt" + }, + { + "key": "build.tooHigh", + "english_translation": "Height limit for building is %s" + }, + { + "key": "advancements.nether.charge_respawn_anchor.description", + "english_translation": "Charge a Respawn Anchor to the maximum" + }, + { + "key": "subtitles.item.shield.block", + "english_translation": "Shield blocks" + }, + { + "key": "mco.configure.world.subscription.expired", + "english_translation": "Expired" + }, + { + "key": "container.stonecutter", + "english_translation": "Stonecutter" + }, + { + "key": "commands.title.show.title.single", + "english_translation": "Showing new title for %s" + }, + { + "key": "subtitles.item.glow_ink_sac.use", + "english_translation": "Glow Ink Sac splotches" + }, + { + "key": "telemetry.property.realms_map_content.title", + "english_translation": "Realms Map Content (Minigame Name)" + }, + { + "key": "options.particles", + "english_translation": "Particles" + }, + { + "key": "subtitles.item.bucket.fill", + "english_translation": "Bucket fills" + }, + { + "key": "block.minecraft.white_tulip", + "english_translation": "White Tulip" + }, + { + "key": "gamerule.keepInventory", + "english_translation": "Keep inventory after death" + }, + { + "key": "block.minecraft.banner.stripe_downright.purple", + "english_translation": "Purple Bend" + }, + { + "key": "block.minecraft.banner.creeper.brown", + "english_translation": "Brown Creeper Charge" + }, + { + "key": "block.minecraft.yellow_candle", + "english_translation": "Yellow Candle" + }, + { + "key": "subtitles.entity.parrot.imitate.ghast", + "english_translation": "Parrot cries" + }, + { + "key": "block.minecraft.gray_wool", + "english_translation": "Gray Wool" + }, + { + "key": "gui.banned.reason.hate_terrorism_notorious_figure", + "english_translation": "References to hate groups, terrorist organizations, or notorious figures" + }, + { + "key": "gamerule.doWeatherCycle", + "english_translation": "Update weather" + }, + { + "key": "item.minecraft.firework_star.gray", + "english_translation": "Gray" + }, + { + "key": "debug.copy_location.help", + "english_translation": "F3 + C = Copy location as /tp command, hold F3 + C to crash the game" + }, + { + "key": "gui.abuseReport.send.error_message", + "english_translation": "An error was returned while sending your report:\n'%s'" + }, + { + "key": "createWorld.tab.game.title", + "english_translation": "Game" + }, + { + "key": "gui.chatReport.discard.draft", + "english_translation": "Save as Draft" + }, + { + "key": "subtitles.entity.villager.work_butcher", + "english_translation": "Butcher works" + }, + { + "key": "trim_pattern.minecraft.host", + "english_translation": "Host Armor Trim" + }, + { + "key": "block.minecraft.banner.skull.light_blue", + "english_translation": "Light Blue Skull Charge" + }, + { + "key": "recipe.toast.description", + "english_translation": "Check your recipe book" + }, + { + "key": "item.minecraft.leather_horse_armor", + "english_translation": "Leather Horse Armor" + }, + { + "key": "block.minecraft.banner.stripe_downleft.magenta", + "english_translation": "Magenta Bend Sinister" + }, + { + "key": "block.minecraft.soul_campfire", + "english_translation": "Soul Campfire" + }, + { + "key": "block.minecraft.nether_brick_slab", + "english_translation": "Nether Brick Slab" + }, + { + "key": "entity.minecraft.trader_llama", + "english_translation": "Trader Llama" + }, + { + "key": "block.minecraft.nether_wart_block", + "english_translation": "Nether Wart Block" + }, + { + "key": "createWorld.customize.flat.tile", + "english_translation": "Layer Material" + }, + { + "key": "mco.invites.button.accept", + "english_translation": "Accept" + }, + { + "key": "multiplayerWarning.header", + "english_translation": "Caution: Third-Party Online Play" + }, + { + "key": "block.minecraft.granite_wall", + "english_translation": "Granite Wall" + }, + { + "key": "commands.help.failed", + "english_translation": "Unknown command or insufficient permissions" + }, + { + "key": "mco.configure.world.buttons.edit", + "english_translation": "Settings" + }, + { + "key": "multiplayer.status.and_more", + "english_translation": "... and %s more ..." + }, + { + "key": "advMode.setCommand.success", + "english_translation": "Command set: %s" + }, + { + "key": "commands.fillbiome.success", + "english_translation": "Biomes set between %s, %s, %s and %s, %s, %s" + }, + { + "key": "commands.jfr.started", + "english_translation": "JFR profiling started" + }, + { + "key": "container.shulkerBox", + "english_translation": "Shulker Box" + }, + { + "key": "advancements.end.levitate.title", + "english_translation": "Great View From Up Here" + }, + { + "key": "selectWorld.recreate.customized.title", + "english_translation": "Customized worlds are no longer supported" + }, + { + "key": "block.minecraft.crimson_stairs", + "english_translation": "Crimson Stairs" + }, + { + "key": "item.minecraft.music_disc_chirp.desc", + "english_translation": "C418 - chirp" + }, + { + "key": "createWorld.customize.custom.lavaLakeChance", + "english_translation": "Lava Lake Rarity" + }, + { + "key": "block.minecraft.cobbled_deepslate_stairs", + "english_translation": "Cobbled Deepslate Stairs" + }, + { + "key": "block.minecraft.tripwire", + "english_translation": "Tripwire" + }, + { + "key": "enchantment.minecraft.infinity", + "english_translation": "Infinity" + }, + { + "key": "telemetry.event.optional", + "english_translation": "%s (Optional)" + }, + { + "key": "block.minecraft.lever", + "english_translation": "Lever" + }, + { + "key": "block.minecraft.oak_stairs", + "english_translation": "Oak Stairs" + }, + { + "key": "death.attack.outsideBorder", + "english_translation": "%1$s left the confines of this world" + }, + { + "key": "options.narrator.notavailable", + "english_translation": "Not Available" + }, + { + "key": "subtitles.entity.wandering_trader.trade", + "english_translation": "Wandering Trader trades" + }, + { + "key": "argument.entity.selector.allEntities", + "english_translation": "All entities" + }, + { + "key": "container.lectern", + "english_translation": "Lectern" + }, + { + "key": "subtitles.entity.cat.hurt", + "english_translation": "Cat hurts" + }, + { + "key": "block.minecraft.sandstone_stairs", + "english_translation": "Sandstone Stairs" + }, + { + "key": "subtitles.entity.horse.death", + "english_translation": "Horse dies" + }, + { + "key": "block.minecraft.polished_blackstone_brick_stairs", + "english_translation": "Polished Blackstone Brick Stairs" + }, + { + "key": "advancements.husbandry.balanced_diet.title", + "english_translation": "A Balanced Diet" + }, + { + "key": "subtitles.item.trident.riptide", + "english_translation": "Trident zooms" + }, + { + "key": "block.minecraft.beacon.primary", + "english_translation": "Primary Power" + }, + { + "key": "block.minecraft.banner.stripe_top.gray", + "english_translation": "Gray Chief" + }, + { + "key": "block.minecraft.acacia_wall_sign", + "english_translation": "Acacia Wall Sign" + }, + { + "key": "createWorld.customize.buffet.biome", + "english_translation": "Please select a biome" + }, + { + "key": "subtitles.entity.sniffer.digging_stop", + "english_translation": "Sniffer stands up" + }, + { + "key": "item.minecraft.pink_dye", + "english_translation": "Pink Dye" + }, + { + "key": "item.minecraft.coal", + "english_translation": "Coal" + }, + { + "key": "entity.minecraft.evoker_fangs", + "english_translation": "Evoker Fangs" + }, + { + "key": "options.simulationDistance", + "english_translation": "Simulation Distance" + }, + { + "key": "block.minecraft.banner.circle.light_gray", + "english_translation": "Light Gray Roundel" + }, + { + "key": "block.minecraft.dead_brain_coral_wall_fan", + "english_translation": "Dead Brain Coral Wall Fan" + }, + { + "key": "block.minecraft.magenta_shulker_box", + "english_translation": "Magenta Shulker Box" + }, + { + "key": "death.attack.arrow.item", + "english_translation": "%1$s was shot by %2$s using %3$s" + }, + { + "key": "subtitles.entity.vindicator.ambient", + "english_translation": "Vindicator mutters" + }, + { + "key": "block.minecraft.infested_cobblestone", + "english_translation": "Infested Cobblestone" + }, + { + "key": "enchantment.minecraft.silk_touch", + "english_translation": "Silk Touch" + }, + { + "key": "block.minecraft.tube_coral", + "english_translation": "Tube Coral" + }, + { + "key": "item.minecraft.creeper_spawn_egg", + "english_translation": "Creeper Spawn Egg" + }, + { + "key": "options.on", + "english_translation": "ON" + }, + { + "key": "advancements.husbandry.plant_seed.description", + "english_translation": "Plant a seed and watch it grow" + }, + { + "key": "block.minecraft.banner.diagonal_right.light_blue", + "english_translation": "Light Blue Per Bend" + }, + { + "key": "gamerule.forgiveDeadPlayers", + "english_translation": "Forgive dead players" + }, + { + "key": "commands.save.disabled", + "english_translation": "Automatic saving is now disabled" + }, + { + "key": "block.minecraft.banner.stripe_center.black", + "english_translation": "Black Pale" + }, + { + "key": "commands.tag.add.failed", + "english_translation": "Target either already has the tag or has too many tags" + }, + { + "key": "subtitles.entity.camel.ambient", + "english_translation": "Camel grunts" + }, + { + "key": "item.minecraft.friend_pottery_sherd", + "english_translation": "Friend Pottery Sherd" + }, + { + "key": "mco.upload.select.world.title", + "english_translation": "Upload world" + }, + { + "key": "subtitles.entity.villager.work_weaponsmith", + "english_translation": "Weaponsmith works" + }, + { + "key": "effect.minecraft.dolphins_grace", + "english_translation": "Dolphin's Grace" + }, + { + "key": "mco.minigame.world.info.line1", + "english_translation": "This will temporarily replace your world with a minigame!" + }, + { + "key": "gameMode.creative", + "english_translation": "Creative Mode" + }, + { + "key": "item.minecraft.chorus_fruit", + "english_translation": "Chorus Fruit" + }, + { + "key": "mco.minigame.world.info.line2", + "english_translation": "You can later return to your original world without losing anything." + }, + { + "key": "advancements.adventure.trade.description", + "english_translation": "Successfully trade with a Villager" + }, + { + "key": "options.fov", + "english_translation": "FOV" + }, + { + "key": "block.minecraft.banner.stripe_left.black", + "english_translation": "Black Pale Dexter" + }, + { + "key": "block.minecraft.banner.triangles_bottom.green", + "english_translation": "Green Base Indented" + }, + { + "key": "debug.inspect.server.entity", + "english_translation": "Copied server-side entity data to clipboard" + }, + { + "key": "item.minecraft.flint", + "english_translation": "Flint" + }, + { + "key": "selectWorld.cheats", + "english_translation": "Cheats" + }, + { + "key": "block.minecraft.polished_deepslate", + "english_translation": "Polished Deepslate" + }, + { + "key": "subtitles.entity.parrot.imitate.elder_guardian", + "english_translation": "Parrot moans" + }, + { + "key": "item.minecraft.explorer_pottery_sherd", + "english_translation": "Explorer Pottery Sherd" + }, + { + "key": "key.keyboard.right", + "english_translation": "Right Arrow" + }, + { + "key": "stat.minecraft.time_since_rest", + "english_translation": "Time Since Last Rest" + }, + { + "key": "title.multiplayer.realms", + "english_translation": "Multiplayer (Realms)" + }, + { + "key": "addServer.resourcePack.disabled", + "english_translation": "Disabled" + }, + { + "key": "advancements.nether.explore_nether.title", + "english_translation": "Hot Tourist Destinations" + }, + { + "key": "block.minecraft.banner.triangle_bottom.orange", + "english_translation": "Orange Chevron" + }, + { + "key": "block.minecraft.banner.half_vertical.blue", + "english_translation": "Blue Per Pale" + }, + { + "key": "debug.prefix", + "english_translation": "[Debug]:" + }, + { + "key": "stat.minecraft.time_since_death", + "english_translation": "Time Since Last Death" + }, + { + "key": "subtitles.block.lava.extinguish", + "english_translation": "Lava hisses" + }, + { + "key": "block.minecraft.banner.square_bottom_right.orange", + "english_translation": "Orange Base Sinister Canton" + }, + { + "key": "mco.upload.uploading", + "english_translation": "Uploading '%s'" + }, + { + "key": "options.chat.links.prompt", + "english_translation": "Prompt on Links" + }, + { + "key": "block.minecraft.banner.stripe_center.green", + "english_translation": "Green Pale" + }, + { + "key": "block.minecraft.banner.half_horizontal.orange", + "english_translation": "Orange Per Fess" + }, + { + "key": "gui.back", + "english_translation": "Back" + }, + { + "key": "death.attack.dryout", + "english_translation": "%1$s died from dehydration" + }, + { + "key": "biome.minecraft.sparse_jungle", + "english_translation": "Sparse Jungle" + }, + { + "key": "subtitles.entity.shulker.teleport", + "english_translation": "Shulker teleports" + }, + { + "key": "advancements.story.iron_tools.description", + "english_translation": "Upgrade your Pickaxe" + }, + { + "key": "argument.entity.selector.nearestPlayer", + "english_translation": "Nearest player" + }, + { + "key": "item.minecraft.bucket", + "english_translation": "Bucket" + }, + { + "key": "structure_block.structure_name", + "english_translation": "Structure Name" + }, + { + "key": "commands.scoreboard.players.operation.success.multiple", + "english_translation": "Updated %s for %s entities" + }, + { + "key": "argument.gamemode.invalid", + "english_translation": "Unknown game mode: %s" + }, + { + "key": "block.minecraft.banner.small_stripes.black", + "english_translation": "Black Paly" + }, + { + "key": "block.minecraft.yellow_glazed_terracotta", + "english_translation": "Yellow Glazed Terracotta" + }, + { + "key": "block.minecraft.brown_shulker_box", + "english_translation": "Brown Shulker Box" + }, + { + "key": "block.minecraft.lily_of_the_valley", + "english_translation": "Lily of the Valley" + }, + { + "key": "block.minecraft.twisting_vines", + "english_translation": "Twisting Vines" + }, + { + "key": "block.minecraft.banner.bricks.pink", + "english_translation": "Pink Field Masoned" + }, + { + "key": "subtitles.entity.player.hurt", + "english_translation": "Player hurts" + }, + { + "key": "subtitles.ui.loom.take_result", + "english_translation": "Loom used" + }, + { + "key": "gui.socialInteractions.server_label.single", + "english_translation": "%s - %s player" + }, + { + "key": "commands.stopsound.success.sourceless.sound", + "english_translation": "Stopped sound '%s'" + }, + { + "key": "mco.backup.entry.gameDifficulty", + "english_translation": "Game Difficulty" + }, + { + "key": "block.minecraft.banner.gradient_up.yellow", + "english_translation": "Yellow Base Gradient" + }, + { + "key": "subtitles.entity.panda.aggressive_ambient", + "english_translation": "Panda huffs" + }, + { + "key": "argument.scoreHolder.empty", + "english_translation": "No relevant score holders could be found" + }, + { + "key": "advMode.nearestPlayer", + "english_translation": "Use \"@p\" to target nearest player" + }, + { + "key": "block.minecraft.crimson_hanging_sign", + "english_translation": "Crimson Hanging Sign" + }, + { + "key": "advancements.nether.obtain_blaze_rod.title", + "english_translation": "Into Fire" + }, + { + "key": "block.minecraft.banner.straight_cross.yellow", + "english_translation": "Yellow Cross" + }, + { + "key": "advancements.story.root.title", + "english_translation": "Minecraft" + }, + { + "key": "block.minecraft.pumpkin_stem", + "english_translation": "Pumpkin Stem" + }, + { + "key": "argument.nbt.expected.key", + "english_translation": "Expected key" + }, + { + "key": "stat.minecraft.traded_with_villager", + "english_translation": "Traded with Villagers" + }, + { + "key": "mco.download.done", + "english_translation": "Download done" + }, + { + "key": "subtitles.entity.horse.jump", + "english_translation": "Horse jumps" + }, + { + "key": "item.minecraft.poisonous_potato", + "english_translation": "Poisonous Potato" + }, + { + "key": "options.difficulty.normal", + "english_translation": "Normal" + }, + { + "key": "options.darkMojangStudiosBackgroundColor.tooltip", + "english_translation": "Changes the Mojang Studios loading screen background color to black." + }, + { + "key": "block.minecraft.banner.stripe_right.purple", + "english_translation": "Purple Pale Sinister" + }, + { + "key": "block.minecraft.banner.half_vertical.lime", + "english_translation": "Lime Per Pale" + }, + { + "key": "argument.entity.options.scores.description", + "english_translation": "Entities with scores" + }, + { + "key": "block.minecraft.banner.piglin.yellow", + "english_translation": "Yellow Snout" + }, + { + "key": "painting.minecraft.fighters.title", + "english_translation": "Fighters" + }, + { + "key": "selectWorld.gameMode.hardcore.info", + "english_translation": "Survival Mode locked to 'Hard' difficulty. You can't respawn if you die." + }, + { + "key": "subtitles.entity.illusioner.cast_spell", + "english_translation": "Illusioner casts spell" + }, + { + "key": "debug.help.help", + "english_translation": "F3 + Q = Show this list" + }, + { + "key": "block.minecraft.magenta_candle_cake", + "english_translation": "Cake with Magenta Candle" + }, + { + "key": "commands.publish.started", + "english_translation": "Local game hosted on port %s" + }, + { + "key": "biome.minecraft.windswept_hills", + "english_translation": "Windswept Hills" + }, + { + "key": "block.minecraft.tube_coral_fan", + "english_translation": "Tube Coral Fan" + }, + { + "key": "death.attack.anvil.player", + "english_translation": "%1$s was squashed by a falling anvil whilst fighting %2$s" + }, + { + "key": "subtitles.entity.ghast.shoot", + "english_translation": "Ghast shoots" + }, + { + "key": "parsing.double.invalid", + "english_translation": "Invalid double '%s'" + }, + { + "key": "subtitles.block.sculk.spread", + "english_translation": "Sculk spreads" + }, + { + "key": "item.minecraft.donkey_spawn_egg", + "english_translation": "Donkey Spawn Egg" + }, + { + "key": "deathScreen.title", + "english_translation": "You Died!" + }, + { + "key": "options.notifications.display_time", + "english_translation": "Notification Time" + }, + { + "key": "structure_block.button.save", + "english_translation": "SAVE" + }, + { + "key": "block.minecraft.banner.small_stripes.cyan", + "english_translation": "Cyan Paly" + }, + { + "key": "block.minecraft.potted_azure_bluet", + "english_translation": "Potted Azure Bluet" + }, + { + "key": "structure_block.mode_info.save", + "english_translation": "Save Mode - Write to File" + }, + { + "key": "options.skinCustomisation", + "english_translation": "Skin Customization..." + }, + { + "key": "gui.socialInteractions.tab_hidden", + "english_translation": "Hidden" + }, + { + "key": "disconnect.loginFailedInfo.invalidSession", + "english_translation": "Invalid session (Try restarting your game and the launcher)" + }, + { + "key": "mco.upload.close.failure", + "english_translation": "Could not close your realm, please try again later" + }, + { + "key": "subtitles.block.anvil.destroy", + "english_translation": "Anvil destroyed" + }, + { + "key": "color.minecraft.purple", + "english_translation": "Purple" + }, + { + "key": "options.touchscreen", + "english_translation": "Touchscreen Mode" + }, + { + "key": "createWorld.customize.custom.useLavaLakes", + "english_translation": "Lava Lakes" + }, + { + "key": "item.minecraft.salmon_spawn_egg", + "english_translation": "Salmon Spawn Egg" + }, + { + "key": "item.minecraft.yellow_dye", + "english_translation": "Yellow Dye" + }, + { + "key": "commands.locate.poi.not_found", + "english_translation": "Could not find a point of interest of type \"%s\" within reasonable distance" + }, + { + "key": "block.minecraft.soul_sand", + "english_translation": "Soul Sand" + }, + { + "key": "stat.minecraft.raid_win", + "english_translation": "Raids Won" + }, + { + "key": "subtitles.entity.donkey.ambient", + "english_translation": "Donkey hee-haws" + }, + { + "key": "death.attack.stalagmite.player", + "english_translation": "%1$s was impaled on a stalagmite whilst fighting %2$s" + }, + { + "key": "item.minecraft.shield.magenta", + "english_translation": "Magenta Shield" + }, + { + "key": "item.minecraft.knowledge_book", + "english_translation": "Knowledge Book" + }, + { + "key": "parsing.quote.expected.end", + "english_translation": "Unclosed quoted string" + }, + { + "key": "item.minecraft.clock", + "english_translation": "Clock" + }, + { + "key": "block.minecraft.banner.mojang.green", + "english_translation": "Green Thing" + }, + { + "key": "block.minecraft.banner.triangle_bottom.blue", + "english_translation": "Blue Chevron" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.20", + "english_translation": "Yellowtail Parrotfish" + }, + { + "key": "item.minecraft.splash_potion.effect.poison", + "english_translation": "Splash Potion of Poison" + }, + { + "key": "block.minecraft.bedrock", + "english_translation": "Bedrock" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.13", + "english_translation": "Queen Angelfish" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.12", + "english_translation": "Parrotfish" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.11", + "english_translation": "Ornate Butterflyfish" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.10", + "english_translation": "Moorish Idol" + }, + { + "key": "advancements.nether.find_bastion.description", + "english_translation": "Enter a Bastion Remnant" + }, + { + "key": "block.minecraft.brown_banner", + "english_translation": "Brown Banner" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.17", + "english_translation": "Threadfin" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.16", + "english_translation": "Red Snapper" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.15", + "english_translation": "Red Lipped Blenny" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.14", + "english_translation": "Red Cichlid" + }, + { + "key": "item.minecraft.tipped_arrow", + "english_translation": "Tipped Arrow" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.19", + "english_translation": "Triggerfish" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.18", + "english_translation": "Tomato Clownfish" + }, + { + "key": "block.minecraft.banner.curly_border.pink", + "english_translation": "Pink Bordure Indented" + }, + { + "key": "block.minecraft.banner.stripe_left.light_blue", + "english_translation": "Light Blue Pale Dexter" + }, + { + "key": "block.minecraft.dead_bubble_coral_wall_fan", + "english_translation": "Dead Bubble Coral Wall Fan" + }, + { + "key": "death.attack.cramming.player", + "english_translation": "%1$s was squashed by %2$s" + }, + { + "key": "block.minecraft.banner.triangles_bottom.orange", + "english_translation": "Orange Base Indented" + }, + { + "key": "block.minecraft.polished_granite_slab", + "english_translation": "Polished Granite Slab" + }, + { + "key": "options.clouds.fancy", + "english_translation": "Fancy" + }, + { + "key": "advancements.end.respawn_dragon.title", + "english_translation": "The End... Again..." + }, + { + "key": "block.minecraft.banner.triangle_bottom.yellow", + "english_translation": "Yellow Chevron" + }, + { + "key": "advancements.husbandry.obtain_sniffer_egg.description", + "english_translation": "Obtain a Sniffer Egg" + }, + { + "key": "block.minecraft.stone_stairs", + "english_translation": "Stone Stairs" + }, + { + "key": "stat.minecraft.total_world_time", + "english_translation": "Time with World Open" + }, + { + "key": "block.minecraft.banner.bricks.purple", + "english_translation": "Purple Field Masoned" + }, + { + "key": "item.minecraft.warped_fungus_on_a_stick", + "english_translation": "Warped Fungus on a Stick" + }, + { + "key": "item.minecraft.music_disc_cat.desc", + "english_translation": "C418 - cat" + }, + { + "key": "item.minecraft.wooden_pickaxe", + "english_translation": "Wooden Pickaxe" + }, + { + "key": "death.attack.thorns", + "english_translation": "%1$s was killed trying to hurt %2$s" + }, + { + "key": "block.minecraft.light_blue_stained_glass_pane", + "english_translation": "Light Blue Stained Glass Pane" + }, + { + "key": "key.back", + "english_translation": "Walk Backwards" + }, + { + "key": "block.minecraft.banner.skull.brown", + "english_translation": "Brown Skull Charge" + }, + { + "key": "item.minecraft.piglin_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.light_gray", + "english_translation": "Light Gray Per Bend Inverted" + }, + { + "key": "telemetry_info.screen.title", + "english_translation": "Telemetry Data Collection" + }, + { + "key": "block.minecraft.banner.stripe_downleft.lime", + "english_translation": "Lime Bend Sinister" + }, + { + "key": "commands.datapack.list.enabled.none", + "english_translation": "There are no data packs enabled" + }, + { + "key": "block.minecraft.dead_tube_coral", + "english_translation": "Dead Tube Coral" + }, + { + "key": "subtitles.entity.ravager.ambient", + "english_translation": "Ravager grunts" + }, + { + "key": "advancements.husbandry.wax_off.description", + "english_translation": "Scrape Wax off of a Copper block!" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.cyan", + "english_translation": "Cyan Per Fess Inverted" + }, + { + "key": "commands.execute.conditional.fail_count", + "english_translation": "Test failed, count: %s" + }, + { + "key": "itemGroup.op", + "english_translation": "Operator Utilities" + }, + { + "key": "subtitles.entity.axolotl.hurt", + "english_translation": "Axolotl hurts" + }, + { + "key": "block.minecraft.small_dripleaf", + "english_translation": "Small Dripleaf" + }, + { + "key": "item.minecraft.sugar", + "english_translation": "Sugar" + }, + { + "key": "argument.entity.options.limit.description", + "english_translation": "Maximum number of entities to return" + }, + { + "key": "block.minecraft.banner.curly_border.green", + "english_translation": "Green Bordure Indented" + }, + { + "key": "item.minecraft.music_disc_13.desc", + "english_translation": "C418 - 13" + }, + { + "key": "commands.weather.set.rain", + "english_translation": "Set the weather to rain" + }, + { + "key": "advMode.mode.conditional", + "english_translation": "Conditional" + }, + { + "key": "block.minecraft.blue_candle_cake", + "english_translation": "Cake with Blue Candle" + }, + { + "key": "color.minecraft.pink", + "english_translation": "Pink" + }, + { + "key": "advancements.nether.brew_potion.title", + "english_translation": "Local Brewery" + }, + { + "key": "block.minecraft.mangrove_sign", + "english_translation": "Mangrove Sign" + }, + { + "key": "advancements.adventure.hero_of_the_village.description", + "english_translation": "Successfully defend a village from a raid" + }, + { + "key": "item.minecraft.music_disc_wait", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.light_blue_candle_cake", + "english_translation": "Cake with Light Blue Candle" + }, + { + "key": "item.minecraft.firework_star.custom_color", + "english_translation": "Custom" + }, + { + "key": "subtitles.block.sign.waxed_interact_fail", + "english_translation": "Sign wobbles" + }, + { + "key": "death.attack.generic", + "english_translation": "%1$s died" + }, + { + "key": "subtitles.entity.turtle.hurt", + "english_translation": "Turtle hurts" + }, + { + "key": "container.enchant.level.one", + "english_translation": "1 Enchantment Level" + }, + { + "key": "stat.minecraft.use_cauldron", + "english_translation": "Water Taken from Cauldron" + }, + { + "key": "item.minecraft.potion.effect.leaping", + "english_translation": "Potion of Leaping" + }, + { + "key": "subtitles.entity.parrot.ambient", + "english_translation": "Parrot talks" + }, + { + "key": "item.minecraft.potato", + "english_translation": "Potato" + }, + { + "key": "mco.notification.visitUrl.message.default", + "english_translation": "Please visit the link below" + }, + { + "key": "painting.minecraft.wither.title", + "english_translation": "Wither" + }, + { + "key": "gui.chatReport.select_chat", + "english_translation": "Select Chat Messages to Report" + }, + { + "key": "block.minecraft.banner.stripe_right.brown", + "english_translation": "Brown Pale Sinister" + }, + { + "key": "block.minecraft.banner.triangle_bottom.lime", + "english_translation": "Lime Chevron" + }, + { + "key": "subtitles.block.beacon.ambient", + "english_translation": "Beacon hums" + }, + { + "key": "mco.backup.button.upload", + "english_translation": "Upload world" + }, + { + "key": "subtitles.item.armor.equip_iron", + "english_translation": "Iron armor clanks" + }, + { + "key": "block.minecraft.cherry_leaves", + "english_translation": "Cherry Leaves" + }, + { + "key": "subtitles.entity.drowned.hurt", + "english_translation": "Drowned hurts" + }, + { + "key": "advancements.story.upgrade_tools.description", + "english_translation": "Construct a better Pickaxe" + }, + { + "key": "block.minecraft.fire_coral_block", + "english_translation": "Fire Coral Block" + }, + { + "key": "item.minecraft.shield.green", + "english_translation": "Green Shield" + }, + { + "key": "narration.component_list.usage", + "english_translation": "Press Tab to navigate to next element" + }, + { + "key": "argument.entity.options.unterminated", + "english_translation": "Expected end of options" + }, + { + "key": "block.minecraft.small_amethyst_bud", + "english_translation": "Small Amethyst Bud" + }, + { + "key": "mco.configure.world.description", + "english_translation": "Realm description" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.light_blue", + "english_translation": "Light Blue Per Bend Sinister Inverted" + }, + { + "key": "biome.minecraft.grove", + "english_translation": "Grove" + }, + { + "key": "block.minecraft.nether_sprouts", + "english_translation": "Nether Sprouts" + }, + { + "key": "block.minecraft.creeper_wall_head", + "english_translation": "Creeper Wall Head" + }, + { + "key": "debug.reload_resourcepacks.help", + "english_translation": "F3 + T = Reload resource packs" + }, + { + "key": "optimizeWorld.info.total", + "english_translation": "Total chunks: %s" + }, + { + "key": "entity.minecraft.giant", + "english_translation": "Giant" + }, + { + "key": "subtitles.block.fence_gate.toggle", + "english_translation": "Fence Gate creaks" + }, + { + "key": "item.minecraft.smithing_template.applies_to", + "english_translation": "Applies to:" + }, + { + "key": "advancements.husbandry.froglights.title", + "english_translation": "With Our Powers Combined!" + }, + { + "key": "block.minecraft.banner.triangle_top.light_gray", + "english_translation": "Light Gray Inverted Chevron" + }, + { + "key": "block.minecraft.banner.flower.light_gray", + "english_translation": "Light Gray Flower Charge" + }, + { + "key": "block.minecraft.banner.skull.blue", + "english_translation": "Blue Skull Charge" + }, + { + "key": "block.minecraft.green_concrete", + "english_translation": "Green Concrete" + }, + { + "key": "gui.socialInteractions.narration.show", + "english_translation": "Show messages from %s" + }, + { + "key": "argument.pos.missing.double", + "english_translation": "Expected a coordinate" + }, + { + "key": "block.minecraft.potted_brown_mushroom", + "english_translation": "Potted Brown Mushroom" + }, + { + "key": "menu.convertingLevel", + "english_translation": "Converting world" + }, + { + "key": "soundCategory.hostile", + "english_translation": "Hostile Creatures" + }, + { + "key": "block.minecraft.orange_concrete_powder", + "english_translation": "Orange Concrete Powder" + }, + { + "key": "block.minecraft.smithing_table", + "english_translation": "Smithing Table" + }, + { + "key": "mco.configure.world.subscription.start", + "english_translation": "Start date" + }, + { + "key": "stat.minecraft.ring_bell", + "english_translation": "Bells Rung" + }, + { + "key": "selectWorld.gameMode.adventure.info", + "english_translation": "Same as Survival Mode, but blocks can't be added or removed." + }, + { + "key": "subtitles.entity.puffer_fish.blow_out", + "english_translation": "Pufferfish deflates" + }, + { + "key": "item.minecraft.wither_skeleton_spawn_egg", + "english_translation": "Wither Skeleton Spawn Egg" + }, + { + "key": "block.minecraft.banner.triangles_bottom.white", + "english_translation": "White Base Indented" + }, + { + "key": "gui.chatReport.discard.discard", + "english_translation": "Leave and Discard Report" + }, + { + "key": "subtitles.block.tripwire.click", + "english_translation": "Tripwire clicks" + }, + { + "key": "subtitles.entity.cod.flop", + "english_translation": "Cod flops" + }, + { + "key": "entity.minecraft.tropical_fish.predefined.21", + "english_translation": "Yellow Tang" + }, + { + "key": "commands.scoreboard.players.add.success.multiple", + "english_translation": "Added %s to %s for %s entities" + }, + { + "key": "death.fell.killer", + "english_translation": "%1$s was doomed to fall" + }, + { + "key": "item.minecraft.quartz", + "english_translation": "Nether Quartz" + }, + { + "key": "item.modifiers.mainhand", + "english_translation": "When in Main Hand:" + }, + { + "key": "options.graphics.fancy", + "english_translation": "Fancy" + }, + { + "key": "structure_block.save_failure", + "english_translation": "Unable to save structure '%s'" + }, + { + "key": "block.minecraft.banner.square_bottom_right.white", + "english_translation": "White Base Sinister Canton" + }, + { + "key": "structure_block.integrity.seed", + "english_translation": "Structure Seed" + }, + { + "key": "itemGroup.natural", + "english_translation": "Natural Blocks" + }, + { + "key": "subtitles.entity.warden.heartbeat", + "english_translation": "Warden's heart beats" + }, + { + "key": "options.mainHand.right", + "english_translation": "Right" + }, + { + "key": "subtitles.entity.parrot.eats", + "english_translation": "Parrot eats" + }, + { + "key": "mco.template.button.publisher", + "english_translation": "Publisher" + }, + { + "key": "mco.configure.world.close.question.line1", + "english_translation": "Your realm will become unavailable." + }, + { + "key": "mco.configure.world.close.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "block.minecraft.banner.stripe_center.red", + "english_translation": "Red Pale" + }, + { + "key": "subtitles.entity.parrot.imitate.evoker", + "english_translation": "Parrot murmurs" + }, + { + "key": "block.minecraft.banner.curly_border.black", + "english_translation": "Black Bordure Indented" + }, + { + "key": "item.minecraft.prismarine_shard", + "english_translation": "Prismarine Shard" + }, + { + "key": "item.minecraft.slime_spawn_egg", + "english_translation": "Slime Spawn Egg" + }, + { + "key": "options.skinCustomisation.title", + "english_translation": "Skin Customization" + }, + { + "key": "subtitles.entity.parrot.imitate.guardian", + "english_translation": "Parrot moans" + }, + { + "key": "block.minecraft.banner.half_horizontal.blue", + "english_translation": "Blue Per Fess" + }, + { + "key": "block.minecraft.sandstone", + "english_translation": "Sandstone" + }, + { + "key": "multiplayer.unsecureserver.toast.title", + "english_translation": "Chat messages can't be verified" + }, + { + "key": "narration.suggestion", + "english_translation": "Selected suggestion %s out of %s: %s" + }, + { + "key": "entity.minecraft.villager.farmer", + "english_translation": "Farmer" + }, + { + "key": "attribute.modifier.plus.0", + "english_translation": "+%s %s" + }, + { + "key": "gui.abuseReport.reason.terrorism_or_violent_extremism", + "english_translation": "Terrorism or violent extremism" + }, + { + "key": "attribute.modifier.plus.2", + "english_translation": "+%s%% %s" + }, + { + "key": "attribute.modifier.plus.1", + "english_translation": "+%s%% %s" + }, + { + "key": "block.minecraft.banner.triangle_top.green", + "english_translation": "Green Inverted Chevron" + }, + { + "key": "telemetry.property.game_version.title", + "english_translation": "Game Version" + }, + { + "key": "block.minecraft.brown_mushroom", + "english_translation": "Brown Mushroom" + }, + { + "key": "commands.setblock.failed", + "english_translation": "Could not set the block" + }, + { + "key": "block.minecraft.lodestone", + "english_translation": "Lodestone" + }, + { + "key": "commands.item.entity.set.success.single", + "english_translation": "Replaced a slot on %s with %s" + }, + { + "key": "gui.banned.reason.fraud", + "english_translation": "Fraudulent acquisition or use of content" + }, + { + "key": "block.minecraft.stone_brick_wall", + "english_translation": "Stone Brick Wall" + }, + { + "key": "subtitles.entity.llama.swag", + "english_translation": "Llama is decorated" + }, + { + "key": "commands.scoreboard.players.reset.all.multiple", + "english_translation": "Reset all scores for %s entities" + }, + { + "key": "gamerule.tntExplosionDropDecay.description", + "english_translation": "Some of the drops from blocks destroyed by explosions caused by TNT are lost in the explosion." + }, + { + "key": "entity.minecraft.furnace_minecart", + "english_translation": "Minecart with Furnace" + }, + { + "key": "attribute.name.generic.flying_speed", + "english_translation": "Flying Speed" + }, + { + "key": "gui.socialInteractions.tooltip.hide", + "english_translation": "Hide messages" + }, + { + "key": "block.minecraft.soul_fire", + "english_translation": "Soul Fire" + }, + { + "key": "death.fell.accident.generic", + "english_translation": "%1$s fell from a high place" + }, + { + "key": "mco.configure.world.delete.question.line1", + "english_translation": "Your realm will be permanently deleted" + }, + { + "key": "gui.advancements", + "english_translation": "Advancements" + }, + { + "key": "selectWorld.conversion", + "english_translation": "Must be converted!" + }, + { + "key": "item.minecraft.iron_hoe", + "english_translation": "Iron Hoe" + }, + { + "key": "mco.configure.world.delete.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "mco.selectServer.purchase", + "english_translation": "Add Realm" + }, + { + "key": "block.minecraft.magenta_carpet", + "english_translation": "Magenta Carpet" + }, + { + "key": "item.minecraft.shield.black", + "english_translation": "Black Shield" + }, + { + "key": "block.minecraft.banner.piglin.orange", + "english_translation": "Orange Snout" + }, + { + "key": "commands.ride.mount.failure.loop", + "english_translation": "Can't mount entity on itself or any of its passengers" + }, + { + "key": "commands.setworldspawn.success", + "english_translation": "Set the world spawn point to %s, %s, %s [%s]" + }, + { + "key": "commands.pardon.success", + "english_translation": "Unbanned %s" + }, + { + "key": "item.minecraft.music_disc_ward", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.blue_orchid", + "english_translation": "Blue Orchid" + }, + { + "key": "menu.savingChunks", + "english_translation": "Saving chunks" + }, + { + "key": "block.minecraft.banner.flower.brown", + "english_translation": "Brown Flower Charge" + }, + { + "key": "commands.jfr.start.failed", + "english_translation": "Failed to start JFR profiling" + }, + { + "key": "stat.mobsButton", + "english_translation": "Mobs" + }, + { + "key": "block.minecraft.banner.stripe_center.brown", + "english_translation": "Brown Pale" + }, + { + "key": "createWorld.customize.custom.seaLevel", + "english_translation": "Sea Level" + }, + { + "key": "block.minecraft.red_candle_cake", + "english_translation": "Cake with Red Candle" + }, + { + "key": "block.minecraft.gray_concrete", + "english_translation": "Gray Concrete" + }, + { + "key": "mco.minigame.world.starting.screen.title", + "english_translation": "Starting minigame..." + }, + { + "key": "block.minecraft.light_weighted_pressure_plate", + "english_translation": "Light Weighted Pressure Plate" + }, + { + "key": "subtitles.entity.drowned.death", + "english_translation": "Drowned dies" + }, + { + "key": "commands.bossbar.set.value.unchanged", + "english_translation": "Nothing changed. That's already the value of this bossbar" + }, + { + "key": "block.minecraft.black_stained_glass", + "english_translation": "Black Stained Glass" + }, + { + "key": "entity.minecraft.endermite", + "english_translation": "Endermite" + }, + { + "key": "commands.team.option.collisionRule.success", + "english_translation": "Collision rule for team %s is now \"%s\"" + }, + { + "key": "pack.folderInfo", + "english_translation": "(Place pack files here)" + }, + { + "key": "block.minecraft.banner.stripe_downleft.blue", + "english_translation": "Blue Bend Sinister" + }, + { + "key": "block.minecraft.red_nether_bricks", + "english_translation": "Red Nether Bricks" + }, + { + "key": "block.minecraft.banner.square_top_right.yellow", + "english_translation": "Yellow Chief Sinister Canton" + }, + { + "key": "argument.entity.options.gamemode.description", + "english_translation": "Players with game mode" + }, + { + "key": "lanServer.port.invalid", + "english_translation": "Not a valid port.\nLeave the edit box empty or enter a number between 1024 and 65535." + }, + { + "key": "block.minecraft.banner.half_horizontal.lime", + "english_translation": "Lime Per Fess" + }, + { + "key": "block.minecraft.banner.circle.purple", + "english_translation": "Purple Roundel" + }, + { + "key": "commands.scoreboard.players.list.entity.empty", + "english_translation": "%s has no scores to show" + }, + { + "key": "block.minecraft.emerald_block", + "english_translation": "Block of Emerald" + }, + { + "key": "item.minecraft.pufferfish", + "english_translation": "Pufferfish" + }, + { + "key": "block.minecraft.banner.stripe_downleft.orange", + "english_translation": "Orange Bend Sinister" + }, + { + "key": "enchantment.minecraft.feather_falling", + "english_translation": "Feather Falling" + }, + { + "key": "commands.tag.list.single.success", + "english_translation": "%s has %s tags: %s" + }, + { + "key": "advancements.adventure.kill_a_mob.description", + "english_translation": "Kill any hostile monster" + }, + { + "key": "block.minecraft.smooth_quartz_slab", + "english_translation": "Smooth Quartz Slab" + }, + { + "key": "stat_type.minecraft.picked_up", + "english_translation": "Picked Up" + }, + { + "key": "commands.forceload.added.failure", + "english_translation": "No chunks were marked for force loading" + }, + { + "key": "gamerule.maxCommandChainLength", + "english_translation": "Command chain size limit" + }, + { + "key": "block.minecraft.gold_ore", + "english_translation": "Gold Ore" + }, + { + "key": "block.minecraft.lime_stained_glass_pane", + "english_translation": "Lime Stained Glass Pane" + }, + { + "key": "stat.minecraft.fish_caught", + "english_translation": "Fish Caught" + }, + { + "key": "commands.teleport.success.location.multiple", + "english_translation": "Teleported %s entities to %s, %s, %s" + }, + { + "key": "item.minecraft.pottery_shard_skull", + "english_translation": "Skull Pottery Shard" + }, + { + "key": "options.chat.height.focused", + "english_translation": "Focused Height" + }, + { + "key": "item.minecraft.written_book", + "english_translation": "Written Book" + }, + { + "key": "multiplayer.disconnect.unsigned_chat", + "english_translation": "Received chat packet with missing or invalid signature." + }, + { + "key": "enchantment.minecraft.mending", + "english_translation": "Mending" + }, + { + "key": "item.minecraft.beetroot", + "english_translation": "Beetroot" + }, + { + "key": "gamerule.blockExplosionDropDecay.description", + "english_translation": "Some of the drops from blocks destroyed by explosions caused by block interactions are lost in the explosion." + }, + { + "key": "item.minecraft.string", + "english_translation": "String" + }, + { + "key": "commands.execute.blocks.toobig", + "english_translation": "Too many blocks in the specified area (maximum %s, specified %s)" + }, + { + "key": "subtitles.entity.piglin_brute.converted_to_zombified", + "english_translation": "Piglin Brute converts to Zombified Piglin" + }, + { + "key": "gui.recipebook.toggleRecipes.smokable", + "english_translation": "Showing Smokable" + }, + { + "key": "subtitles.entity.sniffer.sniffing", + "english_translation": "Sniffer sniffs" + }, + { + "key": "stat.minecraft.damage_taken", + "english_translation": "Damage Taken" + }, + { + "key": "block.minecraft.banner.square_bottom_right.red", + "english_translation": "Red Base Sinister Canton" + }, + { + "key": "generator.minecraft.single_biome_surface", + "english_translation": "Single Biome" + }, + { + "key": "createWorld.customize.custom.biomeDepthOffset", + "english_translation": "Biome Depth Offset" + }, + { + "key": "advancements.husbandry.fishy_business.description", + "english_translation": "Catch a fish" + }, + { + "key": "selectServer.deleteButton", + "english_translation": "Delete" + }, + { + "key": "subtitles.entity.evoker.ambient", + "english_translation": "Evoker murmurs" + }, + { + "key": "block.minecraft.pink_stained_glass_pane", + "english_translation": "Pink Stained Glass Pane" + }, + { + "key": "enchantment.minecraft.unbreaking", + "english_translation": "Unbreaking" + }, + { + "key": "item.minecraft.music_disc_blocks", + "english_translation": "Music Disc" + }, + { + "key": "createWorld.customize.custom.upperLimitScale", + "english_translation": "Upper Limit Scale" + }, + { + "key": "item.minecraft.lava_bucket", + "english_translation": "Lava Bucket" + }, + { + "key": "block.minecraft.oak_log", + "english_translation": "Oak Log" + }, + { + "key": "subtitles.entity.glow_squid.ambient", + "english_translation": "Glow Squid swims" + }, + { + "key": "commands.experience.add.levels.success.multiple", + "english_translation": "Gave %s experience levels to %s players" + }, + { + "key": "dataPack.title", + "english_translation": "Select Data Packs" + }, + { + "key": "block.minecraft.jungle_hanging_sign", + "english_translation": "Jungle Hanging Sign" + }, + { + "key": "commands.scoreboard.players.reset.specific.single", + "english_translation": "Reset %s for %s" + }, + { + "key": "item.minecraft.angler_pottery_shard", + "english_translation": "Angler Pottery Shard" + }, + { + "key": "selectWorld.targetFolder", + "english_translation": "Save folder: %s" + }, + { + "key": "mco.configure.world.spawn_toggle.title", + "english_translation": "Warning!" + }, + { + "key": "chat.type.advancement.challenge", + "english_translation": "%s has completed the challenge %s" + }, + { + "key": "createWorld.customize.custom.waterLakeChance", + "english_translation": "Water Lake Rarity" + }, + { + "key": "datapackFailure.safeMode.failed.description", + "english_translation": "This world contains invalid or corrupted save data." + }, + { + "key": "block.minecraft.potted_oak_sapling", + "english_translation": "Potted Oak Sapling" + }, + { + "key": "subtitles.entity.arrow.shoot", + "english_translation": "Arrow fired" + }, + { + "key": "item.durability", + "english_translation": "Durability: %s / %s" + }, + { + "key": "item.minecraft.wither_spawn_egg", + "english_translation": "Wither Spawn Egg" + }, + { + "key": "painting.minecraft.aztec.title", + "english_translation": "de_aztec" + }, + { + "key": "item.minecraft.command_block_minecart", + "english_translation": "Minecart with Command Block" + }, + { + "key": "block.minecraft.honey_block", + "english_translation": "Honey Block" + }, + { + "key": "credits_and_attribution.button.credits", + "english_translation": "Credits" + }, + { + "key": "entity.minecraft.chest_minecart", + "english_translation": "Minecart with Chest" + }, + { + "key": "multiplayer.disconnect.invalid_player_data", + "english_translation": "Invalid player data" + }, + { + "key": "subtitles.entity.piglin.converted_to_zombified", + "english_translation": "Piglin converts to Zombified Piglin" + }, + { + "key": "telemetry.property.render_time_samples.title", + "english_translation": "Render Time Samples" + }, + { + "key": "block.minecraft.lime_terracotta", + "english_translation": "Lime Terracotta" + }, + { + "key": "item.minecraft.shield", + "english_translation": "Shield" + }, + { + "key": "realms.missing.snapshot.error.text", + "english_translation": "Realms is currently not supported in snapshots" + }, + { + "key": "item.minecraft.pottery_shard_prize", + "english_translation": "Prize Pottery Shard" + }, + { + "key": "mco.configure.world.slot.tooltip.active", + "english_translation": "Join" + }, + { + "key": "block.minecraft.repeating_command_block", + "english_translation": "Repeating Command Block" + }, + { + "key": "block.minecraft.chiseled_bookshelf", + "english_translation": "Chiseled Bookshelf" + }, + { + "key": "arguments.block.tag.unknown", + "english_translation": "Unknown block tag '%s'" + }, + { + "key": "block.minecraft.red_nether_brick_wall", + "english_translation": "Red Nether Brick Wall" + }, + { + "key": "commands.worldborder.set.grow", + "english_translation": "Growing the world border to %s blocks wide over %s seconds" + }, + { + "key": "block.minecraft.purple_stained_glass", + "english_translation": "Purple Stained Glass" + }, + { + "key": "subtitles.block.pumpkin.carve", + "english_translation": "Shears carve" + }, + { + "key": "block.minecraft.banner.triangles_bottom.pink", + "english_translation": "Pink Base Indented" + }, + { + "key": "block.minecraft.peony", + "english_translation": "Peony" + }, + { + "key": "narrator.select.world", + "english_translation": "Selected %s, last played: %s, %s, %s, version: %s" + }, + { + "key": "item.minecraft.mojang_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "commands.recipe.give.success.multiple", + "english_translation": "Unlocked %s recipes for %s players" + }, + { + "key": "commands.forceload.query.failure", + "english_translation": "Chunk at %s in %s is not marked for force loading" + }, + { + "key": "block.minecraft.potted_birch_sapling", + "english_translation": "Potted Birch Sapling" + }, + { + "key": "commands.damage.success", + "english_translation": "Applied %s damage to %s" + }, + { + "key": "advancements.adventure.trade_at_world_height.description", + "english_translation": "Trade with a Villager at the build height limit" + }, + { + "key": "subtitles.chiseled_bookshelf.take_enchanted", + "english_translation": "Enchanted Book taken" + }, + { + "key": "block.minecraft.mud_brick_wall", + "english_translation": "Mud Brick Wall" + }, + { + "key": "subtitles.block.comparator.click", + "english_translation": "Comparator clicks" + }, + { + "key": "subtitles.entity.potion.splash", + "english_translation": "Bottle smashes" + }, + { + "key": "flat_world_preset.minecraft.tunnelers_dream", + "english_translation": "Tunnelers' Dream" + }, + { + "key": "item.minecraft.tipped_arrow.effect.luck", + "english_translation": "Arrow of Luck" + }, + { + "key": "gui.socialInteractions.report", + "english_translation": "Report" + }, + { + "key": "key.keyboard.num.lock", + "english_translation": "Num Lock" + }, + { + "key": "item.minecraft.torchflower_seeds", + "english_translation": "Torchflower Seeds" + }, + { + "key": "selectWorld.edit.backup", + "english_translation": "Make Backup" + }, + { + "key": "item.minecraft.enchanted_golden_apple", + "english_translation": "Enchanted Golden Apple" + }, + { + "key": "subtitles.entity.fox.spit", + "english_translation": "Fox spits" + }, + { + "key": "commands.gamerule.query", + "english_translation": "Gamerule %s is currently set to: %s" + }, + { + "key": "block.minecraft.birch_wall_hanging_sign", + "english_translation": "Birch Wall Hanging Sign" + }, + { + "key": "title.multiplayer.other", + "english_translation": "Multiplayer (3rd-party Server)" + }, + { + "key": "subtitles.item.armor.equip_leather", + "english_translation": "Leather armor rustles" + }, + { + "key": "parsing.bool.invalid", + "english_translation": "Invalid boolean, expected 'true' or 'false' but found '%s'" + }, + { + "key": "subtitles.entity.hoglin.attack", + "english_translation": "Hoglin attacks" + }, + { + "key": "item.minecraft.cocoa_beans", + "english_translation": "Cocoa Beans" + }, + { + "key": "block.minecraft.brown_stained_glass", + "english_translation": "Brown Stained Glass" + }, + { + "key": "multiplayer.disconnect.unverified_username", + "english_translation": "Failed to verify username!" + }, + { + "key": "block.minecraft.mangrove_fence", + "english_translation": "Mangrove Fence" + }, + { + "key": "narration.checkbox.usage.hovered", + "english_translation": "Left click to toggle" + }, + { + "key": "block.minecraft.dead_tube_coral_fan", + "english_translation": "Dead Tube Coral Fan" + }, + { + "key": "block.minecraft.prismarine_stairs", + "english_translation": "Prismarine Stairs" + }, + { + "key": "resourcePack.load_fail", + "english_translation": "Resource reload failed" + }, + { + "key": "mco.configure.world.buttons.invite", + "english_translation": "Invite player" + }, + { + "key": "block.minecraft.cut_red_sandstone_slab", + "english_translation": "Cut Red Sandstone Slab" + }, + { + "key": "block.minecraft.banner.square_bottom_right.green", + "english_translation": "Green Base Sinister Canton" + }, + { + "key": "mco.configure.world.subscription.recurring.info", + "english_translation": "Changes made to your Realms subscription such as stacking time or turning off recurring billing will not be reflected until your next bill date." + }, + { + "key": "key.keyboard.backslash", + "english_translation": "\\" + }, + { + "key": "commands.worldborder.damage.amount.failed", + "english_translation": "Nothing changed. The world border damage is already that amount" + }, + { + "key": "block.minecraft.dead_bush", + "english_translation": "Dead Bush" + }, + { + "key": "translation.test.invalid2", + "english_translation": "hi % s" + }, + { + "key": "telemetry.property.load_time_pre_window_ms.title", + "english_translation": "Time Before Window Opens (Milliseconds)" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.orange", + "english_translation": "Orange Per Fess Inverted" + }, + { + "key": "block.minecraft.banner.half_vertical.yellow", + "english_translation": "Yellow Per Pale" + }, + { + "key": "selectServer.add", + "english_translation": "Add Server" + }, + { + "key": "entity.minecraft.skeleton_horse", + "english_translation": "Skeleton Horse" + }, + { + "key": "subtitles.entity.evoker_fangs.attack", + "english_translation": "Fangs snap" + }, + { + "key": "death.attack.indirectMagic", + "english_translation": "%1$s was killed by %2$s using magic" + }, + { + "key": "options.renderDistance", + "english_translation": "Render Distance" + }, + { + "key": "item.minecraft.music_disc_far.desc", + "english_translation": "C418 - far" + }, + { + "key": "title.multiplayer.disabled.banned.permanent", + "english_translation": "Your account is permanently suspended from online play" + }, + { + "key": "block.minecraft.banner.piglin.gray", + "english_translation": "Gray Snout" + }, + { + "key": "attribute.name.generic.attack_damage", + "english_translation": "Attack Damage" + }, + { + "key": "item.minecraft.netherite_ingot", + "english_translation": "Netherite Ingot" + }, + { + "key": "mco.configure.world.name", + "english_translation": "Realm name" + }, + { + "key": "chat.disabled.expiredProfileKey", + "english_translation": "Chat disabled due to expired profile public key. Please try reconnecting." + }, + { + "key": "advancements.end.levitate.description", + "english_translation": "Levitate up 50 blocks from the attacks of a Shulker" + }, + { + "key": "advancements.story.enchant_item.description", + "english_translation": "Enchant an item at an Enchanting Table" + }, + { + "key": "subtitles.entity.frog.hurt", + "english_translation": "Frog hurts" + }, + { + "key": "block.minecraft.rail", + "english_translation": "Rail" + }, + { + "key": "item.minecraft.stone_axe", + "english_translation": "Stone Axe" + }, + { + "key": "argument.pos.outofbounds", + "english_translation": "That position is outside the allowed boundaries." + }, + { + "key": "block.minecraft.bamboo_wall_sign", + "english_translation": "Bamboo Wall Sign" + }, + { + "key": "item.minecraft.bread", + "english_translation": "Bread" + }, + { + "key": "block.minecraft.banner.triangle_top.white", + "english_translation": "White Inverted Chevron" + }, + { + "key": "mco.configure.world.buttons.options", + "english_translation": "World options" + }, + { + "key": "block.minecraft.jungle_fence_gate", + "english_translation": "Jungle Fence Gate" + }, + { + "key": "multiplayer.status.ping", + "english_translation": "%s ms" + }, + { + "key": "gamerule.doFireTick", + "english_translation": "Update fire" + }, + { + "key": "subtitles.block.conduit.attack.target", + "english_translation": "Conduit attacks" + }, + { + "key": "entity.minecraft.witch", + "english_translation": "Witch" + }, + { + "key": "gamerule.universalAnger.description", + "english_translation": "Angered neutral mobs attack any nearby player, not just the player that angered them. Works best if forgiveDeadPlayers is disabled." + }, + { + "key": "gui.toMenu", + "english_translation": "Back to Server List" + }, + { + "key": "block.minecraft.banner.rhombus.yellow", + "english_translation": "Yellow Lozenge" + }, + { + "key": "block.minecraft.smooth_sandstone", + "english_translation": "Smooth Sandstone" + }, + { + "key": "mco.configure.world.forceGameMode", + "english_translation": "Force game mode" + }, + { + "key": "chat.filtered_full", + "english_translation": "The server has hidden your message for some players." + }, + { + "key": "itemGroup.spawnEggs", + "english_translation": "Spawn Eggs" + }, + { + "key": "debug.crash.warning", + "english_translation": "Crashing in %s..." + }, + { + "key": "advancements.adventure.spyglass_at_dragon.description", + "english_translation": "Look at the Ender Dragon through a Spyglass" + }, + { + "key": "block.minecraft.jungle_wood", + "english_translation": "Jungle Wood" + }, + { + "key": "subtitles.entity.polar_bear.warning", + "english_translation": "Polar Bear roars" + }, + { + "key": "painting.minecraft.fighters.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "entity.minecraft.wither", + "english_translation": "Wither" + }, + { + "key": "item.minecraft.music_disc_stal.desc", + "english_translation": "C418 - stal" + }, + { + "key": "item.minecraft.cow_spawn_egg", + "english_translation": "Cow Spawn Egg" + }, + { + "key": "block.minecraft.reinforced_deepslate", + "english_translation": "Reinforced Deepslate" + }, + { + "key": "subtitles.item.brush.brushing.sand", + "english_translation": "Brushing Sand" + }, + { + "key": "commands.title.show.subtitle.multiple", + "english_translation": "Showing new subtitle for %s players" + }, + { + "key": "item.minecraft.skeleton_spawn_egg", + "english_translation": "Skeleton Spawn Egg" + }, + { + "key": "commands.bossbar.set.style.success", + "english_translation": "Custom bossbar %s has changed style" + }, + { + "key": "container.blast_furnace", + "english_translation": "Blast Furnace" + }, + { + "key": "enchantment.minecraft.respiration", + "english_translation": "Respiration" + }, + { + "key": "block.minecraft.cherry_door", + "english_translation": "Cherry Door" + }, + { + "key": "death.attack.explosion.player", + "english_translation": "%1$s was blown up by %2$s" + }, + { + "key": "subtitles.entity.glow_item_frame.rotate_item", + "english_translation": "Glow Item Frame clicks" + }, + { + "key": "block.minecraft.banner.stripe_center.magenta", + "english_translation": "Magenta Pale" + }, + { + "key": "block.minecraft.mud", + "english_translation": "Mud" + }, + { + "key": "effect.minecraft.luck", + "english_translation": "Luck" + }, + { + "key": "block.minecraft.chiseled_sandstone", + "english_translation": "Chiseled Sandstone" + }, + { + "key": "options.fullscreen", + "english_translation": "Fullscreen" + }, + { + "key": "subtitles.entity.wither.spawn", + "english_translation": "Wither released" + }, + { + "key": "options.difficulty.peaceful", + "english_translation": "Peaceful" + }, + { + "key": "subtitles.entity.hoglin.angry", + "english_translation": "Hoglin growls angrily" + }, + { + "key": "death.attack.hotFloor", + "english_translation": "%1$s discovered the floor was lava" + }, + { + "key": "team.notFound", + "english_translation": "Unknown team '%s'" + }, + { + "key": "selectWorld.enterName", + "english_translation": "World Name" + }, + { + "key": "block.minecraft.infested_stone", + "english_translation": "Infested Stone" + }, + { + "key": "debug.advanced_tooltips.help", + "english_translation": "F3 + H = Advanced tooltips" + }, + { + "key": "subtitles.entity.tropical_fish.hurt", + "english_translation": "Tropical Fish hurts" + }, + { + "key": "death.attack.wither.player", + "english_translation": "%1$s withered away whilst fighting %2$s" + }, + { + "key": "itemGroup.coloredBlocks", + "english_translation": "Colored Blocks" + }, + { + "key": "painting.minecraft.bomb.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "telemetry.property.used_memory_samples.title", + "english_translation": "Used Random Access Memory" + }, + { + "key": "stat.minecraft.horse_one_cm", + "english_translation": "Distance by Horse" + }, + { + "key": "block.minecraft.jigsaw", + "english_translation": "Jigsaw Block" + }, + { + "key": "subtitles.block.respawn_anchor.charge", + "english_translation": "Respawn Anchor is charged" + }, + { + "key": "subtitles.entity.blaze.death", + "english_translation": "Blaze dies" + }, + { + "key": "gui.socialInteractions.empty_hidden", + "english_translation": "No players hidden in chat" + }, + { + "key": "commands.advancement.grant.criterion.to.many.failure", + "english_translation": "Couldn't grant criterion '%s' of advancement %s to %s players as they already have it" + }, + { + "key": "options.graphics.warning.vendor", + "english_translation": "Vendor detected: [%s]" + }, + { + "key": "selectWorld.locked", + "english_translation": "Locked by another running instance of Minecraft" + }, + { + "key": "demo.help.movement", + "english_translation": "Use the %1$s, %2$s, %3$s, %4$s keys and the mouse to move around" + }, + { + "key": "mco.configure.world.invites.ops.tooltip", + "english_translation": "Operator" + }, + { + "key": "block.minecraft.dead_brain_coral_block", + "english_translation": "Dead Brain Coral Block" + }, + { + "key": "gui.abuseReport.reason.child_sexual_exploitation_or_abuse", + "english_translation": "Child sexual exploitation or abuse" + }, + { + "key": "block.minecraft.fire_coral_fan", + "english_translation": "Fire Coral Fan" + }, + { + "key": "generator.minecraft.amplified.info", + "english_translation": "Notice: Just for fun! Requires a beefy computer." + }, + { + "key": "subtitles.entity.dolphin.attack", + "english_translation": "Dolphin attacks" + }, + { + "key": "block.minecraft.acacia_door", + "english_translation": "Acacia Door" + }, + { + "key": "item.minecraft.shield.orange", + "english_translation": "Orange Shield" + }, + { + "key": "block.minecraft.blue_terracotta", + "english_translation": "Blue Terracotta" + }, + { + "key": "block.minecraft.soul_soil", + "english_translation": "Soul Soil" + }, + { + "key": "block.minecraft.orange_stained_glass_pane", + "english_translation": "Orange Stained Glass Pane" + }, + { + "key": "subtitles.entity.villager.work_leatherworker", + "english_translation": "Leatherworker works" + }, + { + "key": "controls.resetAll", + "english_translation": "Reset Keys" + }, + { + "key": "telemetry.event.advancement_made.title", + "english_translation": "Advancement Made" + }, + { + "key": "telemetry.property.opt_in.title", + "english_translation": "Opt-In" + }, + { + "key": "lanServer.port", + "english_translation": "Port Number" + }, + { + "key": "block.minecraft.banner.square_top_left.cyan", + "english_translation": "Cyan Chief Dexter Canton" + }, + { + "key": "item.minecraft.danger_pottery_sherd", + "english_translation": "Danger Pottery Sherd" + }, + { + "key": "block.minecraft.banner.curly_border.white", + "english_translation": "White Bordure Indented" + }, + { + "key": "entity.minecraft.tropical_fish.type.clayfish", + "english_translation": "Clayfish" + }, + { + "key": "block.minecraft.banner.stripe_right.light_gray", + "english_translation": "Light Gray Pale Sinister" + }, + { + "key": "subtitles.block.portal.trigger", + "english_translation": "Portal noise intensifies" + }, + { + "key": "effect.minecraft.mining_fatigue", + "english_translation": "Mining Fatigue" + }, + { + "key": "demo.day.warning", + "english_translation": "Your time is almost up!" + }, + { + "key": "gui.banned.description.temporary", + "english_translation": "%s Until then, you can’t play online or join Realms." + }, + { + "key": "block.minecraft.banner.stripe_left.yellow", + "english_translation": "Yellow Pale Dexter" + }, + { + "key": "key.keyboard.left.control", + "english_translation": "Left Control" + }, + { + "key": "commands.datapack.disable.failed", + "english_translation": "Pack '%s' is not enabled!" + }, + { + "key": "block.minecraft.piglin_wall_head", + "english_translation": "Piglin Wall Head" + }, + { + "key": "block.minecraft.oxidized_cut_copper_stairs", + "english_translation": "Oxidized Cut Copper Stairs" + }, + { + "key": "item.minecraft.firework_star.shape.star", + "english_translation": "Star-shaped" + }, + { + "key": "block.minecraft.wither_skeleton_skull", + "english_translation": "Wither Skeleton Skull" + }, + { + "key": "item.minecraft.raw_copper", + "english_translation": "Raw Copper" + }, + { + "key": "block.minecraft.mangrove_log", + "english_translation": "Mangrove Log" + }, + { + "key": "death.attack.sting", + "english_translation": "%1$s was stung to death" + }, + { + "key": "item.minecraft.silverfish_spawn_egg", + "english_translation": "Silverfish Spawn Egg" + }, + { + "key": "block.minecraft.mangrove_stairs", + "english_translation": "Mangrove Stairs" + }, + { + "key": "subtitles.entity.creeper.hurt", + "english_translation": "Creeper hurts" + }, + { + "key": "structure_block.load_not_found", + "english_translation": "Structure '%s' is not available" + }, + { + "key": "optimizeWorld.stage.failed", + "english_translation": "Failed! :(" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.purple", + "english_translation": "Purple Per Bend Inverted" + }, + { + "key": "key.keyboard.left.win", + "english_translation": "Left Win" + }, + { + "key": "advancements.adventure.walk_on_powder_snow_with_leather_boots.description", + "english_translation": "Walk on Powder Snow... without sinking in it" + }, + { + "key": "block.minecraft.allium", + "english_translation": "Allium" + }, + { + "key": "multiplayer.unsecureserver.toast", + "english_translation": "Messages sent on this server may be modified and might not reflect the original message" + }, + { + "key": "stat.minecraft.inspect_dispenser", + "english_translation": "Dispensers Searched" + }, + { + "key": "block.minecraft.loom", + "english_translation": "Loom" + }, + { + "key": "selectWorld.experimental.details.title", + "english_translation": "Experimental feature requirements" + }, + { + "key": "telemetry.property.dedicated_memory_kb.title", + "english_translation": "Dedicated Memory (kB)" + }, + { + "key": "particle.notFound", + "english_translation": "Unknown particle: %s" + }, + { + "key": "block.minecraft.banner.border.lime", + "english_translation": "Lime Bordure" + }, + { + "key": "subtitles.entity.creeper.death", + "english_translation": "Creeper dies" + }, + { + "key": "block.minecraft.banner.mojang.magenta", + "english_translation": "Magenta Thing" + }, + { + "key": "selectWorld.gameMode.survival.line1", + "english_translation": "Search for resources, craft, gain" + }, + { + "key": "subtitles.entity.piglin_brute.step", + "english_translation": "Piglin Brute steps" + }, + { + "key": "selectWorld.gameMode.survival.line2", + "english_translation": "levels, health and hunger" + }, + { + "key": "trim_pattern.minecraft.wild", + "english_translation": "Wild Armor Trim" + }, + { + "key": "block.minecraft.spawn.not_valid", + "english_translation": "You have no home bed or charged respawn anchor, or it was obstructed" + }, + { + "key": "advancements.nether.obtain_ancient_debris.description", + "english_translation": "Obtain Ancient Debris" + }, + { + "key": "chat.type.team.sent", + "english_translation": "-> %s <%s> %s" + }, + { + "key": "mco.template.default.name", + "english_translation": "World template" + }, + { + "key": "subtitles.block.bubble_column.upwards_ambient", + "english_translation": "Bubbles flow" + }, + { + "key": "commands.scoreboard.players.list.entity.entry", + "english_translation": "%s: %s" + }, + { + "key": "commands.give.success.single", + "english_translation": "Gave %s %s to %s" + }, + { + "key": "subtitles.entity.generic.big_fall", + "english_translation": "Something fell" + }, + { + "key": "subtitles.entity.bee.sting", + "english_translation": "Bee stings" + }, + { + "key": "commands.data.storage.query", + "english_translation": "Storage %s has the following contents: %s" + }, + { + "key": "gamerule.globalSoundEvents", + "english_translation": "Global sound events" + }, + { + "key": "selectWorld.edit.title", + "english_translation": "Edit World" + }, + { + "key": "block.minecraft.banner.stripe_top.black", + "english_translation": "Black Chief" + }, + { + "key": "death.attack.fallingBlock.player", + "english_translation": "%1$s was squashed by a falling block whilst fighting %2$s" + }, + { + "key": "mco.configure.world.invite.narration", + "english_translation": "You have %s new invite(s)" + }, + { + "key": "spectatorMenu.team_teleport.prompt", + "english_translation": "Select a team to teleport to" + }, + { + "key": "block.minecraft.rose_bush", + "english_translation": "Rose Bush" + }, + { + "key": "block.minecraft.iron_bars", + "english_translation": "Iron Bars" + }, + { + "key": "commands.worldborder.damage.amount.success", + "english_translation": "Set the world border damage to %s per block each second" + }, + { + "key": "block.minecraft.banner.small_stripes.gray", + "english_translation": "Gray Paly" + }, + { + "key": "commands.advancement.grant.one.to.one.success", + "english_translation": "Granted the advancement %s to %s" + }, + { + "key": "mco.backup.entry.seed", + "english_translation": "Seed" + }, + { + "key": "commands.drop.success.single", + "english_translation": "Dropped %s %s" + }, + { + "key": "block.minecraft.banner.diagonal_left.light_gray", + "english_translation": "Light Gray Per Bend Sinister" + }, + { + "key": "options.narrator.system", + "english_translation": "Narrates System" + }, + { + "key": "death.attack.explosion.player.item", + "english_translation": "%1$s was blown up by %2$s using %3$s" + }, + { + "key": "entity.minecraft.tropical_fish.type.brinely", + "english_translation": "Brinely" + }, + { + "key": "item.minecraft.blaze_powder", + "english_translation": "Blaze Powder" + }, + { + "key": "tutorial.bundleInsert.description", + "english_translation": "Right Click to add items" + }, + { + "key": "chat.type.advancement.task", + "english_translation": "%s has made the advancement %s" + }, + { + "key": "disconnect.quitting", + "english_translation": "Quitting" + }, + { + "key": "block.minecraft.quartz_slab", + "english_translation": "Quartz Slab" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.light_blue", + "english_translation": "Light Blue Per Fess Inverted" + }, + { + "key": "effect.minecraft.slow_falling", + "english_translation": "Slow Falling" + }, + { + "key": "subtitles.entity.glow_squid.hurt", + "english_translation": "Glow Squid hurts" + }, + { + "key": "commands.spectate.not_spectator", + "english_translation": "%s is not in spectator mode" + }, + { + "key": "block.minecraft.yellow_candle_cake", + "english_translation": "Cake with Yellow Candle" + }, + { + "key": "commands.perf.reportSaved", + "english_translation": "Created debug report in %s" + }, + { + "key": "advancements.empty", + "english_translation": "There doesn't seem to be anything here..." + }, + { + "key": "block.minecraft.acacia_stairs", + "english_translation": "Acacia Stairs" + }, + { + "key": "block.minecraft.dark_oak_sign", + "english_translation": "Dark Oak Sign" + }, + { + "key": "block.minecraft.jack_o_lantern", + "english_translation": "Jack o'Lantern" + }, + { + "key": "block.minecraft.banner.square_bottom_right.magenta", + "english_translation": "Magenta Base Sinister Canton" + }, + { + "key": "block.minecraft.lime_wool", + "english_translation": "Lime Wool" + }, + { + "key": "item.minecraft.shield.light_gray", + "english_translation": "Light Gray Shield" + }, + { + "key": "item.minecraft.wooden_shovel", + "english_translation": "Wooden Shovel" + }, + { + "key": "key.keyboard.end", + "english_translation": "End" + }, + { + "key": "block.minecraft.deepslate_brick_wall", + "english_translation": "Deepslate Brick Wall" + }, + { + "key": "item.minecraft.green_dye", + "english_translation": "Green Dye" + }, + { + "key": "block.minecraft.banner.border.blue", + "english_translation": "Blue Bordure" + }, + { + "key": "block.minecraft.crimson_planks", + "english_translation": "Crimson Planks" + }, + { + "key": "block.minecraft.sandstone_wall", + "english_translation": "Sandstone Wall" + }, + { + "key": "item.minecraft.potion.effect.strength", + "english_translation": "Potion of Strength" + }, + { + "key": "subtitles.entity.parrot.imitate.shulker", + "english_translation": "Parrot lurks" + }, + { + "key": "block.minecraft.carved_pumpkin", + "english_translation": "Carved Pumpkin" + }, + { + "key": "commands.datapack.modify.enable", + "english_translation": "Enabling data pack %s" + }, + { + "key": "block.minecraft.banner.stripe_downright.red", + "english_translation": "Red Bend" + }, + { + "key": "item.minecraft.shield.white", + "english_translation": "White Shield" + }, + { + "key": "block.minecraft.potted_acacia_sapling", + "english_translation": "Potted Acacia Sapling" + }, + { + "key": "commands.stopsound.success.sourceless.any", + "english_translation": "Stopped all sounds" + }, + { + "key": "block.minecraft.weathered_cut_copper_stairs", + "english_translation": "Weathered Cut Copper Stairs" + }, + { + "key": "block.minecraft.nether_brick_stairs", + "english_translation": "Nether Brick Stairs" + }, + { + "key": "argument.entity.selector.unknown", + "english_translation": "Unknown selector type '%s'" + }, + { + "key": "advancements.story.obtain_armor.description", + "english_translation": "Protect yourself with a piece of iron armor" + }, + { + "key": "commands.experience.set.points.invalid", + "english_translation": "Cannot set experience points above the maximum points for the player's current level" + }, + { + "key": "entity.minecraft.pig", + "english_translation": "Pig" + }, + { + "key": "commands.advancement.criterionNotFound", + "english_translation": "The advancement %1$s does not contain the criterion '%2$s'" + }, + { + "key": "mco.configure.worlds.title", + "english_translation": "Worlds" + }, + { + "key": "dataPack.validation.reset", + "english_translation": "Reset to Default" + }, + { + "key": "commands.stopsound.success.source.any", + "english_translation": "Stopped all '%s' sounds" + }, + { + "key": "block.minecraft.banner.stripe_bottom.lime", + "english_translation": "Lime Base" + }, + { + "key": "block.minecraft.banner.square_top_right.brown", + "english_translation": "Brown Chief Sinister Canton" + }, + { + "key": "commands.teleport.success.entity.multiple", + "english_translation": "Teleported %s entities to %s" + }, + { + "key": "entity.minecraft.falling_block", + "english_translation": "Falling Block" + }, + { + "key": "item.minecraft.debug_stick.empty", + "english_translation": "%s has no properties" + }, + { + "key": "subtitles.entity.donkey.chest", + "english_translation": "Donkey Chest equips" + }, + { + "key": "entity.minecraft.villager", + "english_translation": "Villager" + }, + { + "key": "advancements.husbandry.wax_off.title", + "english_translation": "Wax Off" + }, + { + "key": "item.minecraft.firework_star.shape.burst", + "english_translation": "Burst" + }, + { + "key": "gui.chatSelection.message.narrate", + "english_translation": "%s said: %s at %s" + }, + { + "key": "block.minecraft.banner.flower.pink", + "english_translation": "Pink Flower Charge" + }, + { + "key": "item.minecraft.axolotl_spawn_egg", + "english_translation": "Axolotl Spawn Egg" + }, + { + "key": "gamerule.lavaSourceConversion.description", + "english_translation": "When flowing lava is surrounded on two sides by lava sources it converts into a source." + }, + { + "key": "subtitles.block.composter.ready", + "english_translation": "Composter composts" + }, + { + "key": "subtitles.entity.warden.hurt", + "english_translation": "Warden hurts" + }, + { + "key": "biome.minecraft.sunflower_plains", + "english_translation": "Sunflower Plains" + }, + { + "key": "chat.type.text", + "english_translation": "<%s> %s" + }, + { + "key": "menu.returnToGame", + "english_translation": "Back to Game" + }, + { + "key": "commands.attribute.base_value.get.success", + "english_translation": "Base value of attribute %s for entity %s is %s" + }, + { + "key": "item.minecraft.compass", + "english_translation": "Compass" + }, + { + "key": "mco.reset.world.upload", + "english_translation": "Upload world" + }, + { + "key": "subtitles.entity.zombie_villager.converted", + "english_translation": "Zombie Villager vociferates" + }, + { + "key": "key.keyboard.home", + "english_translation": "Home" + }, + { + "key": "painting.minecraft.plant.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "connect.encrypting", + "english_translation": "Encrypting..." + }, + { + "key": "options.invertMouse", + "english_translation": "Invert Mouse" + }, + { + "key": "gui.chatReport.draft.edit", + "english_translation": "Continue Editing" + }, + { + "key": "block.minecraft.redstone_block", + "english_translation": "Block of Redstone" + }, + { + "key": "item.minecraft.melon_slice", + "english_translation": "Melon Slice" + }, + { + "key": "block.minecraft.acacia_hanging_sign", + "english_translation": "Acacia Hanging Sign" + }, + { + "key": "block.minecraft.zombie_wall_head", + "english_translation": "Zombie Wall Head" + }, + { + "key": "stat.minecraft.fill_cauldron", + "english_translation": "Cauldrons Filled" + }, + { + "key": "block.minecraft.polished_deepslate_stairs", + "english_translation": "Polished Deepslate Stairs" + }, + { + "key": "tutorial.look.description", + "english_translation": "Use your mouse to turn" + }, + { + "key": "container.shulkerBox.more", + "english_translation": "and %s more..." + }, + { + "key": "debug.profiling.help", + "english_translation": "F3 + L = Start/stop profiling" + }, + { + "key": "item.minecraft.paper", + "english_translation": "Paper" + }, + { + "key": "entity.minecraft.villager.cartographer", + "english_translation": "Cartographer" + }, + { + "key": "block.minecraft.smooth_stone", + "english_translation": "Smooth Stone" + }, + { + "key": "argument.entity.options.name.description", + "english_translation": "Entity name" + }, + { + "key": "subtitles.entity.vindicator.celebrate", + "english_translation": "Vindicator cheers" + }, + { + "key": "item.minecraft.brush", + "english_translation": "Brush" + }, + { + "key": "block.minecraft.banner.stripe_bottom.blue", + "english_translation": "Blue Base" + }, + { + "key": "subtitles.entity.llama.death", + "english_translation": "Llama dies" + }, + { + "key": "item.minecraft.globe_banner_pattern.desc", + "english_translation": "Globe" + }, + { + "key": "language.region", + "english_translation": "United States" + }, + { + "key": "narration.cycle_button.usage.focused", + "english_translation": "Press Enter to switch to %s" + }, + { + "key": "subtitles.entity.wandering_trader.ambient", + "english_translation": "Wandering Trader mumbles" + }, + { + "key": "block.minecraft.banner.straight_cross.lime", + "english_translation": "Lime Cross" + }, + { + "key": "stat.minecraft.play_record", + "english_translation": "Music Discs Played" + }, + { + "key": "effect.minecraft.poison", + "english_translation": "Poison" + }, + { + "key": "block.minecraft.crimson_stem", + "english_translation": "Crimson Stem" + }, + { + "key": "advancements.husbandry.plant_any_sniffer_seed.title", + "english_translation": "Planting the Past" + }, + { + "key": "selectWorld.search", + "english_translation": "search for worlds" + }, + { + "key": "block.minecraft.banner.bricks.brown", + "english_translation": "Brown Field Masoned" + }, + { + "key": "realms.missing.module.error.text", + "english_translation": "Realms could not be opened right now, please try again later" + }, + { + "key": "block.minecraft.mangrove_wall_sign", + "english_translation": "Mangrove Wall Sign" + }, + { + "key": "item.minecraft.netherite_shovel", + "english_translation": "Netherite Shovel" + }, + { + "key": "stat.minecraft.swim_one_cm", + "english_translation": "Distance Swum" + }, + { + "key": "narrator.toast.enabled", + "english_translation": "Narrator Enabled" + }, + { + "key": "item.minecraft.piglin_spawn_egg", + "english_translation": "Piglin Spawn Egg" + }, + { + "key": "options.modelPart.jacket", + "english_translation": "Jacket" + }, + { + "key": "argument.block.id.invalid", + "english_translation": "Unknown block type '%s'" + }, + { + "key": "block.minecraft.crafting_table", + "english_translation": "Crafting Table" + }, + { + "key": "block.minecraft.red_glazed_terracotta", + "english_translation": "Red Glazed Terracotta" + }, + { + "key": "block.minecraft.banner.globe.pink", + "english_translation": "Pink Globe" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.white", + "english_translation": "White Per Bend Inverted" + }, + { + "key": "selectWorld.tooltip.snapshot1", + "english_translation": "Don't forget to back up this world" + }, + { + "key": "selectWorld.tooltip.snapshot2", + "english_translation": "before you load it in this snapshot." + }, + { + "key": "block.minecraft.coal_ore", + "english_translation": "Coal Ore" + }, + { + "key": "argument.pos.outofworld", + "english_translation": "That position is out of this world!" + }, + { + "key": "item.minecraft.sheaf_pottery_sherd", + "english_translation": "Sheaf Pottery Sherd" + }, + { + "key": "block.minecraft.end_stone_brick_slab", + "english_translation": "End Stone Brick Slab" + }, + { + "key": "item.minecraft.iron_chestplate", + "english_translation": "Iron Chestplate" + }, + { + "key": "key.keyboard.escape", + "english_translation": "Escape" + }, + { + "key": "commands.team.option.seeFriendlyInvisibles.disabled", + "english_translation": "Team %s can no longer see invisible teammates" + }, + { + "key": "stat.minecraft.damage_resisted", + "english_translation": "Damage Resisted" + }, + { + "key": "subtitles.entity.drowned.step", + "english_translation": "Drowned steps" + }, + { + "key": "painting.minecraft.courbet.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "argument.time.tick_count_too_low", + "english_translation": "Tick count must not be less than %s, found %s" + }, + { + "key": "commands.experience.set.points.success.multiple", + "english_translation": "Set %s experience points on %s players" + }, + { + "key": "block.minecraft.cherry_fence_gate", + "english_translation": "Cherry Fence Gate" + }, + { + "key": "block.minecraft.exposed_cut_copper_stairs", + "english_translation": "Exposed Cut Copper Stairs" + }, + { + "key": "subtitles.item.brush.brushing.gravel", + "english_translation": "Brushing Gravel" + }, + { + "key": "mco.brokenworld.nonowner.error", + "english_translation": "Please wait for the realm owner to reset the world" + }, + { + "key": "entity.minecraft.tropical_fish.type.glitter", + "english_translation": "Glitter" + }, + { + "key": "item.minecraft.vindicator_spawn_egg", + "english_translation": "Vindicator Spawn Egg" + }, + { + "key": "mco.configure.world.edit.slot.name", + "english_translation": "World name" + }, + { + "key": "block.minecraft.blast_furnace", + "english_translation": "Blast Furnace" + }, + { + "key": "subtitles.item.totem.use", + "english_translation": "Totem activates" + }, + { + "key": "block.minecraft.black_candle_cake", + "english_translation": "Cake with Black Candle" + }, + { + "key": "options.directionalAudio.off.tooltip", + "english_translation": "Classic Stereo sound" + }, + { + "key": "block.minecraft.attached_melon_stem", + "english_translation": "Attached Melon Stem" + }, + { + "key": "block.minecraft.banner.mojang.white", + "english_translation": "White Thing" + }, + { + "key": "block.minecraft.banner.straight_cross.blue", + "english_translation": "Blue Cross" + }, + { + "key": "block.minecraft.banner.stripe_downright.pink", + "english_translation": "Pink Bend" + }, + { + "key": "mco.configure.world.uninvite.player", + "english_translation": "Are you sure that you want to uninvite '%s'?" + }, + { + "key": "subtitles.entity.generic.small_fall", + "english_translation": "Something trips" + }, + { + "key": "mco.errorMessage.serviceBusy", + "english_translation": "Realms is busy at the moment.\nPlease try connecting to your Realm again in a couple of minutes." + }, + { + "key": "subtitles.entity.warden.agitated", + "english_translation": "Warden groans angrily" + }, + { + "key": "command.failed", + "english_translation": "An unexpected error occurred trying to execute that command" + }, + { + "key": "block.minecraft.lime_bed", + "english_translation": "Lime Bed" + }, + { + "key": "block.minecraft.banner.diagonal_left.brown", + "english_translation": "Brown Per Bend Sinister" + }, + { + "key": "mco.configure.world.pvp", + "english_translation": "PVP" + }, + { + "key": "block.minecraft.spruce_fence_gate", + "english_translation": "Spruce Fence Gate" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.red", + "english_translation": "Red Per Bend Sinister Inverted" + }, + { + "key": "subtitles.entity.polar_bear.death", + "english_translation": "Polar Bear dies" + }, + { + "key": "advancements.husbandry.kill_axolotl_target.title", + "english_translation": "The Healing Power of Friendship!" + }, + { + "key": "entity.minecraft.elder_guardian", + "english_translation": "Elder Guardian" + }, + { + "key": "generator.minecraft.normal", + "english_translation": "Default" + }, + { + "key": "advancements.husbandry.axolotl_in_a_bucket.title", + "english_translation": "The Cutest Predator" + }, + { + "key": "advancements.nether.loot_bastion.description", + "english_translation": "Loot a Chest in a Bastion Remnant" + }, + { + "key": "structure_block.load_success", + "english_translation": "Structure loaded from '%s'" + }, + { + "key": "advancements.husbandry.tame_an_animal.description", + "english_translation": "Tame an animal" + }, + { + "key": "item.minecraft.horse_spawn_egg", + "english_translation": "Horse Spawn Egg" + }, + { + "key": "item.minecraft.zombie_spawn_egg", + "english_translation": "Zombie Spawn Egg" + }, + { + "key": "generator.minecraft.large_biomes", + "english_translation": "Large Biomes" + }, + { + "key": "stat.minecraft.interact_with_brewingstand", + "english_translation": "Interactions with Brewing Stand" + }, + { + "key": "block.minecraft.banner.rhombus.light_gray", + "english_translation": "Light Gray Lozenge" + }, + { + "key": "multiplayer.player.joined", + "english_translation": "%s joined the game" + }, + { + "key": "subtitles.entity.mule.ambient", + "english_translation": "Mule hee-haws" + }, + { + "key": "subtitles.entity.parrot.imitate.zombie", + "english_translation": "Parrot groans" + }, + { + "key": "options.controls", + "english_translation": "Controls..." + }, + { + "key": "entity.minecraft.tropical_fish.type.flopper", + "english_translation": "Flopper" + }, + { + "key": "effect.minecraft.wither", + "english_translation": "Wither" + }, + { + "key": "block.minecraft.banner.diagonal_left.pink", + "english_translation": "Pink Per Bend Sinister" + }, + { + "key": "stat.minecraft.clean_armor", + "english_translation": "Armor Pieces Cleaned" + }, + { + "key": "subtitles.entity.donkey.eat", + "english_translation": "Donkey eats" + }, + { + "key": "subtitles.entity.parrot.imitate.ender_dragon", + "english_translation": "Parrot roars" + }, + { + "key": "block.minecraft.jungle_pressure_plate", + "english_translation": "Jungle Pressure Plate" + }, + { + "key": "block.minecraft.banner.triangle_top.black", + "english_translation": "Black Inverted Chevron" + }, + { + "key": "effect.minecraft.blindness", + "english_translation": "Blindness" + }, + { + "key": "commands.team.option.color.success", + "english_translation": "Updated the color for team %s to %s" + }, + { + "key": "block.minecraft.pink_shulker_box", + "english_translation": "Pink Shulker Box" + }, + { + "key": "subtitles.entity.strider.death", + "english_translation": "Strider dies" + }, + { + "key": "options.operatorItemsTab", + "english_translation": "Operator Items Tab" + }, + { + "key": "block.minecraft.waxed_exposed_cut_copper", + "english_translation": "Waxed Exposed Cut Copper" + }, + { + "key": "item.minecraft.bat_spawn_egg", + "english_translation": "Bat Spawn Egg" + }, + { + "key": "commands.datapack.modify.disable", + "english_translation": "Disabling data pack %s" + }, + { + "key": "item.minecraft.trident", + "english_translation": "Trident" + }, + { + "key": "block.minecraft.acacia_sapling", + "english_translation": "Acacia Sapling" + }, + { + "key": "block.minecraft.dragon_head", + "english_translation": "Dragon Head" + }, + { + "key": "subtitles.block.beehive.work", + "english_translation": "Bees work" + }, + { + "key": "commands.message.display.incoming", + "english_translation": "%s whispers to you: %s" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.black", + "english_translation": "Black Per Bend Inverted" + }, + { + "key": "block.minecraft.banner.stripe_right.lime", + "english_translation": "Lime Pale Sinister" + }, + { + "key": "block.minecraft.spruce_leaves", + "english_translation": "Spruce Leaves" + }, + { + "key": "gui.socialInteractions.narration.hide", + "english_translation": "Hide messages from %s" + }, + { + "key": "death.attack.drown.player", + "english_translation": "%1$s drowned whilst trying to escape %2$s" + }, + { + "key": "commands.data.modify.expected_value", + "english_translation": "Expected value, got: %s" + }, + { + "key": "death.attack.sweetBerryBush", + "english_translation": "%1$s was poked to death by a sweet berry bush" + }, + { + "key": "mco.invites.pending", + "english_translation": "New invite(s)!" + }, + { + "key": "telemetry_info.property_title", + "english_translation": "Included Data" + }, + { + "key": "mco.minigame.world.switch.new", + "english_translation": "Select another minigame?" + }, + { + "key": "commands.team.option.deathMessageVisibility.unchanged", + "english_translation": "Nothing changed. Death message visibility is already that value" + }, + { + "key": "gui.abuseReport.reason.hate_speech.description", + "english_translation": "Someone is attacking you or another player based on characteristics of their identity, like religion, race, or sexuality." + }, + { + "key": "block.minecraft.banner.square_top_left.yellow", + "english_translation": "Yellow Chief Dexter Canton" + }, + { + "key": "block.minecraft.stripped_cherry_wood", + "english_translation": "Stripped Cherry Wood" + }, + { + "key": "item.minecraft.splash_potion.effect.regeneration", + "english_translation": "Splash Potion of Regeneration" + }, + { + "key": "block.minecraft.banner.mojang.black", + "english_translation": "Black Thing" + }, + { + "key": "subtitles.entity.llama.hurt", + "english_translation": "Llama hurts" + }, + { + "key": "fabric.gui.creativeTabPage", + "english_translation": "Page %s/%s" + }, + { + "key": "block.minecraft.banner.rhombus.gray", + "english_translation": "Gray Lozenge" + }, + { + "key": "advancements.end.root.title", + "english_translation": "The End" + }, + { + "key": "block.minecraft.purple_candle", + "english_translation": "Purple Candle" + }, + { + "key": "subtitles.entity.fishing_bobber.throw", + "english_translation": "Bobber thrown" + }, + { + "key": "narrator.screen.usage", + "english_translation": "Use mouse cursor or Tab button to select element" + }, + { + "key": "subtitles.entity.shulker.death", + "english_translation": "Shulker dies" + }, + { + "key": "argument.entity.options.distance.description", + "english_translation": "Distance to entity" + }, + { + "key": "item.minecraft.recovery_compass", + "english_translation": "Recovery Compass" + }, + { + "key": "options.graphics.fabulous.tooltip", + "english_translation": "%s graphics uses screen shaders for drawing weather, clouds, and particles behind translucent blocks and water.\nThis may severely impact performance for portable devices and 4K displays." + }, + { + "key": "subtitles.entity.fox.sleep", + "english_translation": "Fox snores" + }, + { + "key": "narrator.button.accessibility", + "english_translation": "Accessibility" + }, + { + "key": "block.minecraft.banner.half_vertical_right.lime", + "english_translation": "Lime Per Pale Inverted" + }, + { + "key": "options.onlyShowSecureChat", + "english_translation": "Only Show Secure Chat" + }, + { + "key": "block.minecraft.banner.border.light_blue", + "english_translation": "Light Blue Bordure" + }, + { + "key": "block.minecraft.banner.stripe_top.orange", + "english_translation": "Orange Chief" + }, + { + "key": "options.accessibility.text_background_opacity", + "english_translation": "Text Background Opacity" + }, + { + "key": "spectatorMenu.team_teleport", + "english_translation": "Teleport to Team Member" + }, + { + "key": "subtitles.entity.frog.lay_spawn", + "english_translation": "Frog lays spawn" + }, + { + "key": "createWorld.customize.custom.dungeonChance", + "english_translation": "Dungeon Count" + }, + { + "key": "mco.configure.world.spawn_toggle.message", + "english_translation": "Turning this option off will REMOVE ALL existing entities of that type" + }, + { + "key": "entity.minecraft.pillager", + "english_translation": "Pillager" + }, + { + "key": "gui.banned.reason.sexually_inappropriate", + "english_translation": "Topics or content of a sexual nature" + }, + { + "key": "block.minecraft.bed.obstructed", + "english_translation": "This bed is obstructed" + }, + { + "key": "subtitles.entity.polar_bear.hurt", + "english_translation": "Polar Bear hurts" + }, + { + "key": "advancements.adventure.bullseye.title", + "english_translation": "Bullseye" + }, + { + "key": "gui.chatReport.send", + "english_translation": "Send Report" + }, + { + "key": "block.minecraft.pink_candle_cake", + "english_translation": "Cake with Pink Candle" + }, + { + "key": "key.categories.misc", + "english_translation": "Miscellaneous" + }, + { + "key": "tutorial.open_inventory.title", + "english_translation": "Open your inventory" + }, + { + "key": "mco.backup.entry.description", + "english_translation": "Description" + }, + { + "key": "subtitles.block.trapdoor.toggle", + "english_translation": "Trapdoor creaks" + }, + { + "key": "mco.configure.world.slot.switch.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "mco.configure.world.slot.switch.question.line1", + "english_translation": "Your realm will be switched to another world" + }, + { + "key": "block.minecraft.banner.stripe_right.blue", + "english_translation": "Blue Pale Sinister" + }, + { + "key": "block.minecraft.cherry_slab", + "english_translation": "Cherry Slab" + }, + { + "key": "disconnect.exceeded_packet_rate", + "english_translation": "Kicked for exceeding packet rate limit" + }, + { + "key": "gamerule.mobExplosionDropDecay", + "english_translation": "In mob explosions, some blocks won't drop their loot" + }, + { + "key": "advancements.adventure.spyglass_at_ghast.description", + "english_translation": "Look at a Ghast through a Spyglass" + }, + { + "key": "advancement.advancementNotFound", + "english_translation": "Unknown advancement: %s" + }, + { + "key": "subtitles.entity.rabbit.jump", + "english_translation": "Rabbit hops" + }, + { + "key": "mco.template.button.trailer", + "english_translation": "Trailer" + }, + { + "key": "block.minecraft.light_blue_banner", + "english_translation": "Light Blue Banner" + }, + { + "key": "parsing.bool.expected", + "english_translation": "Expected boolean" + }, + { + "key": "block.minecraft.banner.square_bottom_left.lime", + "english_translation": "Lime Base Dexter Canton" + }, + { + "key": "gui.chatReport.describe", + "english_translation": "Sharing details will help us make a well-informed decision." + }, + { + "key": "createWorld.customize.presets", + "english_translation": "Presets" + }, + { + "key": "flat_world_preset.minecraft.redstone_ready", + "english_translation": "Redstone Ready" + }, + { + "key": "block.minecraft.cauldron", + "english_translation": "Cauldron" + }, + { + "key": "container.upgrade", + "english_translation": "Upgrade Gear" + }, + { + "key": "multiplayer.status.finished", + "english_translation": "Finished" + }, + { + "key": "subtitles.entity.parrot.imitate.magma_cube", + "english_translation": "Parrot squishes" + }, + { + "key": "block.minecraft.nether_brick_fence", + "english_translation": "Nether Brick Fence" + }, + { + "key": "commands.forceload.list.multiple", + "english_translation": "%s force loaded chunks were found in %s at: %s" + }, + { + "key": "flat_world_preset.minecraft.the_void", + "english_translation": "The Void" + }, + { + "key": "block.minecraft.banner.globe.orange", + "english_translation": "Orange Globe" + }, + { + "key": "block.minecraft.banner.skull.lime", + "english_translation": "Lime Skull Charge" + }, + { + "key": "soundCategory.player", + "english_translation": "Players" + }, + { + "key": "stat_type.minecraft.mined", + "english_translation": "Times Mined" + }, + { + "key": "subtitles.entity.goat.horn_break", + "english_translation": "Goat Horn breaks off" + }, + { + "key": "argument.entity.options.dx.description", + "english_translation": "Entities between x and x + dx" + }, + { + "key": "item_modifier.unknown", + "english_translation": "Unknown item modifier: %s" + }, + { + "key": "block.minecraft.banner.globe.light_blue", + "english_translation": "Light Blue Globe" + }, + { + "key": "item.minecraft.heartbreak_pottery_sherd", + "english_translation": "Heartbreak Pottery Sherd" + }, + { + "key": "gui.socialInteractions.status_hidden_offline", + "english_translation": "Hidden - Offline" + }, + { + "key": "item.minecraft.splash_potion.effect.night_vision", + "english_translation": "Splash Potion of Night Vision" + }, + { + "key": "block.minecraft.wither_skeleton_wall_skull", + "english_translation": "Wither Skeleton Wall Skull" + }, + { + "key": "item.minecraft.cooked_beef", + "english_translation": "Steak" + }, + { + "key": "block.minecraft.banner.half_vertical_right.blue", + "english_translation": "Blue Per Pale Inverted" + }, + { + "key": "item.minecraft.magma_cube_spawn_egg", + "english_translation": "Magma Cube Spawn Egg" + }, + { + "key": "advancements.husbandry.kill_axolotl_target.description", + "english_translation": "Team up with an Axolotl and win a fight" + }, + { + "key": "painting.minecraft.donkey_kong.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "subtitles.chiseled_bookshelf.insert_enchanted", + "english_translation": "Enchanted Book placed" + }, + { + "key": "commands.advancement.revoke.one.to.one.failure", + "english_translation": "Couldn't revoke advancement %s from %s as they don't have it" + }, + { + "key": "container.repair.expensive", + "english_translation": "Too Expensive!" + }, + { + "key": "optimizeWorld.stage.counting", + "english_translation": "Counting chunks..." + }, + { + "key": "mco.minigame.world.title", + "english_translation": "Switch realm to minigame" + }, + { + "key": "container.inventory", + "english_translation": "Inventory" + }, + { + "key": "trim_pattern.minecraft.snout", + "english_translation": "Snout Armor Trim" + }, + { + "key": "arguments.nbtpath.too_deep", + "english_translation": "Resulting NBT too deeply nested" + }, + { + "key": "block.minecraft.magenta_stained_glass", + "english_translation": "Magenta Stained Glass" + }, + { + "key": "block.minecraft.weathered_cut_copper", + "english_translation": "Weathered Cut Copper" + }, + { + "key": "mco.account.privacyinfo", + "english_translation": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children’s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.\n\nIf you have an older Minecraft account (you log in with your username), you need to migrate the account to a Mojang account in order to access Realms." + }, + { + "key": "options.pixel_value", + "english_translation": "%s: %spx" + }, + { + "key": "item.minecraft.splash_potion.effect.water_breathing", + "english_translation": "Splash Potion of Water Breathing" + }, + { + "key": "mco.create.world.error", + "english_translation": "You must enter a name!" + }, + { + "key": "gui.socialInteractions.tab_all", + "english_translation": "All" + }, + { + "key": "death.attack.freeze", + "english_translation": "%1$s froze to death" + }, + { + "key": "argument.integer.low", + "english_translation": "Integer must not be less than %s, found %s" + }, + { + "key": "block.minecraft.banner.stripe_bottom.purple", + "english_translation": "Purple Base" + }, + { + "key": "resourcePack.broken_assets", + "english_translation": "BROKEN ASSETS DETECTED" + }, + { + "key": "subtitles.entity.pig.hurt", + "english_translation": "Pig hurts" + }, + { + "key": "block.minecraft.banner.square_bottom_left.blue", + "english_translation": "Blue Base Dexter Canton" + }, + { + "key": "item.minecraft.potion.effect.awkward", + "english_translation": "Awkward Potion" + }, + { + "key": "block.minecraft.banner.stripe_top.light_gray", + "english_translation": "Light Gray Chief" + }, + { + "key": "block.minecraft.white_banner", + "english_translation": "White Banner" + }, + { + "key": "entity.minecraft.rabbit", + "english_translation": "Rabbit" + }, + { + "key": "block.minecraft.large_fern", + "english_translation": "Large Fern" + }, + { + "key": "options.reducedDebugInfo", + "english_translation": "Reduced Debug Info" + }, + { + "key": "arguments.objective.notFound", + "english_translation": "Unknown scoreboard objective '%s'" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.green", + "english_translation": "Green Per Bend Inverted" + }, + { + "key": "multiplayer.status.unrequested", + "english_translation": "Received unrequested status" + }, + { + "key": "block.minecraft.banner.triangles_top.brown", + "english_translation": "Brown Chief Indented" + }, + { + "key": "advancements.story.iron_tools.title", + "english_translation": "Isn't It Iron Pick" + }, + { + "key": "menu.generatingLevel", + "english_translation": "Generating world" + }, + { + "key": "block.minecraft.banner.square_bottom_left.purple", + "english_translation": "Purple Base Dexter Canton" + }, + { + "key": "block.minecraft.dirt_path", + "english_translation": "Dirt Path" + }, + { + "key": "subtitles.entity.generic.hurt", + "english_translation": "Something hurts" + }, + { + "key": "entity.minecraft.villager.none", + "english_translation": "Villager" + }, + { + "key": "narrator.position.tab", + "english_translation": "Selected tab %s out of %s" + }, + { + "key": "subtitles.item.goat_horn.play", + "english_translation": "Goat Horn plays" + }, + { + "key": "commands.scoreboard.players.enable.success.single", + "english_translation": "Enabled trigger %s for %s" + }, + { + "key": "subtitles.entity.villager.work_cleric", + "english_translation": "Cleric works" + }, + { + "key": "advancements.husbandry.silk_touch_nest.title", + "english_translation": "Total Beelocation" + }, + { + "key": "gui.banned.reason.false_reporting", + "english_translation": "Excessive false or inaccurate reports" + }, + { + "key": "block.minecraft.coarse_dirt", + "english_translation": "Coarse Dirt" + }, + { + "key": "item.minecraft.crossbow", + "english_translation": "Crossbow" + }, + { + "key": "selectServer.select", + "english_translation": "Join Server" + }, + { + "key": "block.minecraft.banner.stripe_top.cyan", + "english_translation": "Cyan Chief" + }, + { + "key": "death.attack.player.item", + "english_translation": "%1$s was slain by %2$s using %3$s" + }, + { + "key": "commands.execute.conditional.fail", + "english_translation": "Test failed" + }, + { + "key": "subtitles.entity.wither_skeleton.hurt", + "english_translation": "Wither Skeleton hurts" + }, + { + "key": "inventory.binSlot", + "english_translation": "Destroy Item" + }, + { + "key": "mco.configure.world.spawnProtection", + "english_translation": "Spawn protection" + }, + { + "key": "gui.recipebook.moreRecipes", + "english_translation": "Right Click for More" + }, + { + "key": "commands.locate.poi.success", + "english_translation": "The nearest %s is at %s (%s blocks away)" + }, + { + "key": "item.minecraft.globe_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "item.minecraft.splash_potion.effect.levitation", + "english_translation": "Splash Potion of Levitation" + }, + { + "key": "gui.socialInteractions.narration.report", + "english_translation": "Report player %s" + }, + { + "key": "commands.advancement.revoke.many.to.one.failure", + "english_translation": "Couldn't revoke %s advancements from %s as they don't have them" + }, + { + "key": "chat.link.warning", + "english_translation": "Never open links from people that you don't trust!" + }, + { + "key": "subtitles.entity.allay.hurt", + "english_translation": "Allay hurts" + }, + { + "key": "item.minecraft.music_disc_chirp", + "english_translation": "Music Disc" + }, + { + "key": "item.minecraft.howl_pottery_sherd", + "english_translation": "Howl Pottery Sherd" + }, + { + "key": "block.minecraft.lapis_ore", + "english_translation": "Lapis Lazuli Ore" + }, + { + "key": "subtitles.entity.fishing_bobber.splash", + "english_translation": "Fishing Bobber splashes" + }, + { + "key": "block.minecraft.bamboo_stairs", + "english_translation": "Bamboo Stairs" + }, + { + "key": "block.minecraft.banner.base.yellow", + "english_translation": "Fully Yellow Field" + }, + { + "key": "item.minecraft.stray_spawn_egg", + "english_translation": "Stray Spawn Egg" + }, + { + "key": "block.minecraft.banner.base.pink", + "english_translation": "Fully Pink Field" + }, + { + "key": "commands.debug.function.success.multiple", + "english_translation": "Traced %s command(s) from %s functions to output file %s" + }, + { + "key": "mco.configure.world.invited.number", + "english_translation": "Invited (%s)" + }, + { + "key": "item.minecraft.splash_potion.effect.thick", + "english_translation": "Thick Splash Potion" + }, + { + "key": "item.minecraft.cooked_cod", + "english_translation": "Cooked Cod" + }, + { + "key": "clear.failed.single", + "english_translation": "No items were found on player %s" + }, + { + "key": "gui.socialInteractions.tooltip.report", + "english_translation": "Report player" + }, + { + "key": "block.minecraft.observer", + "english_translation": "Observer" + }, + { + "key": "block.minecraft.banner.stripe_bottom.cyan", + "english_translation": "Cyan Base" + }, + { + "key": "block.minecraft.banner.creeper.purple", + "english_translation": "Purple Creeper Charge" + }, + { + "key": "subtitles.entity.silverfish.ambient", + "english_translation": "Silverfish hisses" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.brown", + "english_translation": "Brown Per Fess Inverted" + }, + { + "key": "commands.team.option.friendlyfire.alreadyDisabled", + "english_translation": "Nothing changed. Friendly fire is already disabled for that team" + }, + { + "key": "item.minecraft.firework_star.shape.large_ball", + "english_translation": "Large Ball" + }, + { + "key": "item.minecraft.heart_pottery_sherd", + "english_translation": "Heart Pottery Sherd" + }, + { + "key": "telemetry.property.server_type.title", + "english_translation": "Server Type" + }, + { + "key": "block.minecraft.prismarine_brick_slab", + "english_translation": "Prismarine Brick Slab" + }, + { + "key": "death.fell.accident.twisting_vines", + "english_translation": "%1$s fell off some twisting vines" + }, + { + "key": "block.minecraft.jungle_trapdoor", + "english_translation": "Jungle Trapdoor" + }, + { + "key": "connect.aborted", + "english_translation": "Aborted" + }, + { + "key": "block.minecraft.banner.triangles_top.lime", + "english_translation": "Lime Chief Indented" + }, + { + "key": "commands.team.list.teams.success", + "english_translation": "There are %s team(s): %s" + }, + { + "key": "gui.abuseReport.reason.narration", + "english_translation": "%s: %s" + }, + { + "key": "options.narrator.all", + "english_translation": "Narrates All" + }, + { + "key": "subtitles.entity.donkey.angry", + "english_translation": "Donkey neighs" + }, + { + "key": "multiplayer.status.cannot_resolve", + "english_translation": "Can't resolve hostname" + }, + { + "key": "attribute.name.generic.movement_speed", + "english_translation": "Speed" + }, + { + "key": "narrator.position.list", + "english_translation": "Selected list row %s out of %s" + }, + { + "key": "commands.item.target.no_such_slot", + "english_translation": "The target does not have slot %s" + }, + { + "key": "gui.abuseReport.reason.title", + "english_translation": "Select Report Category" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.magenta", + "english_translation": "Magenta Per Bend Inverted" + }, + { + "key": "block.minecraft.banner.square_top_right.light_gray", + "english_translation": "Light Gray Chief Sinister Canton" + }, + { + "key": "block.minecraft.dead_brain_coral_fan", + "english_translation": "Dead Brain Coral Fan" + }, + { + "key": "block.minecraft.banner.flower.white", + "english_translation": "White Flower Charge" + }, + { + "key": "stat.minecraft.sneak_time", + "english_translation": "Sneak Time" + }, + { + "key": "argument.nbt.trailing", + "english_translation": "Unexpected trailing data" + }, + { + "key": "mco.selectServer.note", + "english_translation": "Note:" + }, + { + "key": "options.fov.min", + "english_translation": "Normal" + }, + { + "key": "mco.minigame.world.restore.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "subtitles.entity.zombie.destroy_egg", + "english_translation": "Turtle Egg stomped" + }, + { + "key": "biome.minecraft.lukewarm_ocean", + "english_translation": "Lukewarm Ocean" + }, + { + "key": "entity.minecraft.wither_skull", + "english_translation": "Wither Skull" + }, + { + "key": "mco.minigame.world.restore.question.line1", + "english_translation": "The minigame will end and your realm will be restored." + }, + { + "key": "entity.minecraft.eye_of_ender", + "english_translation": "Eye of Ender" + }, + { + "key": "createWorld.tab.world.title", + "english_translation": "World" + }, + { + "key": "block.minecraft.banner.triangle_bottom.red", + "english_translation": "Red Chevron" + }, + { + "key": "block.minecraft.cyan_carpet", + "english_translation": "Cyan Carpet" + }, + { + "key": "argument.double.big", + "english_translation": "Double must not be more than %s, found %s" + }, + { + "key": "color.minecraft.red", + "english_translation": "Red" + }, + { + "key": "block.minecraft.oak_door", + "english_translation": "Oak Door" + }, + { + "key": "block.minecraft.flowering_azalea_leaves", + "english_translation": "Flowering Azalea Leaves" + }, + { + "key": "item.minecraft.prismarine_crystals", + "english_translation": "Prismarine Crystals" + }, + { + "key": "commands.scoreboard.players.enable.success.multiple", + "english_translation": "Enabled trigger %s for %s entities" + }, + { + "key": "menu.disconnect", + "english_translation": "Disconnect" + }, + { + "key": "entity.minecraft.chest_boat", + "english_translation": "Boat with Chest" + }, + { + "key": "item.minecraft.tipped_arrow.effect.slow_falling", + "english_translation": "Arrow of Slow Falling" + }, + { + "key": "stat_type.minecraft.killed_by", + "english_translation": "%s killed you %s time(s)" + }, + { + "key": "commands.place.jigsaw.invalid", + "english_translation": "There is no template pool with type \"%s\"" + }, + { + "key": "options.online", + "english_translation": "Online..." + }, + { + "key": "commands.banip.invalid", + "english_translation": "Invalid IP address or unknown player" + }, + { + "key": "block.minecraft.banner.square_top_left.light_gray", + "english_translation": "Light Gray Chief Dexter Canton" + }, + { + "key": "advancements.adventure.kill_mob_near_sculk_catalyst.title", + "english_translation": "It Spreads" + }, + { + "key": "subtitles.entity.elder_guardian.death", + "english_translation": "Elder Guardian dies" + }, + { + "key": "multiplayer.disconnect.authservers_down", + "english_translation": "Authentication servers are down. Please try again later, sorry!" + }, + { + "key": "color.minecraft.gray", + "english_translation": "Gray" + }, + { + "key": "item.minecraft.furnace_minecart", + "english_translation": "Minecart with Furnace" + }, + { + "key": "mco.selectServer.expiredList", + "english_translation": "Your subscription has expired" + }, + { + "key": "gui.abuseReport.reason.harassment_or_bullying.description", + "english_translation": "Someone is shaming, attacking, or bullying you or someone else. This includes when someone is repeatedly trying to contact you or someone else without consent or posting private personal information about you or someone else without consent (\"doxing\")." + }, + { + "key": "multiplayer.disconnect.idling", + "english_translation": "You have been idle for too long!" + }, + { + "key": "soundCategory.record", + "english_translation": "Jukebox/Note Blocks" + }, + { + "key": "block.minecraft.prismarine_slab", + "english_translation": "Prismarine Slab" + }, + { + "key": "block.minecraft.nether_portal", + "english_translation": "Nether Portal" + }, + { + "key": "advancements.story.obtain_armor.title", + "english_translation": "Suit Up" + }, + { + "key": "subtitles.entity.ender_dragon.flap", + "english_translation": "Dragon flaps" + }, + { + "key": "block.minecraft.purple_banner", + "english_translation": "Purple Banner" + }, + { + "key": "entity.minecraft.spider", + "english_translation": "Spider" + }, + { + "key": "subtitles.entity.endermite.death", + "english_translation": "Endermite dies" + }, + { + "key": "telemetry.event.advancement_made.description", + "english_translation": "Understanding the context behind receiving an advancement can help us better understand and improve the progression of the game." + }, + { + "key": "container.isLocked", + "english_translation": "%s is locked!" + }, + { + "key": "commands.time.set", + "english_translation": "Set the time to %s" + }, + { + "key": "block.minecraft.yellow_banner", + "english_translation": "Yellow Banner" + }, + { + "key": "item.minecraft.potion.effect.swiftness", + "english_translation": "Potion of Swiftness" + }, + { + "key": "subtitles.entity.frog.long_jump", + "english_translation": "Frog jumps" + }, + { + "key": "container.grindstone_title", + "english_translation": "Repair & Disenchant" + }, + { + "key": "mco.configure.world.opening", + "english_translation": "Opening the realm..." + }, + { + "key": "block.minecraft.clay", + "english_translation": "Clay" + }, + { + "key": "container.barrel", + "english_translation": "Barrel" + }, + { + "key": "commands.title.times.single", + "english_translation": "Changed title display times for %s" + }, + { + "key": "key.keyboard.period", + "english_translation": "." + }, + { + "key": "key.mouse.right", + "english_translation": "Right Button" + }, + { + "key": "death.attack.fireball", + "english_translation": "%1$s was fireballed by %2$s" + }, + { + "key": "itemGroup.search", + "english_translation": "Search Items" + }, + { + "key": "argument.entity.notfound.entity", + "english_translation": "No entity was found" + }, + { + "key": "block.minecraft.polished_diorite_slab", + "english_translation": "Polished Diorite Slab" + }, + { + "key": "block.minecraft.banner.piglin.green", + "english_translation": "Green Snout" + }, + { + "key": "resourcepack.requesting", + "english_translation": "Making Request..." + }, + { + "key": "block.minecraft.banner.cross.magenta", + "english_translation": "Magenta Saltire" + }, + { + "key": "block.minecraft.cobblestone_slab", + "english_translation": "Cobblestone Slab" + }, + { + "key": "mco.question", + "english_translation": "Question" + }, + { + "key": "block.minecraft.banner.diagonal_right.purple", + "english_translation": "Purple Per Bend" + }, + { + "key": "block.minecraft.big_dripleaf", + "english_translation": "Big Dripleaf" + }, + { + "key": "item.minecraft.camel_spawn_egg", + "english_translation": "Camel Spawn Egg" + }, + { + "key": "commands.bossbar.list.bars.none", + "english_translation": "There are no custom bossbars active" + }, + { + "key": "advancements.nether.find_fortress.title", + "english_translation": "A Terrible Fortress" + }, + { + "key": "painting.minecraft.courbet.title", + "english_translation": "Bonjour Monsieur Courbet" + }, + { + "key": "block.minecraft.blackstone_stairs", + "english_translation": "Blackstone Stairs" + }, + { + "key": "advancements.husbandry.feed_snifflet.title", + "english_translation": "Little Sniffs" + }, + { + "key": "block.minecraft.banner.triangles_top.blue", + "english_translation": "Blue Chief Indented" + }, + { + "key": "effect.none", + "english_translation": "No Effects" + }, + { + "key": "block.minecraft.deepslate_tile_slab", + "english_translation": "Deepslate Tile Slab" + }, + { + "key": "commands.locate.structure.success", + "english_translation": "The nearest %s is at %s (%s blocks away)" + }, + { + "key": "mco.backup.entry", + "english_translation": "Backup (%s)" + }, + { + "key": "telemetry_info.button.give_feedback", + "english_translation": "Give Feedback" + }, + { + "key": "item.minecraft.piglin_banner_pattern.desc", + "english_translation": "Snout" + }, + { + "key": "subtitles.entity.blaze.hurt", + "english_translation": "Blaze hurts" + }, + { + "key": "gamerule.doEntityDrops", + "english_translation": "Drop entity equipment" + }, + { + "key": "block.minecraft.exposed_cut_copper_slab", + "english_translation": "Exposed Cut Copper Slab" + }, + { + "key": "selectWorld.create", + "english_translation": "Create New World" + }, + { + "key": "death.attack.fireworks", + "english_translation": "%1$s went off with a bang" + }, + { + "key": "block.minecraft.banner.triangle_top.lime", + "english_translation": "Lime Inverted Chevron" + }, + { + "key": "block.minecraft.potted_dead_bush", + "english_translation": "Potted Dead Bush" + }, + { + "key": "subtitles.entity.ender_dragon.growl", + "english_translation": "Dragon growls" + }, + { + "key": "block.minecraft.banner.half_horizontal.brown", + "english_translation": "Brown Per Fess" + }, + { + "key": "commands.advancement.revoke.one.to.many.success", + "english_translation": "Revoked the advancement %s from %s players" + }, + { + "key": "item.minecraft.splash_potion.effect.water", + "english_translation": "Splash Water Bottle" + }, + { + "key": "mco.configure.world.subscription.months", + "english_translation": "months" + }, + { + "key": "createWorld.customize.custom.preset.waterWorld", + "english_translation": "Water World" + }, + { + "key": "block.minecraft.banner.diagonal_right.red", + "english_translation": "Red Per Bend" + }, + { + "key": "entity.minecraft.experience_orb", + "english_translation": "Experience Orb" + }, + { + "key": "commands.function.success.multiple", + "english_translation": "Executed %s command(s) from %s functions" + }, + { + "key": "death.attack.inWall", + "english_translation": "%1$s suffocated in a wall" + }, + { + "key": "advancements.husbandry.plant_seed.title", + "english_translation": "A Seedy Place" + }, + { + "key": "chat.type.announcement", + "english_translation": "[%s] %s" + }, + { + "key": "advancements.end.dragon_breath.title", + "english_translation": "You Need a Mint" + }, + { + "key": "mco.errorMessage.6003", + "english_translation": "Download limit reached" + }, + { + "key": "mco.errorMessage.6002", + "english_translation": "Terms of service not accepted" + }, + { + "key": "commands.attribute.base_value.set.success", + "english_translation": "Base value for attribute %s for entity %s set to %s" + }, + { + "key": "mco.errorMessage.6001", + "english_translation": "Client outdated" + }, + { + "key": "commands.title.cleared.multiple", + "english_translation": "Cleared titles for %s players" + }, + { + "key": "key.keyboard.page.up", + "english_translation": "Page Up" + }, + { + "key": "mco.errorMessage.6007", + "english_translation": "User in too many Realms" + }, + { + "key": "telemetry.property.minecraft_session_id.title", + "english_translation": "Minecraft Session ID" + }, + { + "key": "mco.errorMessage.6006", + "english_translation": "World is out of date" + }, + { + "key": "mco.errorMessage.6005", + "english_translation": "World locked" + }, + { + "key": "mco.errorMessage.6004", + "english_translation": "Upload limit reached" + }, + { + "key": "block.minecraft.banner.piglin.light_blue", + "english_translation": "Light Blue Snout" + }, + { + "key": "event.minecraft.raid.defeat", + "english_translation": "Defeat" + }, + { + "key": "mco.errorMessage.6009", + "english_translation": "Invalid Realm description" + }, + { + "key": "mco.errorMessage.6008", + "english_translation": "Invalid Realm name" + }, + { + "key": "options.rawMouseInput", + "english_translation": "Raw Input" + }, + { + "key": "gui.yes", + "english_translation": "Yes" + }, + { + "key": "soundCategory.ambient", + "english_translation": "Ambient/Environment" + }, + { + "key": "block.minecraft.medium_amethyst_bud", + "english_translation": "Medium Amethyst Bud" + }, + { + "key": "block.minecraft.banner.straight_cross.orange", + "english_translation": "Orange Cross" + }, + { + "key": "entity.minecraft.stray", + "english_translation": "Stray" + }, + { + "key": "commands.bossbar.get.players.some", + "english_translation": "Custom bossbar %s has %s player(s) currently online: %s" + }, + { + "key": "options.gamma.default", + "english_translation": "Default" + }, + { + "key": "subtitles.entity.axolotl.splash", + "english_translation": "Axolotl splashes" + }, + { + "key": "block.minecraft.potted_crimson_fungus", + "english_translation": "Potted Crimson Fungus" + }, + { + "key": "commands.teleport.success.entity.single", + "english_translation": "Teleported %s to %s" + }, + { + "key": "advancements.adventure.bullseye.description", + "english_translation": "Hit the bullseye of a Target block from at least 30 meters away" + }, + { + "key": "block.minecraft.pink_terracotta", + "english_translation": "Pink Terracotta" + }, + { + "key": "chat.type.team.text", + "english_translation": "%s <%s> %s" + }, + { + "key": "connect.connecting", + "english_translation": "Connecting to the server..." + }, + { + "key": "death.attack.flyIntoWall", + "english_translation": "%1$s experienced kinetic energy" + }, + { + "key": "item.minecraft.orange_dye", + "english_translation": "Orange Dye" + }, + { + "key": "advancements.husbandry.leash_all_frog_variants.description", + "english_translation": "Get each Frog variant on a Lead" + }, + { + "key": "block.minecraft.warped_fence_gate", + "english_translation": "Warped Fence Gate" + }, + { + "key": "itemGroup.functional", + "english_translation": "Functional Blocks" + }, + { + "key": "block.minecraft.magenta_stained_glass_pane", + "english_translation": "Magenta Stained Glass Pane" + }, + { + "key": "subtitles.event.raid.horn", + "english_translation": "Ominous horn blares" + }, + { + "key": "biome.minecraft.soul_sand_valley", + "english_translation": "Soul Sand Valley" + }, + { + "key": "block.minecraft.flower_pot", + "english_translation": "Flower Pot" + }, + { + "key": "item.minecraft.fishing_rod", + "english_translation": "Fishing Rod" + }, + { + "key": "argument.player.toomany", + "english_translation": "Only one player is allowed, but the provided selector allows more than one" + }, + { + "key": "block.minecraft.light_gray_stained_glass_pane", + "english_translation": "Light Gray Stained Glass Pane" + }, + { + "key": "mco.configure.world.buttons.done", + "english_translation": "Done" + }, + { + "key": "block.minecraft.banner.triangle_top.blue", + "english_translation": "Blue Inverted Chevron" + }, + { + "key": "selectWorld.allowCommands.info", + "english_translation": "Commands like /gamemode, /experience" + }, + { + "key": "block.minecraft.mossy_stone_brick_stairs", + "english_translation": "Mossy Stone Brick Stairs" + }, + { + "key": "block.minecraft.brown_mushroom_block", + "english_translation": "Brown Mushroom Block" + }, + { + "key": "commands.ride.mount.success", + "english_translation": "%s started riding %s" + }, + { + "key": "selectWorld.experimental.title", + "english_translation": "Experimental Features Warning" + }, + { + "key": "subtitles.block.barrel.close", + "english_translation": "Barrel closes" + }, + { + "key": "subtitles.block.growing_plant.crop", + "english_translation": "Plant cropped" + }, + { + "key": "subtitles.entity.rabbit.death", + "english_translation": "Rabbit dies" + }, + { + "key": "telemetry.event.required", + "english_translation": "%s (Required)" + }, + { + "key": "block.minecraft.polished_andesite_stairs", + "english_translation": "Polished Andesite Stairs" + }, + { + "key": "key.pickItem", + "english_translation": "Pick Block" + }, + { + "key": "block.minecraft.banner.half_vertical_right.brown", + "english_translation": "Brown Per Pale Inverted" + }, + { + "key": "biome.minecraft.cherry_grove", + "english_translation": "Cherry Grove" + }, + { + "key": "commands.bossbar.set.color.unchanged", + "english_translation": "Nothing changed. That's already the color of this bossbar" + }, + { + "key": "argument.block.property.unclosed", + "english_translation": "Expected closing ] for block state properties" + }, + { + "key": "block.minecraft.banner.bricks.red", + "english_translation": "Red Field Masoned" + }, + { + "key": "subtitles.entity.sniffer.drop_seed", + "english_translation": "Sniffer drops seed" + }, + { + "key": "subtitles.entity.panda.step", + "english_translation": "Panda steps" + }, + { + "key": "createWorld.customize.custom.page1", + "english_translation": "Ore Settings" + }, + { + "key": "item.minecraft.enderman_spawn_egg", + "english_translation": "Enderman Spawn Egg" + }, + { + "key": "createWorld.customize.custom.page2", + "english_translation": "Advanced Settings (Expert Users Only!)" + }, + { + "key": "createWorld.customize.custom.page3", + "english_translation": "Extra Advanced Settings (Expert Users Only!)" + }, + { + "key": "advancements.adventure.voluntary_exile.description", + "english_translation": "Kill a raid captain.\nMaybe consider staying away from villages for the time being..." + }, + { + "key": "block.minecraft.pink_concrete_powder", + "english_translation": "Pink Concrete Powder" + }, + { + "key": "subtitles.entity.enderman.death", + "english_translation": "Enderman dies" + }, + { + "key": "createWorld.customize.custom.page0", + "english_translation": "Basic Settings" + }, + { + "key": "subtitles.entity.axolotl.swim", + "english_translation": "Axolotl swims" + }, + { + "key": "trim_pattern.minecraft.shaper", + "english_translation": "Shaper Armor Trim" + }, + { + "key": "key.mouse.middle", + "english_translation": "Middle Button" + }, + { + "key": "block.minecraft.spruce_fence", + "english_translation": "Spruce Fence" + }, + { + "key": "death.attack.starve", + "english_translation": "%1$s starved to death" + }, + { + "key": "block.minecraft.polished_granite", + "english_translation": "Polished Granite" + }, + { + "key": "subtitles.entity.cat.eat", + "english_translation": "Cat eats" + }, + { + "key": "options.telemetry.button", + "english_translation": "Data Collection" + }, + { + "key": "gui.socialInteractions.tooltip.report.no_messages", + "english_translation": "No reportable messages from player %s" + }, + { + "key": "debug.reload_chunks.help", + "english_translation": "F3 + A = Reload chunks" + }, + { + "key": "block.minecraft.tnt", + "english_translation": "TNT" + }, + { + "key": "commands.experience.set.levels.success.multiple", + "english_translation": "Set %s experience levels on %s players" + }, + { + "key": "subtitles.entity.witch.hurt", + "english_translation": "Witch hurts" + }, + { + "key": "selectWorld.gameMode.hardcore", + "english_translation": "Hardcore" + }, + { + "key": "subtitles.entity.item_frame.remove_item", + "english_translation": "Item Frame empties" + }, + { + "key": "subtitles.entity.zoglin.ambient", + "english_translation": "Zoglin growls" + }, + { + "key": "item.minecraft.turtle_spawn_egg", + "english_translation": "Turtle Spawn Egg" + }, + { + "key": "narration.cycle_button.usage.hovered", + "english_translation": "Left click to switch to %s" + }, + { + "key": "block.minecraft.banner.half_vertical.light_gray", + "english_translation": "Light Gray Per Pale" + }, + { + "key": "item.minecraft.pottery_shard_archer", + "english_translation": "Archer Pottery Shard" + }, + { + "key": "entity.minecraft.leash_knot", + "english_translation": "Leash Knot" + }, + { + "key": "key.categories.multiplayer", + "english_translation": "Multiplayer" + }, + { + "key": "advancements.adventure.shoot_arrow.description", + "english_translation": "Shoot something with an Arrow" + }, + { + "key": "soundCategory.block", + "english_translation": "Blocks" + }, + { + "key": "multiplayer.disconnect.expired_public_key", + "english_translation": "Expired profile public key. Check that your system time is synchronized, and try restarting your game." + }, + { + "key": "subtitles.entity.mule.hurt", + "english_translation": "Mule hurts" + }, + { + "key": "createWorld.customize.flat.layer", + "english_translation": "%s" + }, + { + "key": "entity.minecraft.ocelot", + "english_translation": "Ocelot" + }, + { + "key": "block.minecraft.cyan_candle", + "english_translation": "Cyan Candle" + }, + { + "key": "stat.minecraft.interact_with_lectern", + "english_translation": "Interactions with Lectern" + }, + { + "key": "structure_block.mode.save", + "english_translation": "Save" + }, + { + "key": "block.minecraft.chest", + "english_translation": "Chest" + }, + { + "key": "stat_type.minecraft.dropped", + "english_translation": "Dropped" + }, + { + "key": "block.minecraft.furnace", + "english_translation": "Furnace" + }, + { + "key": "commands.attribute.failed.modifier_already_present", + "english_translation": "Modifier %s is already present on attribute %s for entity %s" + }, + { + "key": "gamerule.naturalRegeneration", + "english_translation": "Regenerate health" + }, + { + "key": "mco.configure.world.switch.slot", + "english_translation": "Create world" + }, + { + "key": "subtitles.entity.chicken.death", + "english_translation": "Chicken dies" + }, + { + "key": "item.minecraft.phantom_membrane", + "english_translation": "Phantom Membrane" + }, + { + "key": "block.minecraft.banner.border.red", + "english_translation": "Red Bordure" + }, + { + "key": "subtitles.entity.evoker.prepare_wololo", + "english_translation": "Evoker prepares charming" + }, + { + "key": "selectWorld.tooltip.fromNewerVersion2", + "english_translation": "loading this world could cause problems!" + }, + { + "key": "item.minecraft.cat_spawn_egg", + "english_translation": "Cat Spawn Egg" + }, + { + "key": "selectWorld.tooltip.fromNewerVersion1", + "english_translation": "World was saved in a newer version," + }, + { + "key": "block.minecraft.cut_red_sandstone", + "english_translation": "Cut Red Sandstone" + }, + { + "key": "block.minecraft.oxidized_copper", + "english_translation": "Oxidized Copper" + }, + { + "key": "commands.ban.success", + "english_translation": "Banned %s: %s" + }, + { + "key": "options.realmsNotifications", + "english_translation": "Realms News & Invites" + }, + { + "key": "advancements.adventure.trim_with_any_armor_pattern.title", + "english_translation": "Crafting a New Look" + }, + { + "key": "block.minecraft.jungle_sign", + "english_translation": "Jungle Sign" + }, + { + "key": "subtitles.entity.firework_rocket.twinkle", + "english_translation": "Firework twinkles" + }, + { + "key": "block.minecraft.banner.circle.white", + "english_translation": "White Roundel" + }, + { + "key": "biome.minecraft.jagged_peaks", + "english_translation": "Jagged Peaks" + }, + { + "key": "commands.difficulty.failure", + "english_translation": "The difficulty did not change; it is already set to %s" + }, + { + "key": "multiplayer.disconnect.generic", + "english_translation": "Disconnected" + }, + { + "key": "gui.cancel", + "english_translation": "Cancel" + }, + { + "key": "block.minecraft.redstone_wall_torch", + "english_translation": "Redstone Wall Torch" + }, + { + "key": "commands.data.storage.get", + "english_translation": "%s in storage %s after scale factor of %s is %s" + }, + { + "key": "demo.help.movementShort", + "english_translation": "Move by pressing the %1$s, %2$s, %3$s, %4$s keys" + }, + { + "key": "block.minecraft.white_carpet", + "english_translation": "White Carpet" + }, + { + "key": "death.attack.cramming", + "english_translation": "%1$s was squished too much" + }, + { + "key": "subtitles.entity.vex.hurt", + "english_translation": "Vex hurts" + }, + { + "key": "block.minecraft.red_sandstone", + "english_translation": "Red Sandstone" + }, + { + "key": "subtitles.item.bottle.empty", + "english_translation": "Bottle empties" + }, + { + "key": "commands.difficulty.success", + "english_translation": "The difficulty has been set to %s" + }, + { + "key": "commands.team.option.friendlyfire.alreadyEnabled", + "english_translation": "Nothing changed. Friendly fire is already enabled for that team" + }, + { + "key": "options.difficulty.hard", + "english_translation": "Hard" + }, + { + "key": "item.minecraft.smithing_template.upgrade", + "english_translation": "Upgrade: " + }, + { + "key": "item.minecraft.ocelot_spawn_egg", + "english_translation": "Ocelot Spawn Egg" + }, + { + "key": "mco.configure.world.reset.question.line1", + "english_translation": "Your world will be regenerated and your current world will be lost" + }, + { + "key": "mco.configure.world.reset.question.line2", + "english_translation": "Are you sure you want to continue?" + }, + { + "key": "item.minecraft.potion.effect.invisibility", + "english_translation": "Potion of Invisibility" + }, + { + "key": "telemetry.event.world_load_times.title", + "english_translation": "World Load Times" + }, + { + "key": "commands.clear.success.single", + "english_translation": "Removed %s item(s) from player %s" + }, + { + "key": "block.minecraft.mangrove_door", + "english_translation": "Mangrove Door" + }, + { + "key": "createWorld.customize.custom.useCaves", + "english_translation": "Caves" + }, + { + "key": "advancements.adventure.ol_betsy.description", + "english_translation": "Shoot a Crossbow" + }, + { + "key": "item.minecraft.music_disc_wait.desc", + "english_translation": "C418 - wait" + }, + { + "key": "block.minecraft.banner.stripe_downright.light_gray", + "english_translation": "Light Gray Bend" + }, + { + "key": "gui.banned.description.temporary.duration", + "english_translation": "Your account is temporarily suspended and will be reactivated in %s." + }, + { + "key": "subtitles.entity.sniffer.death", + "english_translation": "Sniffer dies" + }, + { + "key": "addServer.add", + "english_translation": "Done" + }, + { + "key": "attribute.name.generic.attack_knockback", + "english_translation": "Attack Knockback" + }, + { + "key": "mco.configure.world.uninvite.question", + "english_translation": "Are you sure that you want to uninvite" + }, + { + "key": "block.minecraft.light_gray_stained_glass", + "english_translation": "Light Gray Stained Glass" + }, + { + "key": "subtitles.entity.villager.work_librarian", + "english_translation": "Librarian works" + }, + { + "key": "filled_map.mansion", + "english_translation": "Woodland Explorer Map" + }, + { + "key": "item.minecraft.gold_nugget", + "english_translation": "Gold Nugget" + }, + { + "key": "permissions.requires.player", + "english_translation": "A player is required to run this command here" + }, + { + "key": "subtitles.entity.zombie_horse.death", + "english_translation": "Zombie Horse dies" + }, + { + "key": "item.minecraft.smithing_template.armor_trim.additions_slot_description", + "english_translation": "Add ingot or crystal" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.brown", + "english_translation": "Brown Per Bend Sinister Inverted" + }, + { + "key": "block.minecraft.black_candle", + "english_translation": "Black Candle" + }, + { + "key": "block.minecraft.dripstone_block", + "english_translation": "Dripstone Block" + }, + { + "key": "commands.place.feature.invalid", + "english_translation": "There is no feature with type \"%s\"" + }, + { + "key": "mco.configure.world.switch.slot.subtitle", + "english_translation": "This world is empty, choose how to create your world" + }, + { + "key": "jigsaw_block.final_state", + "english_translation": "Turns into:" + }, + { + "key": "item.minecraft.shield.light_blue", + "english_translation": "Light Blue Shield" + }, + { + "key": "mco.download.speed", + "english_translation": "(%s/s)" + }, + { + "key": "trim_material.minecraft.gold", + "english_translation": "Gold Material" + }, + { + "key": "block.minecraft.banner.stripe_bottom.white", + "english_translation": "White Base" + }, + { + "key": "block.minecraft.daylight_detector", + "english_translation": "Daylight Detector" + }, + { + "key": "entity.minecraft.illusioner", + "english_translation": "Illusioner" + }, + { + "key": "subtitles.entity.cat.beg_for_food", + "english_translation": "Cat begs" + }, + { + "key": "options.visible", + "english_translation": "Shown" + }, + { + "key": "block.minecraft.green_candle", + "english_translation": "Green Candle" + }, + { + "key": "commands.scoreboard.objectives.display.cleared", + "english_translation": "Cleared any objectives in display slot %s" + }, + { + "key": "subtitles.block.piston.move", + "english_translation": "Piston moves" + }, + { + "key": "block.minecraft.orange_carpet", + "english_translation": "Orange Carpet" + }, + { + "key": "mco.configure.world.players.inviting", + "english_translation": "Inviting player..." + }, + { + "key": "options.chat.width", + "english_translation": "Width" + }, + { + "key": "item.minecraft.danger_pottery_shard", + "english_translation": "Danger Pottery Shard" + }, + { + "key": "mco.configure.world.buttons.activity", + "english_translation": "Player activity" + }, + { + "key": "options.graphics.fast", + "english_translation": "Fast" + }, + { + "key": "debug.show_hitboxes.on", + "english_translation": "Hitboxes: shown" + }, + { + "key": "attribute.name.generic.max_health", + "english_translation": "Max Health" + }, + { + "key": "entity.minecraft.block_display", + "english_translation": "Block Display" + }, + { + "key": "selectWorld.gameMode.spectator", + "english_translation": "Spectator" + }, + { + "key": "entity.minecraft.tropical_fish.type.blockfish", + "english_translation": "Blockfish" + }, + { + "key": "painting.dimensions", + "english_translation": "%sx%s" + }, + { + "key": "container.chest", + "english_translation": "Chest" + }, + { + "key": "item.minecraft.gunpowder", + "english_translation": "Gunpowder" + }, + { + "key": "gui.banned.reason.generic_violation", + "english_translation": "Violating Community Standards" + }, + { + "key": "block.minecraft.banner.stripe_right.yellow", + "english_translation": "Yellow Pale Sinister" + }, + { + "key": "painting.minecraft.burning_skull.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.polished_diorite_stairs", + "english_translation": "Polished Diorite Stairs" + }, + { + "key": "mco.download.extracting", + "english_translation": "Extracting" + }, + { + "key": "block.minecraft.banner.piglin.white", + "english_translation": "White Snout" + }, + { + "key": "block.minecraft.banner.diagonal_left.magenta", + "english_translation": "Magenta Per Bend Sinister" + }, + { + "key": "block.minecraft.dark_oak_trapdoor", + "english_translation": "Dark Oak Trapdoor" + }, + { + "key": "subtitles.entity.parrot.hurts", + "english_translation": "Parrot hurts" + }, + { + "key": "mco.configure.world.title", + "english_translation": "Configure realm:" + }, + { + "key": "commands.scoreboard.players.set.success.multiple", + "english_translation": "Set %s for %s entities to %s" + }, + { + "key": "mco.selectServer.expires.soon", + "english_translation": "Expires soon" + }, + { + "key": "commands.team.list.members.success", + "english_translation": "Team %s has %s member(s): %s" + }, + { + "key": "block.minecraft.potted_wither_rose", + "english_translation": "Potted Wither Rose" + }, + { + "key": "block.minecraft.powder_snow_cauldron", + "english_translation": "Powder Snow Cauldron" + }, + { + "key": "item.minecraft.leather_helmet", + "english_translation": "Leather Cap" + }, + { + "key": "block.minecraft.spruce_wood", + "english_translation": "Spruce Wood" + }, + { + "key": "commands.bossbar.set.visibility.unchanged.hidden", + "english_translation": "Nothing changed. The bossbar is already hidden" + }, + { + "key": "block.minecraft.smooth_red_sandstone_stairs", + "english_translation": "Smooth Red Sandstone Stairs" + }, + { + "key": "options.fov.max", + "english_translation": "Quake Pro" + }, + { + "key": "commands.advancement.grant.one.to.many.failure", + "english_translation": "Couldn't grant advancement %s to %s players as they already have it" + }, + { + "key": "commands.advancement.grant.one.to.many.success", + "english_translation": "Granted the advancement %s to %s players" + }, + { + "key": "item.minecraft.brewer_pottery_shard", + "english_translation": "Brewer Pottery Shard" + }, + { + "key": "options.fullscreen.resolution", + "english_translation": "Fullscreen Resolution" + }, + { + "key": "entity.minecraft.silverfish", + "english_translation": "Silverfish" + }, + { + "key": "multiplayer.status.cannot_connect", + "english_translation": "Can't connect to server" + }, + { + "key": "enchantment.minecraft.binding_curse", + "english_translation": "Curse of Binding" + }, + { + "key": "block.minecraft.birch_fence_gate", + "english_translation": "Birch Fence Gate" + }, + { + "key": "commands.pardonip.success", + "english_translation": "Unbanned IP %s" + }, + { + "key": "block.minecraft.banner.mojang.light_gray", + "english_translation": "Light Gray Thing" + }, + { + "key": "options.chat.color", + "english_translation": "Colors" + }, + { + "key": "debug.chunk_boundaries.on", + "english_translation": "Chunk borders: shown" + }, + { + "key": "subtitles.entity.strider.happy", + "english_translation": "Strider warbles" + }, + { + "key": "subtitles.entity.zombie_villager.death", + "english_translation": "Zombie Villager dies" + }, + { + "key": "block.minecraft.red_stained_glass", + "english_translation": "Red Stained Glass" + }, + { + "key": "commands.team.empty.unchanged", + "english_translation": "Nothing changed. That team is already empty" + }, + { + "key": "selectWorld.import_worldgen_settings.failure", + "english_translation": "Error importing settings" + }, + { + "key": "item.minecraft.firework_rocket.flight", + "english_translation": "Flight Duration:" + }, + { + "key": "advancements.end.dragon_egg.title", + "english_translation": "The Next Generation" + }, + { + "key": "options.ao.off", + "english_translation": "OFF" + }, + { + "key": "block.minecraft.potted_lily_of_the_valley", + "english_translation": "Potted Lily of the Valley" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.purple", + "english_translation": "Purple Per Bend Sinister Inverted" + }, + { + "key": "subtitles.item.honey_bottle.drink", + "english_translation": "Gulping" + }, + { + "key": "item.minecraft.lime_dye", + "english_translation": "Lime Dye" + }, + { + "key": "mco.configure.world.buttons.moreoptions", + "english_translation": "More options" + }, + { + "key": "block.minecraft.spruce_trapdoor", + "english_translation": "Spruce Trapdoor" + }, + { + "key": "entity.minecraft.fishing_bobber", + "english_translation": "Fishing Bobber" + }, + { + "key": "subtitles.entity.llama.eat", + "english_translation": "Llama eats" + }, + { + "key": "block.minecraft.acacia_fence_gate", + "english_translation": "Acacia Fence Gate" + }, + { + "key": "gui.recipebook.toggleRecipes.all", + "english_translation": "Showing All" + }, + { + "key": "block.minecraft.deepslate_lapis_ore", + "english_translation": "Deepslate Lapis Lazuli Ore" + }, + { + "key": "options.sounds.title", + "english_translation": "Music & Sound Options" + }, + { + "key": "biome.minecraft.badlands", + "english_translation": "Badlands" + }, + { + "key": "block.minecraft.dark_oak_wood", + "english_translation": "Dark Oak Wood" + }, + { + "key": "block.minecraft.dark_prismarine_stairs", + "english_translation": "Dark Prismarine Stairs" + }, + { + "key": "command.exception", + "english_translation": "Could not parse command: %s" + }, + { + "key": "block.minecraft.blue_bed", + "english_translation": "Blue Bed" + }, + { + "key": "block.minecraft.oak_leaves", + "english_translation": "Oak Leaves" + }, + { + "key": "subtitles.entity.silverfish.death", + "english_translation": "Silverfish dies" + }, + { + "key": "item.minecraft.smithing_template.netherite_upgrade.base_slot_description", + "english_translation": "Add diamond armor, weapon, or tool" + }, + { + "key": "block.minecraft.moss_carpet", + "english_translation": "Moss Carpet" + }, + { + "key": "block.minecraft.cracked_polished_blackstone_bricks", + "english_translation": "Cracked Polished Blackstone Bricks" + }, + { + "key": "item.minecraft.wolf_spawn_egg", + "english_translation": "Wolf Spawn Egg" + }, + { + "key": "structure_block.save_success", + "english_translation": "Structure saved as '%s'" + }, + { + "key": "entity.minecraft.slime", + "english_translation": "Slime" + }, + { + "key": "advancements.story.form_obsidian.description", + "english_translation": "Obtain a block of Obsidian" + }, + { + "key": "commands.scoreboard.objectives.list.success", + "english_translation": "There are %s objective(s): %s" + }, + { + "key": "block.minecraft.banner.stripe_middle.purple", + "english_translation": "Purple Fess" + }, + { + "key": "item.minecraft.witch_spawn_egg", + "english_translation": "Witch Spawn Egg" + }, + { + "key": "selectWorld.experiments", + "english_translation": "Experiments" + }, + { + "key": "advancements.husbandry.netherite_hoe.title", + "english_translation": "Serious Dedication" + }, + { + "key": "commands.worldborder.set.shrink", + "english_translation": "Shrinking the world border to %s block(s) wide over %s second(s)" + }, + { + "key": "block.minecraft.banner.flower.green", + "english_translation": "Green Flower Charge" + }, + { + "key": "subtitles.entity.guardian.hurt", + "english_translation": "Guardian hurts" + }, + { + "key": "fabric-registry-sync-v0.unknown-remote.title.singular", + "english_translation": "Received a registry entry that is unknown to this client.\n" + }, + { + "key": "item.minecraft.shield.gray", + "english_translation": "Gray Shield" + }, + { + "key": "mco.template.info.tooltip", + "english_translation": "Publisher website" + }, + { + "key": "commands.perf.started", + "english_translation": "Started 10 second performance profiling run (use '/perf stop' to stop early)" + }, + { + "key": "gui.banned.reason.hate_speech", + "english_translation": "Hate speech or discrimination" + }, + { + "key": "key.keyboard.comma", + "english_translation": "," + }, + { + "key": "options.telemetry", + "english_translation": "Telemetry Data..." + }, + { + "key": "selectWorld.backupQuestion.customized", + "english_translation": "Customized worlds are no longer supported" + }, + { + "key": "options.mainHand.left", + "english_translation": "Left" + }, + { + "key": "gui.banned.description.reason", + "english_translation": "We recently received a report for bad behavior by your account. Our moderators have now reviewed your case and identified it as %s, which goes against the Minecraft Community Standards." + }, + { + "key": "structure_block.hover.data", + "english_translation": "Data: %s" + }, + { + "key": "block.minecraft.cyan_concrete", + "english_translation": "Cyan Concrete" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.orange", + "english_translation": "Orange Per Bend Inverted" + }, + { + "key": "quickplay.error.invalid_identifier", + "english_translation": "Could not find world with the provided identifier" + }, + { + "key": "subtitles.entity.villager.no", + "english_translation": "Villager disagrees" + }, + { + "key": "menu.resetdemo", + "english_translation": "Reset Demo World" + }, + { + "key": "block.minecraft.sweet_berry_bush", + "english_translation": "Sweet Berry Bush" + }, + { + "key": "block.minecraft.acacia_pressure_plate", + "english_translation": "Acacia Pressure Plate" + }, + { + "key": "block.minecraft.weathered_copper", + "english_translation": "Weathered Copper" + }, + { + "key": "enchantment.minecraft.depth_strider", + "english_translation": "Depth Strider" + }, + { + "key": "entity.minecraft.experience_bottle", + "english_translation": "Thrown Bottle o' Enchanting" + }, + { + "key": "block.minecraft.banner.triangle_bottom.light_gray", + "english_translation": "Light Gray Chevron" + }, + { + "key": "subtitles.entity.generic.swim", + "english_translation": "Swimming" + }, + { + "key": "subtitles.entity.villager.celebrate", + "english_translation": "Villager cheers" + }, + { + "key": "block.minecraft.turtle_egg", + "english_translation": "Turtle Egg" + }, + { + "key": "subtitles.entity.llama.angry", + "english_translation": "Llama bleats angrily" + }, + { + "key": "subtitles.entity.spider.ambient", + "english_translation": "Spider hisses" + }, + { + "key": "debug.profiling.start", + "english_translation": "Profiling started for %s seconds. Use F3 + L to stop early" + }, + { + "key": "subtitles.block.anvil.use", + "english_translation": "Anvil used" + }, + { + "key": "options.difficulty.hardcore", + "english_translation": "Hardcore" + }, + { + "key": "subtitles.entity.warden.angry", + "english_translation": "Warden rages" + }, + { + "key": "item.minecraft.phantom_spawn_egg", + "english_translation": "Phantom Spawn Egg" + }, + { + "key": "block.minecraft.end_stone_brick_stairs", + "english_translation": "End Stone Brick Stairs" + }, + { + "key": "death.attack.cactus.player", + "english_translation": "%1$s walked into a cactus whilst trying to escape %2$s" + }, + { + "key": "block.minecraft.warped_button", + "english_translation": "Warped Button" + }, + { + "key": "chat.type.emote", + "english_translation": "* %s %s" + }, + { + "key": "subtitles.item.bucket.fill_tadpole", + "english_translation": "Tadpole captured" + }, + { + "key": "key.keyboard.keypad.enter", + "english_translation": "Keypad Enter" + }, + { + "key": "block.minecraft.dark_oak_log", + "english_translation": "Dark Oak Log" + }, + { + "key": "commands.pardon.failed", + "english_translation": "Nothing changed. The player isn't banned" + }, + { + "key": "argument.entity.options.x_rotation.description", + "english_translation": "Entity's x rotation" + }, + { + "key": "options.multiplier", + "english_translation": "%sx" + }, + { + "key": "commands.advancement.revoke.one.to.many.failure", + "english_translation": "Couldn't revoke advancement %s from %s players as they don't have it" + }, + { + "key": "options.clouds.fast", + "english_translation": "Fast" + }, + { + "key": "mco.errorMessage.connectionFailure", + "english_translation": "An error occurred, please try again later." + }, + { + "key": "biome.minecraft.snowy_taiga", + "english_translation": "Snowy Taiga" + }, + { + "key": "options.attack.crosshair", + "english_translation": "Crosshair" + }, + { + "key": "jigsaw_block.joint.aligned", + "english_translation": "Aligned" + }, + { + "key": "record.nowPlaying", + "english_translation": "Now Playing: %s" + }, + { + "key": "advancements.husbandry.axolotl_in_a_bucket.description", + "english_translation": "Catch an Axolotl in a Bucket" + }, + { + "key": "block.minecraft.black_carpet", + "english_translation": "Black Carpet" + }, + { + "key": "block.minecraft.bubble_coral_block", + "english_translation": "Bubble Coral Block" + }, + { + "key": "commands.spreadplayers.failed.invalid.height", + "english_translation": "Invalid maxHeight %s; expected higher than world minimum %s" + }, + { + "key": "block.minecraft.brown_candle_cake", + "english_translation": "Cake with Brown Candle" + }, + { + "key": "block.minecraft.banner.skull.purple", + "english_translation": "Purple Skull Charge" + }, + { + "key": "commands.trigger.set.success", + "english_translation": "Triggered %s (set value to %s)" + }, + { + "key": "item.minecraft.netherite_chestplate", + "english_translation": "Netherite Chestplate" + }, + { + "key": "item.minecraft.mojang_banner_pattern.desc", + "english_translation": "Thing" + }, + { + "key": "trim_material.minecraft.emerald", + "english_translation": "Emerald Material" + }, + { + "key": "block.minecraft.magenta_candle", + "english_translation": "Magenta Candle" + }, + { + "key": "mco.configure.world.settings.title", + "english_translation": "Settings" + }, + { + "key": "block.minecraft.pitcher_crop", + "english_translation": "Pitcher Crop" + }, + { + "key": "item.minecraft.smithing_template.netherite_upgrade.ingredients", + "english_translation": "Netherite Ingot" + }, + { + "key": "death.attack.magic", + "english_translation": "%1$s was killed by magic" + }, + { + "key": "commands.fill.success", + "english_translation": "Successfully filled %s block(s)" + }, + { + "key": "item.minecraft.music_disc_mellohi", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.mud_brick_stairs", + "english_translation": "Mud Brick Stairs" + }, + { + "key": "block.minecraft.jungle_button", + "english_translation": "Jungle Button" + }, + { + "key": "stat.minecraft.open_shulker_box", + "english_translation": "Shulker Boxes Opened" + }, + { + "key": "createWorld.customize.custom.useMineShafts", + "english_translation": "Mineshafts" + }, + { + "key": "item.minecraft.lead", + "english_translation": "Lead" + }, + { + "key": "subtitles.entity.turtle.egg_break", + "english_translation": "Turtle Egg breaks" + }, + { + "key": "subtitles.block.lever.click", + "english_translation": "Lever clicks" + }, + { + "key": "item.minecraft.golden_apple", + "english_translation": "Golden Apple" + }, + { + "key": "block.minecraft.banner.stripe_downright.gray", + "english_translation": "Gray Bend" + }, + { + "key": "block.minecraft.hopper", + "english_translation": "Hopper" + }, + { + "key": "commands.save.alreadyOn", + "english_translation": "Saving is already turned on" + }, + { + "key": "subtitles.entity.cod.death", + "english_translation": "Cod dies" + }, + { + "key": "gui.socialInteractions.status_blocked", + "english_translation": "Blocked" + }, + { + "key": "advancements.nether.fast_travel.title", + "english_translation": "Subspace Bubble" + }, + { + "key": "subtitles.entity.dolphin.swim", + "english_translation": "Dolphin swims" + }, + { + "key": "advancements.nether.ride_strider.description", + "english_translation": "Ride a Strider with a Warped Fungus on a Stick" + }, + { + "key": "block.minecraft.cracked_stone_bricks", + "english_translation": "Cracked Stone Bricks" + }, + { + "key": "block.minecraft.banner.half_horizontal.light_blue", + "english_translation": "Light Blue Per Fess" + }, + { + "key": "block.minecraft.slime_block", + "english_translation": "Slime Block" + }, + { + "key": "block.minecraft.banner.bricks.cyan", + "english_translation": "Cyan Field Masoned" + }, + { + "key": "createWorld.customize.custom.baseSize", + "english_translation": "Depth Base Size" + }, + { + "key": "commands.effect.clear.specific.failed", + "english_translation": "Target doesn't have the requested effect" + }, + { + "key": "block.minecraft.end_rod", + "english_translation": "End Rod" + }, + { + "key": "block.minecraft.pink_carpet", + "english_translation": "Pink Carpet" + }, + { + "key": "painting.minecraft.pool.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "item.minecraft.tipped_arrow.effect.strength", + "english_translation": "Arrow of Strength" + }, + { + "key": "biome.minecraft.eroded_badlands", + "english_translation": "Eroded Badlands" + }, + { + "key": "block.minecraft.polished_granite_stairs", + "english_translation": "Polished Granite Stairs" + }, + { + "key": "upgrade.minecraft.netherite_upgrade", + "english_translation": "Netherite Upgrade" + }, + { + "key": "block.minecraft.smooth_quartz", + "english_translation": "Smooth Quartz Block" + }, + { + "key": "subtitles.entity.tnt.primed", + "english_translation": "TNT fizzes" + }, + { + "key": "symlink_warning.message", + "english_translation": "Loading worlds from folders with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more." + }, + { + "key": "block.minecraft.banner.curly_border.light_gray", + "english_translation": "Light Gray Bordure Indented" + }, + { + "key": "gui.chatReport.draft.quittotitle.content", + "english_translation": "Would you like to continue editing it or discard it?" + }, + { + "key": "block.minecraft.banner.half_horizontal.yellow", + "english_translation": "Yellow Per Fess" + }, + { + "key": "subtitles.block.brewing_stand.brew", + "english_translation": "Brewing Stand bubbles" + }, + { + "key": "selectWorld.deleteButton", + "english_translation": "Delete" + }, + { + "key": "commands.forceload.removed.failure", + "english_translation": "No chunks were removed from force loading" + }, + { + "key": "selectWorld.experiments.info", + "english_translation": "Experiments are potential new features. Be careful as things might break. Experiments can't be turned off after world creation." + }, + { + "key": "item.minecraft.splash_potion.effect.turtle_master", + "english_translation": "Splash Potion of the Turtle Master" + }, + { + "key": "gui.socialInteractions.hide", + "english_translation": "Hide in Chat" + }, + { + "key": "block.minecraft.banner.gradient.light_blue", + "english_translation": "Light Blue Gradient" + }, + { + "key": "selectWorld.title", + "english_translation": "Select World" + }, + { + "key": "subtitles.entity.armor_stand.fall", + "english_translation": "Something fell" + }, + { + "key": "mco.upload.entry.id", + "english_translation": "%1$s (%2$s)" + }, + { + "key": "block.minecraft.acacia_fence", + "english_translation": "Acacia Fence" + }, + { + "key": "entity.minecraft.tropical_fish.type.dasher", + "english_translation": "Dasher" + }, + { + "key": "block.minecraft.warped_wall_sign", + "english_translation": "Warped Wall Sign" + }, + { + "key": "block.minecraft.white_candle", + "english_translation": "White Candle" + }, + { + "key": "entity.minecraft.enderman", + "english_translation": "Enderman" + }, + { + "key": "subtitles.block.portal.travel", + "english_translation": "Portal noise fades" + }, + { + "key": "block.minecraft.orange_candle", + "english_translation": "Orange Candle" + }, + { + "key": "block.minecraft.stripped_acacia_wood", + "english_translation": "Stripped Acacia Wood" + }, + { + "key": "block.minecraft.gray_terracotta", + "english_translation": "Gray Terracotta" + }, + { + "key": "block.minecraft.light_blue_concrete_powder", + "english_translation": "Light Blue Concrete Powder" + }, + { + "key": "subtitles.entity.item_frame.add_item", + "english_translation": "Item Frame fills" + }, + { + "key": "advancements.nether.root.title", + "english_translation": "Nether" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.blue", + "english_translation": "Blue Per Bend Sinister Inverted" + }, + { + "key": "key.keyboard.semicolon", + "english_translation": ";" + }, + { + "key": "gamerule.blockExplosionDropDecay", + "english_translation": "In block interaction explosions, some blocks won't drop their loot" + }, + { + "key": "block.minecraft.banner.straight_cross.light_gray", + "english_translation": "Light Gray Cross" + }, + { + "key": "block.minecraft.banner.triangles_top.orange", + "english_translation": "Orange Chief Indented" + }, + { + "key": "biome.minecraft.deep_ocean", + "english_translation": "Deep Ocean" + }, + { + "key": "mco.backup.entry.gameServerVersion", + "english_translation": "Game Server Version" + }, + { + "key": "effect.minecraft.glowing", + "english_translation": "Glowing" + }, + { + "key": "block.minecraft.banner.small_stripes.light_gray", + "english_translation": "Light Gray Paly" + }, + { + "key": "options.mouse_settings", + "english_translation": "Mouse Settings..." + }, + { + "key": "advancements.nether.all_effects.description", + "english_translation": "Have every effect applied at the same time" + }, + { + "key": "commands.item.target.no_changed.known_item", + "english_translation": "No targets accepted item %s into slot %s" + }, + { + "key": "subtitles.entity.generic.burn", + "english_translation": "Burning" + }, + { + "key": "block.minecraft.spruce_stairs", + "english_translation": "Spruce Stairs" + }, + { + "key": "advancements.adventure.trim_with_any_armor_pattern.description", + "english_translation": "Craft a trimmed armor at a Smithing Table" + }, + { + "key": "block.minecraft.banner.small_stripes.pink", + "english_translation": "Pink Paly" + }, + { + "key": "debug.profiling.stop", + "english_translation": "Profiling ended. Saved results to %s" + }, + { + "key": "item.minecraft.drowned_spawn_egg", + "english_translation": "Drowned Spawn Egg" + }, + { + "key": "item.minecraft.glow_item_frame", + "english_translation": "Glow Item Frame" + }, + { + "key": "advancements.husbandry.fishy_business.title", + "english_translation": "Fishy Business" + }, + { + "key": "multiplayer.requiredTexturePrompt.line2", + "english_translation": "Rejecting this custom resource pack will disconnect you from this server." + }, + { + "key": "multiplayer.requiredTexturePrompt.line1", + "english_translation": "This server requires the use of a custom resource pack." + }, + { + "key": "item.minecraft.splash_potion.effect.empty", + "english_translation": "Splash Uncraftable Potion" + }, + { + "key": "selectWorld.experimental.details.entry", + "english_translation": "Required experimental features: %s" + }, + { + "key": "subtitles.entity.generic.extinguish_fire", + "english_translation": "Fire extinguishes" + }, + { + "key": "spectatorMenu.root.prompt", + "english_translation": "Press a key to select a command, and again to use it." + }, + { + "key": "painting.minecraft.burning_skull.title", + "english_translation": "Skull On Fire" + }, + { + "key": "options.accessibility.link", + "english_translation": "Accessibility Guide" + }, + { + "key": "translation.test.world", + "english_translation": "world" + }, + { + "key": "block.minecraft.polished_deepslate_slab", + "english_translation": "Polished Deepslate Slab" + }, + { + "key": "options.graphics", + "english_translation": "Graphics" + }, + { + "key": "commands.trigger.add.success", + "english_translation": "Triggered %s (added %s to value)" + }, + { + "key": "subtitles.block.pointed_dripstone.drip_water", + "english_translation": "Water drips" + }, + { + "key": "gui.banned.reason.nudity_or_pornography", + "english_translation": "Displaying lewd or pornographic material" + }, + { + "key": "block.minecraft.blue_banner", + "english_translation": "Blue Banner" + }, + { + "key": "block.minecraft.mangrove_slab", + "english_translation": "Mangrove Slab" + }, + { + "key": "block.minecraft.banner.rhombus.brown", + "english_translation": "Brown Lozenge" + }, + { + "key": "chat.type.admin", + "english_translation": "[%s: %s]" + }, + { + "key": "deathScreen.respawn", + "english_translation": "Respawn" + }, + { + "key": "subtitles.block.beacon.activate", + "english_translation": "Beacon activates" + }, + { + "key": "subtitles.entity.warden.sonic_boom", + "english_translation": "Warden booms" + }, + { + "key": "createWorld.customize.custom.preset.isleLand", + "english_translation": "Isle Land" + }, + { + "key": "options.glintSpeed.tooltip", + "english_translation": "Controls how fast the visual glint shimmers across enchanted items." + }, + { + "key": "mount.onboard", + "english_translation": "Press %1$s to Dismount" + }, + { + "key": "subtitles.entity.cat.hiss", + "english_translation": "Cat hisses" + }, + { + "key": "block.minecraft.nether_gold_ore", + "english_translation": "Nether Gold Ore" + }, + { + "key": "item.minecraft.explorer_pottery_shard", + "english_translation": "Explorer Pottery Shard" + }, + { + "key": "block.minecraft.banner.flower.gray", + "english_translation": "Gray Flower Charge" + }, + { + "key": "multiplayer.disconnect.outdated_server", + "english_translation": "Incompatible client! Please use %s" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.lime", + "english_translation": "Lime Per Bend Sinister Inverted" + }, + { + "key": "block.minecraft.nether_wart", + "english_translation": "Nether Wart" + }, + { + "key": "commands.ban.failed", + "english_translation": "Nothing changed. The player is already banned" + }, + { + "key": "stat.minecraft.interact_with_stonecutter", + "english_translation": "Interactions with Stonecutter" + }, + { + "key": "item.minecraft.smithing_template.netherite_upgrade.additions_slot_description", + "english_translation": "Add Netherite Ingot" + }, + { + "key": "subtitles.block.lava.ambient", + "english_translation": "Lava pops" + }, + { + "key": "block.minecraft.scaffolding", + "english_translation": "Scaffolding" + }, + { + "key": "subtitles.entity.fox.bite", + "english_translation": "Fox bites" + }, + { + "key": "item.minecraft.potion.effect.levitation", + "english_translation": "Potion of Levitation" + }, + { + "key": "mco.upload.select.world.none", + "english_translation": "No singleplayer worlds found!" + }, + { + "key": "createWorld.customize.custom.center", + "english_translation": "Center Height" + }, + { + "key": "createWorld.customize.custom.confirmTitle", + "english_translation": "Warning!" + }, + { + "key": "subtitles.entity.camel.stand", + "english_translation": "Camel stands up" + }, + { + "key": "item.minecraft.pufferfish_spawn_egg", + "english_translation": "Pufferfish Spawn Egg" + }, + { + "key": "commands.team.option.nametagVisibility.success", + "english_translation": "Nametag visibility for team %s is now \"%s\"" + }, + { + "key": "item.minecraft.elytra", + "english_translation": "Elytra" + }, + { + "key": "biome.minecraft.deep_frozen_ocean", + "english_translation": "Deep Frozen Ocean" + }, + { + "key": "block.minecraft.banner.creeper.pink", + "english_translation": "Pink Creeper Charge" + }, + { + "key": "commands.scoreboard.players.remove.success.multiple", + "english_translation": "Removed %s from %s for %s entities" + }, + { + "key": "block.minecraft.banner.diagonal_right.blue", + "english_translation": "Blue Per Bend" + }, + { + "key": "key.inventory", + "english_translation": "Open/Close Inventory" + }, + { + "key": "structure_block.mode_info.data", + "english_translation": "Data Mode - Game Logic Marker" + }, + { + "key": "gui.socialInteractions.server_label.multiple", + "english_translation": "%s - %s players" + }, + { + "key": "options.telemetry.state.none", + "english_translation": "None" + }, + { + "key": "gamerule.doImmediateRespawn", + "english_translation": "Respawn immediately" + }, + { + "key": "advancements.adventure.voluntary_exile.title", + "english_translation": "Voluntary Exile" + }, + { + "key": "mco.backup.nobackups", + "english_translation": "This realm doesn't have any backups currently." + }, + { + "key": "gui.chatReport.selected_chat", + "english_translation": "%s Chat Message(s) Selected to Report" + }, + { + "key": "argument.entity.options.unknown", + "english_translation": "Unknown option '%s'" + }, + { + "key": "commands.place.feature.failed", + "english_translation": "Failed to place feature" + }, + { + "key": "subtitles.entity.turtle.egg_hatch", + "english_translation": "Turtle Egg hatches" + }, + { + "key": "item.minecraft.mutton", + "english_translation": "Raw Mutton" + }, + { + "key": "block.minecraft.banner.curly_border.brown", + "english_translation": "Brown Bordure Indented" + }, + { + "key": "entity.minecraft.cave_spider", + "english_translation": "Cave Spider" + }, + { + "key": "disconnect.unknownHost", + "english_translation": "Unknown host" + }, + { + "key": "gui.continue", + "english_translation": "Continue" + }, + { + "key": "controls.keybinds.title", + "english_translation": "Key Binds" + }, + { + "key": "block.minecraft.banner.half_vertical_right.magenta", + "english_translation": "Magenta Per Pale Inverted" + }, + { + "key": "subtitles.item.bundle.remove_one", + "english_translation": "Item unpacked" + }, + { + "key": "commands.data.entity.get", + "english_translation": "%s on %s after scale factor of %s is %s" + }, + { + "key": "commands.advancement.revoke.criterion.to.one.failure", + "english_translation": "Couldn't revoke criterion '%s' of advancement %s from %s as they don't have it" + }, + { + "key": "block.minecraft.skeleton_wall_skull", + "english_translation": "Skeleton Wall Skull" + }, + { + "key": "subtitles.entity.frog.death", + "english_translation": "Frog dies" + }, + { + "key": "gameMode.survival", + "english_translation": "Survival Mode" + }, + { + "key": "item.minecraft.sign", + "english_translation": "Sign" + }, + { + "key": "block.minecraft.purpur_stairs", + "english_translation": "Purpur Stairs" + }, + { + "key": "commands.scoreboard.objectives.display.alreadySet", + "english_translation": "Nothing changed. That display slot is already showing that objective" + }, + { + "key": "block.minecraft.banner.circle.green", + "english_translation": "Green Roundel" + }, + { + "key": "entity.minecraft.llama", + "english_translation": "Llama" + }, + { + "key": "subtitles.entity.iron_golem.death", + "english_translation": "Iron Golem dies" + }, + { + "key": "subtitles.entity.parrot.imitate.stray", + "english_translation": "Parrot rattles" + }, + { + "key": "item.minecraft.lingering_potion.effect.healing", + "english_translation": "Lingering Potion of Healing" + }, + { + "key": "mco.configure.world.location", + "english_translation": "Location" + }, + { + "key": "argument.float.low", + "english_translation": "Float must not be less than %s, found %s" + }, + { + "key": "block.minecraft.banner.half_vertical.brown", + "english_translation": "Brown Per Pale" + }, + { + "key": "block.minecraft.hay_block", + "english_translation": "Hay Bale" + }, + { + "key": "createWorld.customize.flat.removeLayer", + "english_translation": "Remove Layer" + }, + { + "key": "mco.configure.world.players.error", + "english_translation": "A player with the provided name does not exist" + }, + { + "key": "block.minecraft.banner.stripe_bottom.light_gray", + "english_translation": "Light Gray Base" + }, + { + "key": "block.minecraft.crimson_fungus", + "english_translation": "Crimson Fungus" + }, + { + "key": "subtitles.entity.sniffer.happy", + "english_translation": "Sniffer delights" + }, + { + "key": "selectWorld.versionJoinButton", + "english_translation": "Load Anyway" + }, + { + "key": "gameMode.adventure", + "english_translation": "Adventure Mode" + }, + { + "key": "subtitles.entity.bee.pollinate", + "english_translation": "Bee buzzes happily" + }, + { + "key": "block.minecraft.note_block", + "english_translation": "Note Block" + }, + { + "key": "item.minecraft.golden_leggings", + "english_translation": "Golden Leggings" + }, + { + "key": "item.minecraft.pumpkin_pie", + "english_translation": "Pumpkin Pie" + }, + { + "key": "subtitles.item.crop.plant", + "english_translation": "Crop planted" + }, + { + "key": "mco.configure.world.subscription.remaining.months.days", + "english_translation": "%1$s month(s), %2$s day(s)" + }, + { + "key": "subtitles.entity.camel.saddle", + "english_translation": "Saddle equips" + }, + { + "key": "commands.bossbar.create.success", + "english_translation": "Created custom bossbar %s" + }, + { + "key": "block.minecraft.banner.curly_border.lime", + "english_translation": "Lime Bordure Indented" + }, + { + "key": "mco.brokenworld.downloaded", + "english_translation": "Downloaded" + }, + { + "key": "advancements.story.mine_diamond.description", + "english_translation": "Acquire diamonds" + }, + { + "key": "block.minecraft.red_shulker_box", + "english_translation": "Red Shulker Box" + }, + { + "key": "subtitles.entity.turtle.swim", + "english_translation": "Turtle swims" + }, + { + "key": "block.minecraft.banner.flower.light_blue", + "english_translation": "Light Blue Flower Charge" + }, + { + "key": "painting.minecraft.aztec2.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "stat_type.minecraft.broken", + "english_translation": "Times Broken" + }, + { + "key": "subtitles.entity.fishing_bobber.retrieve", + "english_translation": "Bobber retrieved" + }, + { + "key": "block.minecraft.wall_torch", + "english_translation": "Wall Torch" + }, + { + "key": "entity.minecraft.horse", + "english_translation": "Horse" + }, + { + "key": "mco.backup.info.title", + "english_translation": "Changes from last backup" + }, + { + "key": "options.audioDevice", + "english_translation": "Device" + }, + { + "key": "key.spectatorOutlines", + "english_translation": "Highlight Players (Spectators)" + }, + { + "key": "block.minecraft.diorite_stairs", + "english_translation": "Diorite Stairs" + }, + { + "key": "block.minecraft.acacia_wall_hanging_sign", + "english_translation": "Acacia Wall Hanging Sign" + }, + { + "key": "block.minecraft.light_gray_terracotta", + "english_translation": "Light Gray Terracotta" + }, + { + "key": "block.minecraft.banner.piglin.black", + "english_translation": "Black Snout" + }, + { + "key": "attribute.name.generic.armor_toughness", + "english_translation": "Armor Toughness" + }, + { + "key": "block.minecraft.banner.stripe_bottom.green", + "english_translation": "Green Base" + }, + { + "key": "block.minecraft.banner.square_top_left.red", + "english_translation": "Red Chief Dexter Canton" + }, + { + "key": "death.attack.indirectMagic.item", + "english_translation": "%1$s was killed by %2$s using %3$s" + }, + { + "key": "gamerule.doMobLoot", + "english_translation": "Drop mob loot" + }, + { + "key": "item.minecraft.music_disc_otherside", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.banner.small_stripes.brown", + "english_translation": "Brown Paly" + }, + { + "key": "block.minecraft.player_head", + "english_translation": "Player Head" + }, + { + "key": "advancements.end.enter_end_gateway.description", + "english_translation": "Escape the island" + }, + { + "key": "dataPack.validation.back", + "english_translation": "Go Back" + }, + { + "key": "item.minecraft.netherite_scrap", + "english_translation": "Netherite Scrap" + }, + { + "key": "argument.item.tag.disallowed", + "english_translation": "Tags aren't allowed here, only actual items" + }, + { + "key": "options.key.hold", + "english_translation": "Hold" + }, + { + "key": "selectWorld.recreate.error.title", + "english_translation": "An error occurred!" + }, + { + "key": "filled_map.id", + "english_translation": "Id #%s" + }, + { + "key": "gui.socialInteractions.tooltip.show", + "english_translation": "Show messages" + }, + { + "key": "subtitles.entity.phantom.flap", + "english_translation": "Phantom flaps" + }, + { + "key": "generator.single_biome_caves", + "english_translation": "Caves" + }, + { + "key": "subtitles.entity.rabbit.hurt", + "english_translation": "Rabbit hurts" + }, + { + "key": "subtitles.entity.ravager.roar", + "english_translation": "Ravager roars" + }, + { + "key": "block.minecraft.banner.mojang.blue", + "english_translation": "Blue Thing" + }, + { + "key": "mco.upload.preparing", + "english_translation": "Preparing your world" + }, + { + "key": "block.minecraft.banner.stripe_left.brown", + "english_translation": "Brown Pale Dexter" + }, + { + "key": "enchantment.minecraft.loyalty", + "english_translation": "Loyalty" + }, + { + "key": "block.minecraft.banner.circle.black", + "english_translation": "Black Roundel" + }, + { + "key": "menu.loadingForcedChunks", + "english_translation": "Loading forced chunks for dimension %s" + }, + { + "key": "subtitles.entity.illusioner.hurt", + "english_translation": "Illusioner hurts" + }, + { + "key": "block.minecraft.torchflower_crop", + "english_translation": "Torchflower Crop" + }, + { + "key": "subtitles.entity.silverfish.hurt", + "english_translation": "Silverfish hurts" + }, + { + "key": "block.minecraft.banner.square_top_right.pink", + "english_translation": "Pink Chief Sinister Canton" + }, + { + "key": "block.minecraft.banner.curly_border.blue", + "english_translation": "Blue Bordure Indented" + }, + { + "key": "item.minecraft.blade_pottery_shard", + "english_translation": "Blade Pottery Shard" + }, + { + "key": "block.minecraft.banner.square_top_left.gray", + "english_translation": "Gray Chief Dexter Canton" + }, + { + "key": "block.minecraft.mangrove_leaves", + "english_translation": "Mangrove Leaves" + }, + { + "key": "selectWorld.enterSeed", + "english_translation": "Seed for the world generator" + }, + { + "key": "subtitles.block.pointed_dripstone.land", + "english_translation": "Stalactite crashes down" + }, + { + "key": "pack.source.feature", + "english_translation": "feature" + }, + { + "key": "commands.publish.failed", + "english_translation": "Unable to host local game" + }, + { + "key": "gui.proceed", + "english_translation": "Proceed" + }, + { + "key": "block.minecraft.banner.rhombus.pink", + "english_translation": "Pink Lozenge" + }, + { + "key": "item.minecraft.blaze_rod", + "english_translation": "Blaze Rod" + }, + { + "key": "structure_block.position", + "english_translation": "Relative Position" + }, + { + "key": "item.minecraft.tipped_arrow.effect.turtle_master", + "english_translation": "Arrow of the Turtle Master" + }, + { + "key": "item.minecraft.iron_sword", + "english_translation": "Iron Sword" + }, + { + "key": "subtitles.entity.mooshroom.suspicious_milk", + "english_translation": "Mooshroom gets milked suspiciously" + }, + { + "key": "death.fell.accident.vines", + "english_translation": "%1$s fell off some vines" + }, + { + "key": "block.minecraft.banner.stripe_downleft.cyan", + "english_translation": "Cyan Bend Sinister" + }, + { + "key": "block.minecraft.banner.bricks.magenta", + "english_translation": "Magenta Field Masoned" + }, + { + "key": "gui.socialInteractions.show", + "english_translation": "Show in Chat" + }, + { + "key": "container.creative", + "english_translation": "Item Selection" + }, + { + "key": "block.minecraft.banner.mojang.lime", + "english_translation": "Lime Thing" + }, + { + "key": "entity.minecraft.armor_stand", + "english_translation": "Armor Stand" + }, + { + "key": "telemetry.property.world_load_time_ms.title", + "english_translation": "World Load Time (Milliseconds)" + }, + { + "key": "block.minecraft.banner.stripe_center.gray", + "english_translation": "Gray Pale" + }, + { + "key": "entity.minecraft.zoglin", + "english_translation": "Zoglin" + }, + { + "key": "gui.narrate.tab", + "english_translation": "%s tab" + }, + { + "key": "block.minecraft.candle_cake", + "english_translation": "Cake with Candle" + }, + { + "key": "subtitles.entity.cow.death", + "english_translation": "Cow dies" + }, + { + "key": "effect.minecraft.invisibility", + "english_translation": "Invisibility" + }, + { + "key": "gamerule.mobExplosionDropDecay.description", + "english_translation": "Some of the drops from blocks destroyed by explosions caused by mobs are lost in the explosion." + }, + { + "key": "block.minecraft.acacia_leaves", + "english_translation": "Acacia Leaves" + }, + { + "key": "block.minecraft.banner.stripe_bottom.black", + "english_translation": "Black Base" + }, + { + "key": "commands.effect.clear.everything.failed", + "english_translation": "Target has no effects to remove" + }, + { + "key": "block.minecraft.banner.gradient.red", + "english_translation": "Red Gradient" + }, + { + "key": "block.minecraft.banner.diagonal_right.lime", + "english_translation": "Lime Per Bend" + }, + { + "key": "block.minecraft.banner.flower.black", + "english_translation": "Black Flower Charge" + }, + { + "key": "options.chat.visibility", + "english_translation": "Chat" + }, + { + "key": "block.minecraft.warped_stem", + "english_translation": "Warped Stem" + }, + { + "key": "block.minecraft.soul_wall_torch", + "english_translation": "Soul Wall Torch" + }, + { + "key": "death.attack.witherSkull", + "english_translation": "%1$s was shot by a skull from %2$s" + }, + { + "key": "mco.brokenworld.reset", + "english_translation": "Reset" + }, + { + "key": "block.minecraft.banner.triangle_bottom.cyan", + "english_translation": "Cyan Chevron" + }, + { + "key": "potion.potency.5", + "english_translation": "VI" + }, + { + "key": "tutorial.craft_planks.description", + "english_translation": "The recipe book can help" + }, + { + "key": "key.keyboard.keypad.multiply", + "english_translation": "Keypad *" + }, + { + "key": "commands.scoreboard.players.add.success.single", + "english_translation": "Added %s to %s for %s (now %s)" + }, + { + "key": "item.minecraft.lingering_potion.effect.luck", + "english_translation": "Lingering Potion of Luck" + }, + { + "key": "gui.chatReport.draft.title", + "english_translation": "Edit draft chat report?" + }, + { + "key": "block.minecraft.banner.stripe_right.magenta", + "english_translation": "Magenta Pale Sinister" + }, + { + "key": "gamerule.universalAnger", + "english_translation": "Universal anger" + }, + { + "key": "subtitles.entity.cow.hurt", + "english_translation": "Cow hurts" + }, + { + "key": "subtitles.item.hoe.till", + "english_translation": "Hoe tills" + }, + { + "key": "stat.minecraft.walk_on_water_one_cm", + "english_translation": "Distance Walked on Water" + }, + { + "key": "item.minecraft.friend_pottery_shard", + "english_translation": "Friend Pottery Shard" + }, + { + "key": "commands.save.saving", + "english_translation": "Saving the game (this may take a moment!)" + }, + { + "key": "block.minecraft.dead_fire_coral_block", + "english_translation": "Dead Fire Coral Block" + }, + { + "key": "block.minecraft.birch_planks", + "english_translation": "Birch Planks" + }, + { + "key": "block.minecraft.stone_slab", + "english_translation": "Stone Slab" + }, + { + "key": "gamerule.spectatorsGenerateChunks", + "english_translation": "Allow spectators to generate terrain" + }, + { + "key": "entity.minecraft.guardian", + "english_translation": "Guardian" + }, + { + "key": "potion.potency.0", + "english_translation": "" + }, + { + "key": "gui.abuseReport.reason.false_reporting", + "english_translation": "False Reporting" + }, + { + "key": "block.minecraft.frosted_ice", + "english_translation": "Frosted Ice" + }, + { + "key": "potion.potency.4", + "english_translation": "V" + }, + { + "key": "block.minecraft.oak_slab", + "english_translation": "Oak Slab" + }, + { + "key": "commands.whitelist.alreadyOff", + "english_translation": "Whitelist is already turned off" + }, + { + "key": "potion.potency.3", + "english_translation": "IV" + }, + { + "key": "potion.potency.2", + "english_translation": "III" + }, + { + "key": "potion.potency.1", + "english_translation": "II" + }, + { + "key": "selectWorld.futureworld.error.text", + "english_translation": "Something went wrong while trying to load a world from a future version. This was a risky operation to begin with; sorry it didn't work." + }, + { + "key": "block.minecraft.pearlescent_froglight", + "english_translation": "Pearlescent Froglight" + }, + { + "key": "mco.selectServer.minigameNotSupportedInVersion", + "english_translation": "Can't play this minigame in %s" + }, + { + "key": "translation.test.args", + "english_translation": "%s %s" + }, + { + "key": "entity.minecraft.painting", + "english_translation": "Painting" + }, + { + "key": "selectWorld.experimental.details", + "english_translation": "Details" + }, + { + "key": "hanging_sign.edit", + "english_translation": "Edit Hanging Sign Message" + }, + { + "key": "entity.minecraft.villager.librarian", + "english_translation": "Librarian" + }, + { + "key": "argument.entity.options.y_rotation.description", + "english_translation": "Entity's y rotation" + }, + { + "key": "advancements.story.lava_bucket.title", + "english_translation": "Hot Stuff" + }, + { + "key": "narration.checkbox", + "english_translation": "Checkbox: %s" + }, + { + "key": "item.minecraft.vex_spawn_egg", + "english_translation": "Vex Spawn Egg" + }, + { + "key": "stat.minecraft.boat_one_cm", + "english_translation": "Distance by Boat" + }, + { + "key": "biome.minecraft.dripstone_caves", + "english_translation": "Dripstone Caves" + }, + { + "key": "subtitles.block.big_dripleaf.tilt_up", + "english_translation": "Dripleaf tilts up" + }, + { + "key": "gui.banned.description.reason_id_message", + "english_translation": "Code: %s - %s" + }, + { + "key": "advancements.adventure.spyglass_at_parrot.title", + "english_translation": "Is It a Bird?" + }, + { + "key": "block.minecraft.banner.circle.red", + "english_translation": "Red Roundel" + }, + { + "key": "debug.gamemodes.press_f4", + "english_translation": "[ F4 ]" + }, + { + "key": "block.minecraft.muddy_mangrove_roots", + "english_translation": "Muddy Mangrove Roots" + }, + { + "key": "event.minecraft.raid", + "english_translation": "Raid" + }, + { + "key": "enchantment.minecraft.power", + "english_translation": "Power" + }, + { + "key": "options.prioritizeChunkUpdates.none", + "english_translation": "Threaded" + }, + { + "key": "subtitles.entity.ravager.hurt", + "english_translation": "Ravager hurts" + }, + { + "key": "block.minecraft.warped_pressure_plate", + "english_translation": "Warped Pressure Plate" + }, + { + "key": "block.minecraft.horn_coral_fan", + "english_translation": "Horn Coral Fan" + }, + { + "key": "advancements.toast.challenge", + "english_translation": "Challenge Complete!" + }, + { + "key": "commands.experience.add.points.success.single", + "english_translation": "Gave %s experience points to %s" + }, + { + "key": "item.minecraft.zoglin_spawn_egg", + "english_translation": "Zoglin Spawn Egg" + }, + { + "key": "generator.minecraft.amplified", + "english_translation": "AMPLIFIED" + }, + { + "key": "subtitles.block.bubble_column.upwards_inside", + "english_translation": "Bubbles woosh" + }, + { + "key": "item.minecraft.lingering_potion.effect.water", + "english_translation": "Lingering Water Bottle" + }, + { + "key": "commands.team.empty.success", + "english_translation": "Removed %s member(s) from team %s" + }, + { + "key": "death.fell.accident.weeping_vines", + "english_translation": "%1$s fell off some weeping vines" + }, + { + "key": "mco.configure.world.slot.empty", + "english_translation": "Empty" + }, + { + "key": "enchantment.minecraft.lure", + "english_translation": "Lure" + }, + { + "key": "item.minecraft.miner_pottery_shard", + "english_translation": "Miner Pottery Shard" + }, + { + "key": "commands.team.option.color.unchanged", + "english_translation": "Nothing changed. That team already has that color" + }, + { + "key": "subtitles.entity.axolotl.idle_air", + "english_translation": "Axolotl chirps" + }, + { + "key": "argument.nbt.expected.value", + "english_translation": "Expected value" + }, + { + "key": "mco.backup.entry.name", + "english_translation": "Name" + }, + { + "key": "soundCategory.neutral", + "english_translation": "Friendly Creatures" + }, + { + "key": "block.minecraft.pointed_dripstone", + "english_translation": "Pointed Dripstone" + }, + { + "key": "subtitles.block.generic.place", + "english_translation": "Block placed" + }, + { + "key": "advancements.nether.summon_wither.title", + "english_translation": "Withering Heights" + }, + { + "key": "mco.configure.world.edit.subscreen.adventuremap", + "english_translation": "Some settings are disabled since your current world is an adventure" + }, + { + "key": "block.minecraft.banner.diagonal_left.white", + "english_translation": "White Per Bend Sinister" + }, + { + "key": "block.minecraft.banner.small_stripes.magenta", + "english_translation": "Magenta Paly" + }, + { + "key": "subtitles.entity.blaze.ambient", + "english_translation": "Blaze breathes" + }, + { + "key": "gamerule.fireDamage", + "english_translation": "Deal fire damage" + }, + { + "key": "commands.pardonip.failed", + "english_translation": "Nothing changed. That IP isn't banned" + }, + { + "key": "telemetry.event.game_load_times.title", + "english_translation": "Game Load Times" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.white", + "english_translation": "White Per Bend Sinister Inverted" + }, + { + "key": "telemetry.event.world_loaded.title", + "english_translation": "World Loaded" + }, + { + "key": "stat.minecraft.talked_to_villager", + "english_translation": "Talked to Villagers" + }, + { + "key": "title.multiplayer.lan", + "english_translation": "Multiplayer (LAN)" + }, + { + "key": "commands.effect.give.failed", + "english_translation": "Unable to apply this effect (target is either immune to effects, or has something stronger)" + }, + { + "key": "subtitles.entity.zombified_piglin.hurt", + "english_translation": "Zombified Piglin hurts" + }, + { + "key": "advancements.husbandry.tadpole_in_a_bucket.description", + "english_translation": "Catch a Tadpole in a Bucket" + }, + { + "key": "block.minecraft.bamboo_pressure_plate", + "english_translation": "Bamboo Pressure Plate" + }, + { + "key": "painting.minecraft.aztec.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "demo.help.buy", + "english_translation": "Purchase Now!" + }, + { + "key": "mco.error.invalid.session.title", + "english_translation": "Invalid session" + }, + { + "key": "subtitles.entity.lightning_bolt.thunder", + "english_translation": "Thunder roars" + }, + { + "key": "disconnect.loginFailedInfo.serversUnavailable", + "english_translation": "The authentication servers are currently not reachable. Please try again." + }, + { + "key": "mco.warning", + "english_translation": "Warning!" + }, + { + "key": "item.minecraft.disc_fragment_5.desc", + "english_translation": "Music Disc - 5" + }, + { + "key": "mco.configure.world.closing", + "english_translation": "Closing the realm..." + }, + { + "key": "block.minecraft.yellow_concrete", + "english_translation": "Yellow Concrete" + }, + { + "key": "entity.minecraft.villager.armorer", + "english_translation": "Armorer" + }, + { + "key": "subtitles.entity.sniffer.idle", + "english_translation": "Sniffer grunts" + }, + { + "key": "block.minecraft.cherry_stairs", + "english_translation": "Cherry Stairs" + }, + { + "key": "mco.backup.button.restore", + "english_translation": "Restore" + }, + { + "key": "gui.socialInteractions.title", + "english_translation": "Social Interactions" + }, + { + "key": "item.minecraft.ravager_spawn_egg", + "english_translation": "Ravager Spawn Egg" + }, + { + "key": "block.minecraft.twisting_vines_plant", + "english_translation": "Twisting Vines Plant" + }, + { + "key": "block.minecraft.banner.half_vertical.white", + "english_translation": "White Per Pale" + }, + { + "key": "effect.minecraft.hero_of_the_village", + "english_translation": "Hero of the Village" + }, + { + "key": "createWorld.customize.flat.layer.top", + "english_translation": "Top - %s" + }, + { + "key": "mco.reset.world.warning", + "english_translation": "This will replace the current world of your realm" + }, + { + "key": "death.attack.arrow", + "english_translation": "%1$s was shot by %2$s" + }, + { + "key": "block.minecraft.void_air", + "english_translation": "Void Air" + }, + { + "key": "item.minecraft.ghast_spawn_egg", + "english_translation": "Ghast Spawn Egg" + }, + { + "key": "block.minecraft.gray_concrete_powder", + "english_translation": "Gray Concrete Powder" + }, + { + "key": "commands.place.template.invalid", + "english_translation": "There is no template with id \"%s\"" + }, + { + "key": "multiplayer.disconnect.ip_banned", + "english_translation": "You have been IP banned from this server" + }, + { + "key": "mco.download.cancelled", + "english_translation": "Download cancelled" + }, + { + "key": "options.percent_add_value", + "english_translation": "%s: +%s%%" + }, + { + "key": "item.minecraft.firework_star.light_gray", + "english_translation": "Light Gray" + }, + { + "key": "entity.minecraft.zombie_horse", + "english_translation": "Zombie Horse" + }, + { + "key": "argument.resource.not_found", + "english_translation": "Can't find element '%s' of type '%s'" + }, + { + "key": "flat_world_preset.minecraft.bottomless_pit", + "english_translation": "Bottomless Pit" + }, + { + "key": "subtitles.entity.turtle.shamble", + "english_translation": "Turtle shambles" + }, + { + "key": "argument.entity.options.valueless", + "english_translation": "Expected value for option '%s'" + }, + { + "key": "addServer.resourcePack", + "english_translation": "Server Resource Packs" + }, + { + "key": "commands.worldborder.get", + "english_translation": "The world border is currently %s block(s) wide" + }, + { + "key": "key.screenshot", + "english_translation": "Take Screenshot" + }, + { + "key": "gui.banned.title.temporary", + "english_translation": "Account temporarily suspended" + }, + { + "key": "block.minecraft.banner.triangles_bottom.cyan", + "english_translation": "Cyan Base Indented" + }, + { + "key": "block.minecraft.white_concrete", + "english_translation": "White Concrete" + }, + { + "key": "block.minecraft.birch_wall_sign", + "english_translation": "Birch Wall Sign" + }, + { + "key": "advancements.husbandry.ride_a_boat_with_a_goat.title", + "english_translation": "Whatever Floats Your Goat!" + }, + { + "key": "block.minecraft.banner.base.gray", + "english_translation": "Fully Gray Field" + }, + { + "key": "item.minecraft.experience_bottle", + "english_translation": "Bottle o' Enchanting" + }, + { + "key": "subtitles.entity.bat.death", + "english_translation": "Bat dies" + }, + { + "key": "instrument.minecraft.sing_goat_horn", + "english_translation": "Sing" + }, + { + "key": "subtitles.block.generic.break", + "english_translation": "Block broken" + }, + { + "key": "gui.banned.description.unknownreason", + "english_translation": "We recently received a report for bad behavior by your account. Our moderators have now reviewed your case and identified that it goes against the Minecraft Community Standards." + }, + { + "key": "commands.whitelist.add.success", + "english_translation": "Added %s to the whitelist" + }, + { + "key": "commands.clone.success", + "english_translation": "Successfully cloned %s block(s)" + }, + { + "key": "death.attack.explosion", + "english_translation": "%1$s blew up" + }, + { + "key": "entity.minecraft.glow_squid", + "english_translation": "Glow Squid" + }, + { + "key": "block.minecraft.crimson_hyphae", + "english_translation": "Crimson Hyphae" + }, + { + "key": "pack.dropInfo", + "english_translation": "Drag and drop files into this window to add packs" + }, + { + "key": "block.minecraft.black_wool", + "english_translation": "Black Wool" + }, + { + "key": "selectWorld.warning.experimental.question", + "english_translation": "These settings are experimental and could one day stop working. Do you wish to proceed?" + }, + { + "key": "block.minecraft.magenta_bed", + "english_translation": "Magenta Bed" + }, + { + "key": "subtitles.entity.snow_golem.death", + "english_translation": "Snow Golem dies" + }, + { + "key": "commands.spectate.self", + "english_translation": "Cannot spectate yourself" + }, + { + "key": "item.minecraft.lingering_potion.effect.regeneration", + "english_translation": "Lingering Potion of Regeneration" + }, + { + "key": "telemetry.property.load_time_loading_overlay_ms.title", + "english_translation": "Time in Loading Screen (Milliseconds)" + }, + { + "key": "block.minecraft.banner.cross.red", + "english_translation": "Red Saltire" + }, + { + "key": "block.minecraft.red_mushroom_block", + "english_translation": "Red Mushroom Block" + }, + { + "key": "entity.minecraft.fireball", + "english_translation": "Fireball" + }, + { + "key": "instrument.minecraft.ponder_goat_horn", + "english_translation": "Ponder" + }, + { + "key": "mirror.none", + "english_translation": "|" + }, + { + "key": "subtitles.entity.zombie.converted_to_drowned", + "english_translation": "Zombie converts to Drowned" + }, + { + "key": "subtitles.entity.wandering_trader.no", + "english_translation": "Wandering Trader disagrees" + }, + { + "key": "stat.minecraft.leave_game", + "english_translation": "Games Quit" + }, + { + "key": "block.minecraft.banner.gradient_up.blue", + "english_translation": "Blue Base Gradient" + }, + { + "key": "advancements.nether.ride_strider_in_overworld_lava.title", + "english_translation": "Feels Like Home" + }, + { + "key": "item.minecraft.mooshroom_spawn_egg", + "english_translation": "Mooshroom Spawn Egg" + }, + { + "key": "commands.attribute.modifier.value.get.success", + "english_translation": "Value of modifier %s on attribute %s for entity %s is %s" + }, + { + "key": "stat.minecraft.damage_blocked_by_shield", + "english_translation": "Damage Blocked by Shield" + }, + { + "key": "item.minecraft.smithing_template.armor_trim.ingredients", + "english_translation": "Ingots & Crystals" + }, + { + "key": "argument.long.big", + "english_translation": "Long must not be more than %s, found %s" + }, + { + "key": "subtitles.entity.goat.death", + "english_translation": "Goat dies" + }, + { + "key": "item.minecraft.netherite_helmet", + "english_translation": "Netherite Helmet" + }, + { + "key": "telemetry.property.user_id.title", + "english_translation": "User ID" + }, + { + "key": "key.swapOffhand", + "english_translation": "Swap Item With Offhand" + }, + { + "key": "subtitles.item.armor.equip_chain", + "english_translation": "Chain armor jingles" + }, + { + "key": "key.jump", + "english_translation": "Jump" + }, + { + "key": "selectWorld.delete_failure", + "english_translation": "Failed to delete world" + }, + { + "key": "block.minecraft.banner.bricks.orange", + "english_translation": "Orange Field Masoned" + }, + { + "key": "selectWorld.futureworld.error.title", + "english_translation": "An error occurred!" + }, + { + "key": "block.minecraft.banner.triangle_top.yellow", + "english_translation": "Yellow Inverted Chevron" + }, + { + "key": "soundCategory.master", + "english_translation": "Master Volume" + }, + { + "key": "jigsaw_block.keep_jigsaws", + "english_translation": "Keep Jigsaws" + }, + { + "key": "subtitles.item.ink_sac.use", + "english_translation": "Ink Sac splotches" + }, + { + "key": "subtitles.entity.villager.trade", + "english_translation": "Villager trades" + }, + { + "key": "block.minecraft.frogspawn", + "english_translation": "Frogspawn" + }, + { + "key": "subtitles.entity.wolf.hurt", + "english_translation": "Wolf hurts" + }, + { + "key": "argument.entity.options.team.description", + "english_translation": "Entities on team" + }, + { + "key": "telemetry.property.advancement_game_time.title", + "english_translation": "Game Time (Ticks)" + }, + { + "key": "item.minecraft.music_disc_5", + "english_translation": "Music Disc" + }, + { + "key": "commands.team.option.nametagVisibility.unchanged", + "english_translation": "Nothing changed. Nametag visibility is already that value" + }, + { + "key": "block.minecraft.oak_pressure_plate", + "english_translation": "Oak Pressure Plate" + }, + { + "key": "mco.backup.button.download", + "english_translation": "Download latest" + }, + { + "key": "advancements.adventure.spyglass_at_dragon.title", + "english_translation": "Is It a Plane?" + }, + { + "key": "commands.title.show.actionbar.single", + "english_translation": "Showing new actionbar title for %s" + }, + { + "key": "lectern.take_book", + "english_translation": "Take Book" + }, + { + "key": "subtitles.entity.painting.break", + "english_translation": "Painting breaks" + }, + { + "key": "block.minecraft.birch_wood", + "english_translation": "Birch Wood" + }, + { + "key": "createWorld.customize.custom.randomize", + "english_translation": "Randomize" + }, + { + "key": "block.minecraft.banner.gradient_up.lime", + "english_translation": "Lime Base Gradient" + }, + { + "key": "enchantment.minecraft.thorns", + "english_translation": "Thorns" + }, + { + "key": "commands.bossbar.set.name.unchanged", + "english_translation": "Nothing changed. That's already the name of this bossbar" + }, + { + "key": "argument.criteria.invalid", + "english_translation": "Unknown criterion '%s'" + }, + { + "key": "connect.authorizing", + "english_translation": "Logging in..." + }, + { + "key": "death.attack.flyIntoWall.player", + "english_translation": "%1$s experienced kinetic energy whilst trying to escape %2$s" + }, + { + "key": "commands.tag.list.multiple.empty", + "english_translation": "There are no tags on the %s entities" + }, + { + "key": "key.keyboard.space", + "english_translation": "Space" + }, + { + "key": "key.socialInteractions", + "english_translation": "Social Interactions Screen" + }, + { + "key": "commands.team.option.deathMessageVisibility.success", + "english_translation": "Death message visibility for team %s is now \"%s\"" + }, + { + "key": "gui.chatReport.discard.return", + "english_translation": "Continue Editing" + }, + { + "key": "block.minecraft.amethyst_block", + "english_translation": "Block of Amethyst" + }, + { + "key": "item.minecraft.red_dye", + "english_translation": "Red Dye" + }, + { + "key": "subtitles.entity.painting.place", + "english_translation": "Painting placed" + }, + { + "key": "mco.minigame.world.noSelection", + "english_translation": "Please make a selection" + }, + { + "key": "block.minecraft.banner.small_stripes.orange", + "english_translation": "Orange Paly" + }, + { + "key": "subtitles.entity.iron_golem.damage", + "english_translation": "Iron Golem breaks" + }, + { + "key": "pack.openFolder", + "english_translation": "Open Pack Folder" + }, + { + "key": "addServer.resourcePack.enabled", + "english_translation": "Enabled" + }, + { + "key": "block.minecraft.air", + "english_translation": "Air" + }, + { + "key": "title.32bit.deprecation.realms.header", + "english_translation": "32-bit system detected" + }, + { + "key": "commands.place.jigsaw.failed", + "english_translation": "Failed to generate jigsaw" + }, + { + "key": "subtitles.entity.parrot.imitate.slime", + "english_translation": "Parrot squishes" + }, + { + "key": "commands.debug.alreadyRunning", + "english_translation": "The tick profiler is already started" + }, + { + "key": "block.minecraft.banner.curly_border.orange", + "english_translation": "Orange Bordure Indented" + }, + { + "key": "block.minecraft.poppy", + "english_translation": "Poppy" + }, + { + "key": "block.minecraft.cherry_hanging_sign", + "english_translation": "Cherry Hanging Sign" + }, + { + "key": "item.minecraft.firework_rocket", + "english_translation": "Firework Rocket" + }, + { + "key": "advancements.nether.create_full_beacon.title", + "english_translation": "Beaconator" + }, + { + "key": "block.minecraft.crimson_pressure_plate", + "english_translation": "Crimson Pressure Plate" + }, + { + "key": "item.canPlace", + "english_translation": "Can be placed on:" + }, + { + "key": "subtitles.entity.illusioner.prepare_mirror", + "english_translation": "Illusioner prepares mirror image" + }, + { + "key": "gamerule.doEntityDrops.description", + "english_translation": "Controls drops from minecarts (including inventories), item frames, boats, etc." + }, + { + "key": "item.minecraft.shield.brown", + "english_translation": "Brown Shield" + }, + { + "key": "subtitles.entity.wither.shoot", + "english_translation": "Wither attacks" + }, + { + "key": "mco.selectServer.configure", + "english_translation": "Configure" + }, + { + "key": "commands.debug.function.traceFailed", + "english_translation": "Failed to trace function" + }, + { + "key": "options.sensitivity.max", + "english_translation": "HYPERSPEED!!!" + }, + { + "key": "gui.up", + "english_translation": "Up" + }, + { + "key": "commands.fill.failed", + "english_translation": "No blocks were filled" + }, + { + "key": "options.prioritizeChunkUpdates.byPlayer.tooltip", + "english_translation": "Some actions within a chunk will recompile the chunk immediately. This includes block placing & destroying." + }, + { + "key": "commands.scoreboard.objectives.modify.rendertype", + "english_translation": "Changed the render type of objective %s" + }, + { + "key": "commands.advancement.revoke.criterion.to.many.success", + "english_translation": "Revoked criterion '%s' of advancement %s from %s players" + }, + { + "key": "block.minecraft.deepslate_brick_slab", + "english_translation": "Deepslate Brick Slab" + }, + { + "key": "createWorld.tab.more.title", + "english_translation": "More" + }, + { + "key": "commands.team.option.suffix.success", + "english_translation": "Team suffix set to %s" + }, + { + "key": "mco.selectServer.leave", + "english_translation": "Leave realm" + }, + { + "key": "block.minecraft.purpur_block", + "english_translation": "Purpur Block" + }, + { + "key": "item.minecraft.cooked_chicken", + "english_translation": "Cooked Chicken" + }, + { + "key": "options.accessibility.high_contrast", + "english_translation": "High Contrast" + }, + { + "key": "options.attackIndicator", + "english_translation": "Attack Indicator" + }, + { + "key": "structure_block.custom_data", + "english_translation": "Custom Data Tag Name" + }, + { + "key": "block.minecraft.oak_sign", + "english_translation": "Oak Sign" + }, + { + "key": "selectWorld.newWorld", + "english_translation": "New World" + }, + { + "key": "item.minecraft.nether_star", + "english_translation": "Nether Star" + }, + { + "key": "subtitles.entity.pillager.celebrate", + "english_translation": "Pillager cheers" + }, + { + "key": "block.minecraft.structure_block", + "english_translation": "Structure Block" + }, + { + "key": "item.minecraft.splash_potion.effect.harming", + "english_translation": "Splash Potion of Harming" + }, + { + "key": "entity.minecraft.falling_block_type", + "english_translation": "Falling %s" + }, + { + "key": "chat.link.confirm", + "english_translation": "Are you sure you want to open the following website?" + }, + { + "key": "demo.help.title", + "english_translation": "Minecraft Demo Mode" + }, + { + "key": "subtitles.entity.parrot.imitate.spider", + "english_translation": "Parrot hisses" + }, + { + "key": "mco.reset.world.seed", + "english_translation": "Seed (Optional)" + }, + { + "key": "subtitles.item.nether_wart.plant", + "english_translation": "Crop planted" + }, + { + "key": "block.minecraft.bone_block", + "english_translation": "Bone Block" + }, + { + "key": "options.ao.min", + "english_translation": "Minimum" + }, + { + "key": "block.minecraft.banner.half_vertical.magenta", + "english_translation": "Magenta Per Pale" + }, + { + "key": "chat.deleted_marker", + "english_translation": "This chat message has been deleted by the server." + }, + { + "key": "subtitles.entity.camel.dash_ready", + "english_translation": "Camel recovers" + }, + { + "key": "block.minecraft.suspicious_gravel", + "english_translation": "Suspicious Gravel" + }, + { + "key": "subtitles.entity.phantom.hurt", + "english_translation": "Phantom hurts" + }, + { + "key": "block.minecraft.azalea", + "english_translation": "Azalea" + }, + { + "key": "telemetry.property.client_id.title", + "english_translation": "Client ID" + }, + { + "key": "block.minecraft.banner.rhombus.orange", + "english_translation": "Orange Lozenge" + }, + { + "key": "key.command", + "english_translation": "Open Command" + }, + { + "key": "subtitles.entity.piglin_brute.ambient", + "english_translation": "Piglin Brute snorts" + }, + { + "key": "commands.ride.mount.failure.generic", + "english_translation": "%s couldn't start riding %s" + }, + { + "key": "sign.edit", + "english_translation": "Edit Sign Message" + }, + { + "key": "narration.checkbox.usage.focused", + "english_translation": "Press Enter to toggle" + }, + { + "key": "block.minecraft.spruce_pressure_plate", + "english_translation": "Spruce Pressure Plate" + }, + { + "key": "block.minecraft.set_spawn", + "english_translation": "Respawn point set" + }, + { + "key": "gameMode.changed", + "english_translation": "Your game mode has been updated to %s" + }, + { + "key": "subtitles.entity.parrot.imitate.zoglin", + "english_translation": "Parrot growls" + }, + { + "key": "commands.data.entity.invalid", + "english_translation": "Unable to modify player data" + }, + { + "key": "multiplayer.disconnect.invalid_packet", + "english_translation": "Server sent an invalid packet" + }, + { + "key": "item.minecraft.sheaf_pottery_shard", + "english_translation": "Sheaf Pottery Shard" + }, + { + "key": "biome.minecraft.windswept_forest", + "english_translation": "Windswept Forest" + }, + { + "key": "debug.reload_resourcepacks.message", + "english_translation": "Reloaded resource packs" + }, + { + "key": "argument.nbt.list.mixed", + "english_translation": "Can't insert %s into list of %s" + }, + { + "key": "advancements.sad_label", + "english_translation": ":(" + }, + { + "key": "item.minecraft.music_disc_strad", + "english_translation": "Music Disc" + }, + { + "key": "entity.minecraft.boat", + "english_translation": "Boat" + }, + { + "key": "advancements.adventure.summon_iron_golem.description", + "english_translation": "Summon an Iron Golem to help defend a village" + }, + { + "key": "subtitles.entity.camel.death", + "english_translation": "Camel dies" + }, + { + "key": "disconnect.ignoring_status_request", + "english_translation": "Ignoring status request" + }, + { + "key": "subtitles.entity.villager.hurt", + "english_translation": "Villager hurts" + }, + { + "key": "block.minecraft.birch_fence", + "english_translation": "Birch Fence" + }, + { + "key": "subtitles.item.brush.brushing.generic", + "english_translation": "Brushing" + }, + { + "key": "debug.crash.message", + "english_translation": "F3 + C is held down. This will crash the game unless released." + }, + { + "key": "subtitles.entity.illusioner.death", + "english_translation": "Illusioner dies" + }, + { + "key": "gui.toWorld", + "english_translation": "Back to World List" + }, + { + "key": "commands.datapack.list.enabled.success", + "english_translation": "There are %s data pack(s) enabled: %s" + }, + { + "key": "block.minecraft.banner.half_vertical.green", + "english_translation": "Green Per Pale" + }, + { + "key": "gamerule.spawnRadius", + "english_translation": "Respawn location radius" + }, + { + "key": "painting.minecraft.earth.author", + "english_translation": "Mojang" + }, + { + "key": "block.minecraft.banner.triangles_top.light_gray", + "english_translation": "Light Gray Chief Indented" + }, + { + "key": "createWorld.customize.custom.coordinateScale", + "english_translation": "Coordinate Scale" + }, + { + "key": "block.minecraft.banner.square_top_left.black", + "english_translation": "Black Chief Dexter Canton" + }, + { + "key": "effect.minecraft.conduit_power", + "english_translation": "Conduit Power" + }, + { + "key": "advancements.end.elytra.description", + "english_translation": "Find Elytra" + }, + { + "key": "subtitles.entity.blaze.burn", + "english_translation": "Blaze crackles" + }, + { + "key": "advancements.end.dragon_breath.description", + "english_translation": "Collect Dragon's Breath in a Glass Bottle" + }, + { + "key": "multiplayer.disconnect.name_taken", + "english_translation": "That name is already taken" + }, + { + "key": "disconnect.loginFailedInfo.insufficientPrivileges", + "english_translation": "Multiplayer is disabled. Please check your Microsoft account settings." + }, + { + "key": "block.minecraft.dead_horn_coral_block", + "english_translation": "Dead Horn Coral Block" + }, + { + "key": "gamerule.doVinesSpread", + "english_translation": "Vines spread" + }, + { + "key": "entity.minecraft.firework_rocket", + "english_translation": "Firework Rocket" + }, + { + "key": "block.minecraft.banner.rhombus.black", + "english_translation": "Black Lozenge" + }, + { + "key": "subtitles.entity.elder_guardian.ambient_land", + "english_translation": "Elder Guardian flaps" + }, + { + "key": "block.minecraft.waxed_exposed_cut_copper_stairs", + "english_translation": "Waxed Exposed Cut Copper Stairs" + }, + { + "key": "death.attack.outOfWorld", + "english_translation": "%1$s fell out of the world" + }, + { + "key": "options.sensitivity.min", + "english_translation": "*yawn*" + }, + { + "key": "mco.connect.authorizing", + "english_translation": "Logging in..." + }, + { + "key": "menu.quit", + "english_translation": "Quit Game" + }, + { + "key": "stat.minecraft.interact_with_cartography_table", + "english_translation": "Interactions with Cartography Table" + }, + { + "key": "block.minecraft.banner.stripe_left.white", + "english_translation": "White Pale Dexter" + }, + { + "key": "chat.queue", + "english_translation": "[+%s pending lines]" + }, + { + "key": "commands.scoreboard.players.operation.success.single", + "english_translation": "Set %s for %s to %s" + }, + { + "key": "selectWorld.experimental", + "english_translation": "Experimental" + }, + { + "key": "item.minecraft.angler_pottery_sherd", + "english_translation": "Angler Pottery Sherd" + }, + { + "key": "block.minecraft.deepslate_gold_ore", + "english_translation": "Deepslate Gold Ore" + }, + { + "key": "block.minecraft.end_stone_brick_wall", + "english_translation": "End Stone Brick Wall" + }, + { + "key": "gui.banned.description.permanent", + "english_translation": "Your account is permanently banned, which means you can’t play online or join Realms." + }, + { + "key": "subtitles.entity.puffer_fish.blow_up", + "english_translation": "Pufferfish inflates" + }, + { + "key": "enchantment.minecraft.aqua_affinity", + "english_translation": "Aqua Affinity" + }, + { + "key": "commands.scoreboard.players.reset.specific.multiple", + "english_translation": "Reset %s for %s entities" + }, + { + "key": "entity.minecraft.ender_pearl", + "english_translation": "Thrown Ender Pearl" + }, + { + "key": "block.minecraft.blue_stained_glass_pane", + "english_translation": "Blue Stained Glass Pane" + }, + { + "key": "block.minecraft.smoker", + "english_translation": "Smoker" + }, + { + "key": "gui.socialInteractions.hidden_in_chat", + "english_translation": "Chat messages from %s will be hidden" + }, + { + "key": "commands.bossbar.list.bars.some", + "english_translation": "There are %s custom bossbar(s) active: %s" + }, + { + "key": "effect.minecraft.instant_damage", + "english_translation": "Instant Damage" + }, + { + "key": "item.canBreak", + "english_translation": "Can break:" + }, + { + "key": "death.attack.trident", + "english_translation": "%1$s was impaled by %2$s" + }, + { + "key": "block.minecraft.blue_stained_glass", + "english_translation": "Blue Stained Glass" + }, + { + "key": "enchantment.minecraft.protection", + "english_translation": "Protection" + }, + { + "key": "options.guiScale.auto", + "english_translation": "Auto" + }, + { + "key": "block.minecraft.spruce_hanging_sign", + "english_translation": "Spruce Hanging Sign" + }, + { + "key": "subtitles.entity.sheep.ambient", + "english_translation": "Sheep baahs" + }, + { + "key": "block.minecraft.blue_candle", + "english_translation": "Blue Candle" + }, + { + "key": "block.minecraft.weeping_vines", + "english_translation": "Weeping Vines" + }, + { + "key": "gui.banned.reason.defamation_impersonation_false_information", + "english_translation": "Impersonation or sharing information to exploit or mislead others" + }, + { + "key": "subtitles.entity.fox.teleport", + "english_translation": "Fox teleports" + }, + { + "key": "subtitles.entity.snowball.throw", + "english_translation": "Snowball flies" + }, + { + "key": "subtitles.block.note_block.note", + "english_translation": "Note Block plays" + }, + { + "key": "block.minecraft.banner.triangles_top.white", + "english_translation": "White Chief Indented" + }, + { + "key": "enchantment.level.10", + "english_translation": "X" + }, + { + "key": "subtitles.entity.vex.charge", + "english_translation": "Vex shrieks" + }, + { + "key": "item.minecraft.black_dye", + "english_translation": "Black Dye" + }, + { + "key": "menu.playerReporting", + "english_translation": "Player Reporting" + }, + { + "key": "block.minecraft.polished_blackstone_brick_wall", + "english_translation": "Polished Blackstone Brick Wall" + }, + { + "key": "commands.time.query", + "english_translation": "The time is %s" + }, + { + "key": "advancements.end.enter_end_gateway.title", + "english_translation": "Remote Getaway" + }, + { + "key": "advancements.husbandry.make_a_sign_glow.title", + "english_translation": "Glow and Behold!" + }, + { + "key": "structure_block.button.detect_size", + "english_translation": "DETECT" + }, + { + "key": "container.loom", + "english_translation": "Loom" + }, + { + "key": "entity.minecraft.ender_dragon", + "english_translation": "Ender Dragon" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.white", + "english_translation": "White Per Fess Inverted" + }, + { + "key": "block.minecraft.anvil", + "english_translation": "Anvil" + }, + { + "key": "selectServer.edit", + "english_translation": "Edit" + }, + { + "key": "mco.backup.entry.templateName", + "english_translation": "Template Name" + }, + { + "key": "subtitles.enchant.thorns.hit", + "english_translation": "Thorns prick" + }, + { + "key": "options.ao.max", + "english_translation": "Maximum" + }, + { + "key": "block.minecraft.cyan_candle_cake", + "english_translation": "Cake with Cyan Candle" + }, + { + "key": "block.minecraft.oak_wall_sign", + "english_translation": "Oak Wall Sign" + }, + { + "key": "block.minecraft.brewing_stand", + "english_translation": "Brewing Stand" + }, + { + "key": "telemetry.property.number_of_samples.title", + "english_translation": "Sample Count" + }, + { + "key": "block.minecraft.pink_candle", + "english_translation": "Pink Candle" + }, + { + "key": "block.minecraft.banner.square_top_left.green", + "english_translation": "Green Chief Dexter Canton" + }, + { + "key": "death.attack.lightningBolt.player", + "english_translation": "%1$s was struck by lightning whilst fighting %2$s" + }, + { + "key": "options.key.toggle", + "english_translation": "Toggle" + }, + { + "key": "block.minecraft.deepslate_bricks", + "english_translation": "Deepslate Bricks" + }, + { + "key": "itemGroup.ingredients", + "english_translation": "Ingredients" + }, + { + "key": "item.minecraft.villager_spawn_egg", + "english_translation": "Villager Spawn Egg" + }, + { + "key": "effect.minecraft.absorption", + "english_translation": "Absorption" + }, + { + "key": "block.minecraft.light_gray_concrete", + "english_translation": "Light Gray Concrete" + }, + { + "key": "commands.datapack.enable.failed.no_flags", + "english_translation": "Pack '%s' cannot be enabled, since required flags are not enabled in this world: %s!" + }, + { + "key": "block.minecraft.dead_brain_coral", + "english_translation": "Dead Brain Coral" + }, + { + "key": "compliance.playtime.hours", + "english_translation": "You've been playing for %s hour(s)" + }, + { + "key": "block.minecraft.banner.rhombus.green", + "english_translation": "Green Lozenge" + }, + { + "key": "item.minecraft.saddle", + "english_translation": "Saddle" + }, + { + "key": "menu.loadingLevel", + "english_translation": "Loading world" + }, + { + "key": "structure_block.size", + "english_translation": "Structure Size" + }, + { + "key": "lanServer.otherPlayers", + "english_translation": "Settings for Other Players" + }, + { + "key": "block.minecraft.green_concrete_powder", + "english_translation": "Green Concrete Powder" + }, + { + "key": "subtitles.entity.goat.long_jump", + "english_translation": "Goat leaps" + }, + { + "key": "block.minecraft.red_mushroom", + "english_translation": "Red Mushroom" + }, + { + "key": "structure_block.integrity.integrity", + "english_translation": "Structure Integrity" + }, + { + "key": "subtitles.item.crossbow.load", + "english_translation": "Crossbow loads" + }, + { + "key": "advancements.story.shiny_gear.description", + "english_translation": "Diamond armor saves lives" + }, + { + "key": "subtitles.entity.phantom.swoop", + "english_translation": "Phantom swoops" + }, + { + "key": "block.minecraft.banner.cross.lime", + "english_translation": "Lime Saltire" + }, + { + "key": "block.minecraft.banner.stripe_downleft.light_blue", + "english_translation": "Light Blue Bend Sinister" + }, + { + "key": "book.finalizeWarning", + "english_translation": "Note! When you sign the book, it will no longer be editable." + }, + { + "key": "demo.day.2", + "english_translation": "Day Two" + }, + { + "key": "demo.day.1", + "english_translation": "This demo will last five game days. Do your best!" + }, + { + "key": "demo.day.4", + "english_translation": "Day Four" + }, + { + "key": "commands.data.block.get", + "english_translation": "%s on block %s, %s, %s after scale factor of %s is %s" + }, + { + "key": "demo.day.3", + "english_translation": "Day Three" + }, + { + "key": "enchantment.minecraft.sharpness", + "english_translation": "Sharpness" + }, + { + "key": "item.minecraft.slime_ball", + "english_translation": "Slimeball" + }, + { + "key": "demo.day.6", + "english_translation": "You have passed your fifth day. Use %s to save a screenshot of your creation." + }, + { + "key": "demo.day.5", + "english_translation": "This is your last day!" + }, + { + "key": "item.minecraft.magenta_dye", + "english_translation": "Magenta Dye" + }, + { + "key": "item.minecraft.glistering_melon_slice", + "english_translation": "Glistering Melon Slice" + }, + { + "key": "subtitles.entity.slime.attack", + "english_translation": "Slime attacks" + }, + { + "key": "subtitles.entity.enderman.ambient", + "english_translation": "Enderman vwoops" + }, + { + "key": "block.minecraft.potted_red_tulip", + "english_translation": "Potted Red Tulip" + }, + { + "key": "gamerule.playersSleepingPercentage.description", + "english_translation": "The percentage of players who must be sleeping to skip the night." + }, + { + "key": "subtitles.entity.turtle.egg_crack", + "english_translation": "Turtle Egg cracks" + }, + { + "key": "chat.tag.modified", + "english_translation": "Message modified by the server. Original:" + }, + { + "key": "gamerule.doLimitedCrafting.description", + "english_translation": "If enabled, players will be able to craft only unlocked recipes." + }, + { + "key": "advancements.husbandry.tadpole_in_a_bucket.title", + "english_translation": "Bukkit Bukkit" + }, + { + "key": "block.minecraft.banner.stripe_downright.cyan", + "english_translation": "Cyan Bend" + }, + { + "key": "item.minecraft.skull_banner_pattern.desc", + "english_translation": "Skull Charge" + }, + { + "key": "block.minecraft.banner.cross.orange", + "english_translation": "Orange Saltire" + }, + { + "key": "disconnect.closed", + "english_translation": "Connection closed" + }, + { + "key": "commands.experience.set.levels.success.single", + "english_translation": "Set %s experience levels on %s" + }, + { + "key": "container.spectatorCantOpen", + "english_translation": "Unable to open. Loot not generated yet." + }, + { + "key": "block.minecraft.banner.diagonal_left.lime", + "english_translation": "Lime Per Bend Sinister" + }, + { + "key": "block.minecraft.infested_mossy_stone_bricks", + "english_translation": "Infested Mossy Stone Bricks" + }, + { + "key": "resourcePack.vanilla.description", + "english_translation": "The default look and feel of Minecraft" + }, + { + "key": "multiplayer.disconnect.invalid_public_key_signature", + "english_translation": "Invalid signature for profile public key.\nTry restarting your game." + }, + { + "key": "death.attack.anvil", + "english_translation": "%1$s was squashed by a falling anvil" + }, + { + "key": "subtitles.entity.wandering_trader.drink_milk", + "english_translation": "Wandering Trader drinks milk" + }, + { + "key": "gui.toTitle", + "english_translation": "Back to Title Screen" + }, + { + "key": "selectServer.refresh", + "english_translation": "Refresh" + }, + { + "key": "enchantment.minecraft.swift_sneak", + "english_translation": "Swift Sneak" + }, + { + "key": "block.minecraft.banner.bricks.gray", + "english_translation": "Gray Field Masoned" + }, + { + "key": "block.minecraft.packed_ice", + "english_translation": "Packed Ice" + }, + { + "key": "gui.chatReport.observed_what", + "english_translation": "Why are you reporting this?" + }, + { + "key": "narrator.controls.unbound", + "english_translation": "%s is not bound" + }, + { + "key": "commands.effect.give.success.single", + "english_translation": "Applied effect %s to %s" + }, + { + "key": "advMode.mode.unconditional", + "english_translation": "Unconditional" + }, + { + "key": "spectatorMenu.close", + "english_translation": "Close Menu" + }, + { + "key": "block.minecraft.banner.gradient.purple", + "english_translation": "Purple Gradient" + }, + { + "key": "item.minecraft.brick", + "english_translation": "Brick" + }, + { + "key": "block.minecraft.mossy_cobblestone_slab", + "english_translation": "Mossy Cobblestone Slab" + }, + { + "key": "subtitles.ambient.cave", + "english_translation": "Eerie noise" + }, + { + "key": "subtitles.block.pointed_dripstone.drip_lava", + "english_translation": "Lava drips" + }, + { + "key": "entity.minecraft.shulker", + "english_translation": "Shulker" + }, + { + "key": "pack.available.title", + "english_translation": "Available" + }, + { + "key": "block.minecraft.banner.square_top_right.orange", + "english_translation": "Orange Chief Sinister Canton" + }, + { + "key": "commands.save.success", + "english_translation": "Saved the game" + }, + { + "key": "subtitles.item.armor.equip_diamond", + "english_translation": "Diamond armor clangs" + }, + { + "key": "subtitles.item.armor.equip_netherite", + "english_translation": "Netherite armor clanks" + }, + { + "key": "createWorld.customize.custom.useTemples", + "english_translation": "Temples" + }, + { + "key": "block.minecraft.dark_oak_stairs", + "english_translation": "Dark Oak Stairs" + }, + { + "key": "advancements.nether.uneasy_alliance.title", + "english_translation": "Uneasy Alliance" + }, + { + "key": "block.minecraft.andesite", + "english_translation": "Andesite" + }, + { + "key": "subtitles.entity.skeleton.death", + "english_translation": "Skeleton dies" + }, + { + "key": "block.minecraft.banner.stripe_middle.brown", + "english_translation": "Brown Fess" + }, + { + "key": "block.minecraft.banner.diagonal_left.green", + "english_translation": "Green Per Bend Sinister" + }, + { + "key": "block.minecraft.pink_petals", + "english_translation": "Pink Petals" + }, + { + "key": "stat.minecraft.pig_one_cm", + "english_translation": "Distance by Pig" + }, + { + "key": "subtitles.entity.zoglin.angry", + "english_translation": "Zoglin growls angrily" + }, + { + "key": "argument.entity.selector.not_allowed", + "english_translation": "Selector not allowed" + }, + { + "key": "block.minecraft.gray_carpet", + "english_translation": "Gray Carpet" + }, + { + "key": "item.nbt_tags", + "english_translation": "NBT: %s tag(s)" + }, + { + "key": "subtitles.item.armor.equip_gold", + "english_translation": "Gold armor clinks" + }, + { + "key": "potion.withAmplifier", + "english_translation": "%s %s" + }, + { + "key": "item.minecraft.diamond_leggings", + "english_translation": "Diamond Leggings" + }, + { + "key": "argument.player.entities", + "english_translation": "Only players may be affected by this command, but the provided selector includes entities" + }, + { + "key": "subtitles.entity.ravager.attack", + "english_translation": "Ravager bites" + }, + { + "key": "item.minecraft.arms_up_pottery_shard", + "english_translation": "Arms Up Pottery Shard" + }, + { + "key": "block.minecraft.cobbled_deepslate_slab", + "english_translation": "Cobbled Deepslate Slab" + }, + { + "key": "block.minecraft.banner.base.light_gray", + "english_translation": "Fully Light Gray Field" + }, + { + "key": "block.minecraft.chain_command_block", + "english_translation": "Chain Command Block" + }, + { + "key": "block.minecraft.iron_ore", + "english_translation": "Iron Ore" + }, + { + "key": "block.minecraft.banner.square_top_left.orange", + "english_translation": "Orange Chief Dexter Canton" + }, + { + "key": "multiplayer.disconnect.chat_validation_failed", + "english_translation": "Chat message validation failure" + }, + { + "key": "options.narrator.off", + "english_translation": "OFF" + }, + { + "key": "block.minecraft.purpur_pillar", + "english_translation": "Purpur Pillar" + }, + { + "key": "multiplayer.disconnect.banned.reason", + "english_translation": "You are banned from this server.\nReason: %s" + }, + { + "key": "block.minecraft.banner.triangle_top.brown", + "english_translation": "Brown Inverted Chevron" + }, + { + "key": "item.minecraft.smithing_template.netherite_upgrade.applies_to", + "english_translation": "Diamond Equipment" + }, + { + "key": "entity.minecraft.iron_golem", + "english_translation": "Iron Golem" + }, + { + "key": "subtitles.block.pointed_dripstone.drip_water_into_cauldron", + "english_translation": "Water drips into Cauldron" + }, + { + "key": "subtitles.entity.goat.prepare_ram", + "english_translation": "Goat stomps" + }, + { + "key": "advancements.adventure.walk_on_powder_snow_with_leather_boots.title", + "english_translation": "Light as a Rabbit" + }, + { + "key": "commands.save.failed", + "english_translation": "Unable to save the game (is there enough disk space?)" + }, + { + "key": "translation.test.escape", + "english_translation": "%%s %%%s %%%%s %%%%%s" + }, + { + "key": "item.minecraft.stick", + "english_translation": "Stick" + }, + { + "key": "itemGroup.buildingBlocks", + "english_translation": "Building Blocks" + }, + { + "key": "mco.brokenworld.title", + "english_translation": "Your current world is no longer supported" + }, + { + "key": "createWorld.customize.flat.height", + "english_translation": "Height" + }, + { + "key": "command.unknown.argument", + "english_translation": "Incorrect argument for command" + }, + { + "key": "lanServer.port.unavailable.new", + "english_translation": "Port not available.\nLeave the edit box empty or enter a different number between %s and %s." + }, + { + "key": "block.minecraft.deepslate_tile_stairs", + "english_translation": "Deepslate Tile Stairs" + }, + { + "key": "advancements.husbandry.allay_deliver_cake_to_note_block.title", + "english_translation": "Birthday Song" + }, + { + "key": "block.minecraft.polished_blackstone_slab", + "english_translation": "Polished Blackstone Slab" + }, + { + "key": "biome.minecraft.the_void", + "english_translation": "The Void" + }, + { + "key": "advancements.adventure.ol_betsy.title", + "english_translation": "Ol' Betsy" + }, + { + "key": "death.attack.sting.item", + "english_translation": "%1$s was stung to death by %2$s using %3$s" + }, + { + "key": "block.minecraft.light", + "english_translation": "Light" + }, + { + "key": "item.minecraft.tadpole_bucket", + "english_translation": "Bucket of Tadpole" + }, + { + "key": "advancements.adventure.throw_trident.description", + "english_translation": "Throw a Trident at something.\nNote: Throwing away your only weapon is not a good idea." + }, + { + "key": "commands.scoreboard.players.get.success", + "english_translation": "%s has %s %s" + }, + { + "key": "entity.minecraft.text_display", + "english_translation": "Text Display" + }, + { + "key": "options.chat.visibility.system", + "english_translation": "Commands Only" + }, + { + "key": "gamerule.doVinesSpread.description", + "english_translation": "Controls whether or not the Vines block spreads randomly to adjacent blocks. Does not affect other type of vine blocks such as Weeping Vines, Twisting Vines, etc." + }, + { + "key": "subtitles.entity.shulker.ambient", + "english_translation": "Shulker lurks" + }, + { + "key": "block.minecraft.redstone_torch", + "english_translation": "Redstone Torch" + }, + { + "key": "block.minecraft.banner.triangles_bottom.magenta", + "english_translation": "Magenta Base Indented" + }, + { + "key": "advancements.adventure.play_jukebox_in_meadows.title", + "english_translation": "Sound of Music" + }, + { + "key": "entity.minecraft.ghast", + "english_translation": "Ghast" + }, + { + "key": "team.collision.never", + "english_translation": "Never" + }, + { + "key": "block.minecraft.banner.cross.white", + "english_translation": "White Saltire" + }, + { + "key": "block.minecraft.light_gray_candle_cake", + "english_translation": "Cake with Light Gray Candle" + }, + { + "key": "block.minecraft.waxed_oxidized_copper", + "english_translation": "Waxed Oxidized Copper" + }, + { + "key": "multiplayer.status.cancelled", + "english_translation": "Cancelled" + }, + { + "key": "createWorld.customize.custom.useWaterLakes", + "english_translation": "Water Lakes" + }, + { + "key": "block.minecraft.mangrove_propagule", + "english_translation": "Mangrove Propagule" + }, + { + "key": "subtitles.entity.player.burp", + "english_translation": "Burp" + }, + { + "key": "gui.ok", + "english_translation": "Ok" + }, + { + "key": "gui.abuseReport.reason.child_sexual_exploitation_or_abuse.description", + "english_translation": "Someone is talking about or otherwise promoting indecent behavior involving children." + }, + { + "key": "block.minecraft.stripped_spruce_wood", + "english_translation": "Stripped Spruce Wood" + }, + { + "key": "block.minecraft.banner.half_horizontal.white", + "english_translation": "White Per Fess" + }, + { + "key": "subtitles.entity.bee.ambient", + "english_translation": "Bee buzzes" + }, + { + "key": "debug.dump_dynamic_textures.help", + "english_translation": "F3 + S = Dump dynamic textures" + }, + { + "key": "subtitles.entity.pillager.death", + "english_translation": "Pillager dies" + }, + { + "key": "chat.tag.system", + "english_translation": "Server message. Cannot be reported." + }, + { + "key": "effect.minecraft.health_boost", + "english_translation": "Health Boost" + }, + { + "key": "block.minecraft.stripped_dark_oak_log", + "english_translation": "Stripped Dark Oak Log" + }, + { + "key": "commands.give.success.multiple", + "english_translation": "Gave %s %s to %s players" + }, + { + "key": "block.minecraft.red_banner", + "english_translation": "Red Banner" + }, + { + "key": "death.attack.generic.player", + "english_translation": "%1$s died because of %2$s" + }, + { + "key": "block.minecraft.banner.flower.orange", + "english_translation": "Orange Flower Charge" + }, + { + "key": "selectWorld.dataPacks", + "english_translation": "Data Packs" + }, + { + "key": "item.minecraft.cod_bucket", + "english_translation": "Bucket of Cod" + }, + { + "key": "block.minecraft.banner.diagonal_left.black", + "english_translation": "Black Per Bend Sinister" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.brown", + "english_translation": "Brown Per Bend Inverted" + }, + { + "key": "biome.minecraft.savanna_plateau", + "english_translation": "Savanna Plateau" + }, + { + "key": "gui.no", + "english_translation": "No" + }, + { + "key": "commands.bossbar.get.max", + "english_translation": "Custom bossbar %s has a maximum of %s" + }, + { + "key": "block.minecraft.banner.stripe_middle.blue", + "english_translation": "Blue Fess" + }, + { + "key": "subtitles.entity.warden.tendril_clicks", + "english_translation": "Warden's tendrils click" + }, + { + "key": "block.minecraft.warped_fence", + "english_translation": "Warped Fence" + }, + { + "key": "mco.invites.button.reject", + "english_translation": "Reject" + }, + { + "key": "item.minecraft.water_bucket", + "english_translation": "Water Bucket" + }, + { + "key": "advancements.husbandry.allay_deliver_cake_to_note_block.description", + "english_translation": "Have an Allay drop a Cake at a Note Block" + }, + { + "key": "block.minecraft.banner.cross.light_gray", + "english_translation": "Light Gray Saltire" + }, + { + "key": "subtitles.block.conduit.activate", + "english_translation": "Conduit activates" + }, + { + "key": "death.attack.drown", + "english_translation": "%1$s drowned" + }, + { + "key": "jigsaw_block.name", + "english_translation": "Name:" + }, + { + "key": "item.minecraft.ender_dragon_spawn_egg", + "english_translation": "Ender Dragon Spawn Egg" + }, + { + "key": "block.minecraft.bell", + "english_translation": "Bell" + }, + { + "key": "item.minecraft.shield.cyan", + "english_translation": "Cyan Shield" + }, + { + "key": "subtitles.block.composter.fill", + "english_translation": "Composter filled" + }, + { + "key": "block.minecraft.banner.gradient_up.purple", + "english_translation": "Purple Base Gradient" + }, + { + "key": "createWorld.customize.buffet.title", + "english_translation": "Buffet world customization" + }, + { + "key": "block.minecraft.exposed_cut_copper", + "english_translation": "Exposed Cut Copper" + }, + { + "key": "block.minecraft.sniffer_egg", + "english_translation": "Sniffer Egg" + }, + { + "key": "item.minecraft.allay_spawn_egg", + "english_translation": "Allay Spawn Egg" + }, + { + "key": "subtitles.block.beehive.shear", + "english_translation": "Shears scrape" + }, + { + "key": "telemetry.property.load_time_total_time_ms.title", + "english_translation": "Total Load Time (Milliseconds)" + }, + { + "key": "selectServer.direct", + "english_translation": "Direct Connection" + }, + { + "key": "commands.advancement.revoke.criterion.to.many.failure", + "english_translation": "Couldn't revoke criterion '%s' of advancement %s from %s players as they don't have it" + }, + { + "key": "structure_block.position.z", + "english_translation": "relative position z" + }, + { + "key": "structure_block.position.y", + "english_translation": "relative position y" + }, + { + "key": "structure_block.position.x", + "english_translation": "relative Position x" + }, + { + "key": "block.minecraft.banner.mojang.brown", + "english_translation": "Brown Thing" + }, + { + "key": "block.minecraft.dandelion", + "english_translation": "Dandelion" + }, + { + "key": "item.minecraft.tropical_fish_spawn_egg", + "english_translation": "Tropical Fish Spawn Egg" + }, + { + "key": "biome.minecraft.beach", + "english_translation": "Beach" + }, + { + "key": "commands.team.join.success.single", + "english_translation": "Added %s to team %s" + }, + { + "key": "subtitles.entity.bee.death", + "english_translation": "Bee dies" + }, + { + "key": "subtitles.entity.evoker.celebrate", + "english_translation": "Evoker cheers" + }, + { + "key": "advancements.story.mine_diamond.title", + "english_translation": "Diamonds!" + }, + { + "key": "item.minecraft.cod_spawn_egg", + "english_translation": "Cod Spawn Egg" + }, + { + "key": "item.minecraft.music_disc_relic", + "english_translation": "Music Disc" + }, + { + "key": "entity.minecraft.villager.leatherworker", + "english_translation": "Leatherworker" + }, + { + "key": "item.minecraft.writable_book", + "english_translation": "Book and Quill" + }, + { + "key": "block.minecraft.rooted_dirt", + "english_translation": "Rooted Dirt" + }, + { + "key": "subtitles.entity.parrot.imitate.vex", + "english_translation": "Parrot vexes" + }, + { + "key": "subtitles.entity.dolphin.eat", + "english_translation": "Dolphin eats" + }, + { + "key": "subtitles.block.fire.ambient", + "english_translation": "Fire crackles" + }, + { + "key": "subtitles.entity.panda.eat", + "english_translation": "Panda eats" + }, + { + "key": "block.minecraft.banner.cross.blue", + "english_translation": "Blue Saltire" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.green", + "english_translation": "Green Per Fess Inverted" + }, + { + "key": "narration.recipe.usage", + "english_translation": "Left click to select" + }, + { + "key": "block.minecraft.banner.square_top_right.black", + "english_translation": "Black Chief Sinister Canton" + }, + { + "key": "block.minecraft.raw_gold_block", + "english_translation": "Block of Raw Gold" + }, + { + "key": "block.minecraft.banner.triangles_top.green", + "english_translation": "Green Chief Indented" + }, + { + "key": "mco.selectServer.configureRealm", + "english_translation": "Configure realm" + }, + { + "key": "item.minecraft.potion.effect.turtle_master", + "english_translation": "Potion of the Turtle Master" + }, + { + "key": "block.minecraft.gray_stained_glass_pane", + "english_translation": "Gray Stained Glass Pane" + }, + { + "key": "enchantment.minecraft.quick_charge", + "english_translation": "Quick Charge" + }, + { + "key": "block.minecraft.grindstone", + "english_translation": "Grindstone" + }, + { + "key": "subtitles.block.smoker.smoke", + "english_translation": "Smoker smokes" + }, + { + "key": "subtitles.entity.allay.item_taken", + "english_translation": "Allay allays" + }, + { + "key": "advancements.nether.obtain_ancient_debris.title", + "english_translation": "Hidden in the Depths" + }, + { + "key": "subtitles.entity.zombified_piglin.death", + "english_translation": "Zombified Piglin dies" + }, + { + "key": "advancements.nether.create_beacon.title", + "english_translation": "Bring Home the Beacon" + }, + { + "key": "block.minecraft.banner.rhombus.white", + "english_translation": "White Lozenge" + }, + { + "key": "block.minecraft.banner.bricks.light_gray", + "english_translation": "Light Gray Field Masoned" + }, + { + "key": "commands.item.block.set.success", + "english_translation": "Replaced a slot at %s, %s, %s with %s" + }, + { + "key": "team.collision.pushOtherTeams", + "english_translation": "Push other teams" + }, + { + "key": "deathScreen.title.hardcore", + "english_translation": "Game Over!" + }, + { + "key": "item.minecraft.spider_spawn_egg", + "english_translation": "Spider Spawn Egg" + }, + { + "key": "debug.pause_focus.off", + "english_translation": "Pause on lost focus: disabled" + }, + { + "key": "mco.configure.world.subscription.less_than_a_day", + "english_translation": "Less than a day" + }, + { + "key": "gui.chatReport.send.no_reported_messages", + "english_translation": "Please select at least one chat message to report" + }, + { + "key": "commands.tag.remove.success.single", + "english_translation": "Removed tag '%s' from %s" + }, + { + "key": "block.minecraft.green_bed", + "english_translation": "Green Bed" + }, + { + "key": "advancements.story.follow_ender_eye.title", + "english_translation": "Eye Spy" + }, + { + "key": "biome.minecraft.swamp", + "english_translation": "Swamp" + }, + { + "key": "mco.selectServer.open", + "english_translation": "Open realm" + }, + { + "key": "death.attack.cactus", + "english_translation": "%1$s was pricked to death" + }, + { + "key": "mco.reset.world.inspiration", + "english_translation": "Inspiration" + }, + { + "key": "block.minecraft.crimson_trapdoor", + "english_translation": "Crimson Trapdoor" + }, + { + "key": "subtitles.entity.dolphin.hurt", + "english_translation": "Dolphin hurts" + }, + { + "key": "commands.enchant.failed.incompatible", + "english_translation": "%s cannot support that enchantment" + }, + { + "key": "block.minecraft.red_bed", + "english_translation": "Red Bed" + }, + { + "key": "merchant.current_level", + "english_translation": "Trader's current level" + }, + { + "key": "block.minecraft.dead_horn_coral_wall_fan", + "english_translation": "Dead Horn Coral Wall Fan" + }, + { + "key": "advMode.mode", + "english_translation": "Mode" + }, + { + "key": "item.minecraft.firework_star.orange", + "english_translation": "Orange" + }, + { + "key": "block.minecraft.banner.square_top_right.gray", + "english_translation": "Gray Chief Sinister Canton" + }, + { + "key": "death.fell.assist", + "english_translation": "%1$s was doomed to fall by %2$s" + }, + { + "key": "gamerule.globalSoundEvents.description", + "english_translation": "When certain game events happen, like a boss spawning, the sound is heard everywhere." + }, + { + "key": "entity.minecraft.player", + "english_translation": "Player" + }, + { + "key": "block.minecraft.smooth_basalt", + "english_translation": "Smooth Basalt" + }, + { + "key": "multiplayer.disconnect.server_full", + "english_translation": "The server is full!" + }, + { + "key": "entity.minecraft.donkey", + "english_translation": "Donkey" + }, + { + "key": "subtitles.item.bucket.empty", + "english_translation": "Bucket empties" + }, + { + "key": "item.minecraft.turtle_helmet", + "english_translation": "Turtle Shell" + }, + { + "key": "block.minecraft.stripped_acacia_log", + "english_translation": "Stripped Acacia Log" + }, + { + "key": "subtitles.entity.panda.hurt", + "english_translation": "Panda hurts" + }, + { + "key": "subtitles.entity.panda.pre_sneeze", + "english_translation": "Panda's nose tickles" + }, + { + "key": "mco.time.daysAgo", + "english_translation": "%1$s day(s) ago" + }, + { + "key": "subtitles.entity.allay.item_thrown", + "english_translation": "Allay tosses" + }, + { + "key": "block.minecraft.magenta_concrete", + "english_translation": "Magenta Concrete" + }, + { + "key": "entity.minecraft.arrow", + "english_translation": "Arrow" + }, + { + "key": "item.minecraft.netherite_axe", + "english_translation": "Netherite Axe" + }, + { + "key": "block.minecraft.birch_stairs", + "english_translation": "Birch Stairs" + }, + { + "key": "mco.selectServer.expires.days", + "english_translation": "Expires in %s days" + }, + { + "key": "advancements.adventure.salvage_sherd.description", + "english_translation": "Brush a Suspicious block to obtain a Pottery Sherd" + }, + { + "key": "lanServer.title", + "english_translation": "LAN World" + }, + { + "key": "subtitles.entity.polar_bear.ambient", + "english_translation": "Polar Bear groans" + }, + { + "key": "commands.title.reset.single", + "english_translation": "Reset title options for %s" + }, + { + "key": "block.minecraft.banner.half_vertical_right.light_blue", + "english_translation": "Light Blue Per Pale Inverted" + }, + { + "key": "item.minecraft.lingering_potion.effect.slow_falling", + "english_translation": "Lingering Potion of Slow Falling" + }, + { + "key": "entity.minecraft.lightning_bolt", + "english_translation": "Lightning Bolt" + }, + { + "key": "item.minecraft.firework_star.black", + "english_translation": "Black" + }, + { + "key": "commands.banip.info", + "english_translation": "This ban affects %s player(s): %s" + }, + { + "key": "commands.scoreboard.objectives.add.duplicate", + "english_translation": "An objective already exists by that name" + }, + { + "key": "block.minecraft.cherry_log", + "english_translation": "Cherry Log" + }, + { + "key": "stat.minecraft.raid_trigger", + "english_translation": "Raids Triggered" + }, + { + "key": "options.video", + "english_translation": "Video Settings..." + }, + { + "key": "block.minecraft.bamboo_hanging_sign", + "english_translation": "Bamboo Hanging Sign" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.magenta", + "english_translation": "Magenta Per Fess Inverted" + }, + { + "key": "mco.configure.world.buttons.open", + "english_translation": "Open realm" + }, + { + "key": "block.minecraft.banner.square_top_right.green", + "english_translation": "Green Chief Sinister Canton" + }, + { + "key": "block.minecraft.banner.stripe_center.pink", + "english_translation": "Pink Pale" + }, + { + "key": "itemGroup.inventory", + "english_translation": "Survival Inventory" + }, + { + "key": "block.minecraft.banner.triangles_top.black", + "english_translation": "Black Chief Indented" + }, + { + "key": "options.chunks", + "english_translation": "%s chunks" + }, + { + "key": "item.minecraft.salmon", + "english_translation": "Raw Salmon" + }, + { + "key": "block.minecraft.comparator", + "english_translation": "Redstone Comparator" + }, + { + "key": "item.minecraft.tipped_arrow.effect.healing", + "english_translation": "Arrow of Healing" + }, + { + "key": "item.minecraft.beetroot_seeds", + "english_translation": "Beetroot Seeds" + }, + { + "key": "item.minecraft.totem_of_undying", + "english_translation": "Totem of Undying" + }, + { + "key": "subtitles.entity.tropical_fish.flop", + "english_translation": "Tropical Fish flops" + }, + { + "key": "block.minecraft.banner.curly_border.magenta", + "english_translation": "Magenta Bordure Indented" + }, + { + "key": "item.minecraft.cauldron", + "english_translation": "Cauldron" + }, + { + "key": "advancements.nether.obtain_crying_obsidian.description", + "english_translation": "Obtain Crying Obsidian" + }, + { + "key": "block.minecraft.banner.flower.cyan", + "english_translation": "Cyan Flower Charge" + }, + { + "key": "commands.team.option.seeFriendlyInvisibles.enabled", + "english_translation": "Team %s can now see invisible teammates" + }, + { + "key": "commands.effect.clear.everything.success.multiple", + "english_translation": "Removed every effect from %s targets" + }, + { + "key": "block.minecraft.banner.square_top_right.white", + "english_translation": "White Chief Sinister Canton" + }, + { + "key": "demo.reminder", + "english_translation": "The demo time has expired. Buy the game to continue or start a new world!" + }, + { + "key": "block.minecraft.dead_fire_coral_wall_fan", + "english_translation": "Dead Fire Coral Wall Fan" + }, + { + "key": "block.minecraft.magenta_banner", + "english_translation": "Magenta Banner" + }, + { + "key": "selectWorld.select", + "english_translation": "Play Selected World" + }, + { + "key": "block.minecraft.wither_rose", + "english_translation": "Wither Rose" + }, + { + "key": "stat.minecraft.strider_one_cm", + "english_translation": "Distance by Strider" + }, + { + "key": "debug.gamemodes.help", + "english_translation": "F3 + F4 = Open game mode switcher" + }, + { + "key": "advancements.nether.get_wither_skull.description", + "english_translation": "Obtain a Wither Skeleton's skull" + }, + { + "key": "structure_block.mode.load", + "english_translation": "Load" + }, + { + "key": "debug.advanced_tooltips.off", + "english_translation": "Advanced tooltips: hidden" + }, + { + "key": "item.minecraft.firework_star.green", + "english_translation": "Green" + }, + { + "key": "chat.tag.not_secure", + "english_translation": "Unverified message. Cannot be reported." + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.black", + "english_translation": "Black Per Fess Inverted" + }, + { + "key": "block.minecraft.brick_wall", + "english_translation": "Brick Wall" + }, + { + "key": "item.minecraft.howl_pottery_shard", + "english_translation": "Howl Pottery Shard" + }, + { + "key": "subtitles.entity.skeleton_horse.hurt", + "english_translation": "Skeleton Horse hurts" + }, + { + "key": "item.minecraft.lingering_potion.effect.thick", + "english_translation": "Thick Lingering Potion" + }, + { + "key": "block.minecraft.bee_nest", + "english_translation": "Bee Nest" + }, + { + "key": "mco.activity.title", + "english_translation": "Player activity" + }, + { + "key": "block.minecraft.cut_copper", + "english_translation": "Cut Copper" + }, + { + "key": "item.minecraft.firework_star.pink", + "english_translation": "Pink" + }, + { + "key": "block.minecraft.spruce_planks", + "english_translation": "Spruce Planks" + }, + { + "key": "item.minecraft.map", + "english_translation": "Empty Map" + }, + { + "key": "block.minecraft.lapis_block", + "english_translation": "Block of Lapis Lazuli" + }, + { + "key": "item.minecraft.honeycomb", + "english_translation": "Honeycomb" + }, + { + "key": "debug.show_hitboxes.help", + "english_translation": "F3 + B = Show hitboxes" + }, + { + "key": "item.minecraft.magma_cream", + "english_translation": "Magma Cream" + }, + { + "key": "commands.team.option.name.unchanged", + "english_translation": "Nothing changed. That team already has that name" + }, + { + "key": "item.minecraft.lingering_potion.effect.empty", + "english_translation": "Lingering Uncraftable Potion" + }, + { + "key": "options.accessibility.title", + "english_translation": "Accessibility Settings..." + }, + { + "key": "subtitles.entity.dolphin.play", + "english_translation": "Dolphin plays" + }, + { + "key": "item.minecraft.music_disc_11", + "english_translation": "Music Disc" + }, + { + "key": "item.minecraft.music_disc_13", + "english_translation": "Music Disc" + }, + { + "key": "block.minecraft.green_banner", + "english_translation": "Green Banner" + }, + { + "key": "item.minecraft.firework_star.shape", + "english_translation": "Unknown Shape" + }, + { + "key": "entity.minecraft.killer_bunny", + "english_translation": "The Killer Bunny" + }, + { + "key": "commands.data.entity.modified", + "english_translation": "Modified entity data of %s" + }, + { + "key": "block.minecraft.red_sandstone_slab", + "english_translation": "Red Sandstone Slab" + }, + { + "key": "argument.pos.mixed", + "english_translation": "Cannot mix world & local coordinates (everything must either use ^ or not)" + }, + { + "key": "gui.banned.description.reason_id", + "english_translation": "Code: %s" + }, + { + "key": "item.minecraft.golden_horse_armor", + "english_translation": "Golden Horse Armor" + }, + { + "key": "biome.minecraft.nether_wastes", + "english_translation": "Nether Wastes" + }, + { + "key": "stat.minecraft.crouch_one_cm", + "english_translation": "Distance Crouched" + }, + { + "key": "painting.minecraft.kebab.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "subtitles.entity.chicken.hurt", + "english_translation": "Chicken hurts" + }, + { + "key": "subtitles.block.dispenser.fail", + "english_translation": "Dispenser failed" + }, + { + "key": "commands.bossbar.set.value.success", + "english_translation": "Custom bossbar %s has changed value to %s" + }, + { + "key": "death.attack.mob.item", + "english_translation": "%1$s was slain by %2$s using %3$s" + }, + { + "key": "argument.time.invalid_unit", + "english_translation": "Invalid unit" + }, + { + "key": "subtitles.entity.horse.angry", + "english_translation": "Horse neighs" + }, + { + "key": "block.minecraft.end_portal_frame", + "english_translation": "End Portal Frame" + }, + { + "key": "item.minecraft.tipped_arrow.effect.poison", + "english_translation": "Arrow of Poison" + }, + { + "key": "subtitles.entity.wolf.growl", + "english_translation": "Wolf growls" + }, + { + "key": "advancements.end.kill_dragon.title", + "english_translation": "Free the End" + }, + { + "key": "block.minecraft.waxed_exposed_copper", + "english_translation": "Waxed Exposed Copper" + }, + { + "key": "item.minecraft.potion.effect.mundane", + "english_translation": "Mundane Potion" + }, + { + "key": "stat.minecraft.eat_cake_slice", + "english_translation": "Cake Slices Eaten" + }, + { + "key": "block.minecraft.calibrated_sculk_sensor", + "english_translation": "Calibrated Sculk Sensor" + }, + { + "key": "block.minecraft.shroomlight", + "english_translation": "Shroomlight" + }, + { + "key": "block.minecraft.banner.skull.magenta", + "english_translation": "Magenta Skull Charge" + }, + { + "key": "item.minecraft.skull_banner_pattern", + "english_translation": "Banner Pattern" + }, + { + "key": "selectWorld.edit.optimize", + "english_translation": "Optimize World" + }, + { + "key": "commands.bossbar.get.players.none", + "english_translation": "Custom bossbar %s has no players currently online" + }, + { + "key": "entity.minecraft.strider", + "english_translation": "Strider" + }, + { + "key": "argument.block.property.duplicate", + "english_translation": "Property '%s' can only be set once for block %s" + }, + { + "key": "subtitles.entity.parrot.imitate.vindicator", + "english_translation": "Parrot mutters" + }, + { + "key": "subtitles.entity.parrot.imitate.zombie_villager", + "english_translation": "Parrot groans" + }, + { + "key": "debug.reload_chunks.message", + "english_translation": "Reloading all chunks" + }, + { + "key": "mco.selectServer.minigame", + "english_translation": "Minigame:" + }, + { + "key": "createWorld.customize.custom.next", + "english_translation": "Next Page" + }, + { + "key": "stat.minecraft.open_enderchest", + "english_translation": "Ender Chests Opened" + }, + { + "key": "subtitles.entity.parrot.fly", + "english_translation": "Parrot flutters" + }, + { + "key": "mco.configure.world.invites.remove.tooltip", + "english_translation": "Remove" + }, + { + "key": "subtitles.entity.allay.ambient_without_item", + "english_translation": "Allay yearns" + }, + { + "key": "optimizeWorld.confirm.description", + "english_translation": "This will attempt to optimize your world by making sure all data is stored in the most recent game format. This can take a very long time, depending on your world. Once done, your world may play faster but will no longer be compatible with older versions of the game. Are you sure you wish to proceed?" + }, + { + "key": "block.minecraft.orange_wool", + "english_translation": "Orange Wool" + }, + { + "key": "item.minecraft.diamond", + "english_translation": "Diamond" + }, + { + "key": "chat.disabled.profile", + "english_translation": "Chat not allowed by account settings. Press '%s' again for more information." + }, + { + "key": "painting.minecraft.wither.author", + "english_translation": "Mojang" + }, + { + "key": "item.minecraft.copper_ingot", + "english_translation": "Copper Ingot" + }, + { + "key": "key.keyboard.keypad.decimal", + "english_translation": "Keypad Decimal" + }, + { + "key": "block.minecraft.orange_shulker_box", + "english_translation": "Orange Shulker Box" + }, + { + "key": "commands.teleport.invalidPosition", + "english_translation": "Invalid position for teleport" + }, + { + "key": "subtitles.entity.phantom.death", + "english_translation": "Phantom dies" + }, + { + "key": "gamerule.lavaSourceConversion", + "english_translation": "Lava converts to source" + }, + { + "key": "item.minecraft.diamond_hoe", + "english_translation": "Diamond Hoe" + }, + { + "key": "commands.tag.add.success.single", + "english_translation": "Added tag '%s' to %s" + }, + { + "key": "narrator.button.difficulty_lock.locked", + "english_translation": "Locked" + }, + { + "key": "death.attack.message_too_long", + "english_translation": "Actually, the message was too long to deliver fully. Sorry! Here's stripped version: %s" + }, + { + "key": "block.minecraft.banner.globe.cyan", + "english_translation": "Cyan Globe" + }, + { + "key": "block.minecraft.banner.diagonal_left.blue", + "english_translation": "Blue Per Bend Sinister" + }, + { + "key": "block.minecraft.banner.half_horizontal.green", + "english_translation": "Green Per Fess" + }, + { + "key": "commands.scoreboard.players.enable.invalid", + "english_translation": "Enable only works on trigger-objectives" + }, + { + "key": "advancements.nether.netherite_armor.title", + "english_translation": "Cover Me in Debris" + }, + { + "key": "painting.minecraft.sunset.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "commands.clear.test.multiple", + "english_translation": "Found %s matching item(s) on %s players" + }, + { + "key": "commands.summon.success", + "english_translation": "Summoned new %s" + }, + { + "key": "subtitles.entity.cat.ambient", + "english_translation": "Cat meows" + }, + { + "key": "block.minecraft.horn_coral", + "english_translation": "Horn Coral" + }, + { + "key": "item.minecraft.raw_iron", + "english_translation": "Raw Iron" + }, + { + "key": "subtitles.entity.enderman.hurt", + "english_translation": "Enderman hurts" + }, + { + "key": "subtitles.entity.husk.death", + "english_translation": "Husk dies" + }, + { + "key": "subtitles.entity.piglin.step", + "english_translation": "Piglin steps" + }, + { + "key": "effect.minecraft.hunger", + "english_translation": "Hunger" + }, + { + "key": "block.minecraft.gray_candle", + "english_translation": "Gray Candle" + }, + { + "key": "mco.selectServer.closeserver", + "english_translation": "Close realm" + }, + { + "key": "mco.time.now", + "english_translation": "right now" + }, + { + "key": "item.minecraft.lingering_potion.effect.mundane", + "english_translation": "Mundane Lingering Potion" + }, + { + "key": "multiplayer.status.pinging", + "english_translation": "Pinging..." + }, + { + "key": "commands.forceload.removed.all", + "english_translation": "Unmarked all force loaded chunks in %s" + }, + { + "key": "block.minecraft.dead_bubble_coral_block", + "english_translation": "Dead Bubble Coral Block" + }, + { + "key": "item.minecraft.music_disc_pigstep", + "english_translation": "Music Disc" + }, + { + "key": "subtitles.entity.player.freeze_hurt", + "english_translation": "Player freezes" + }, + { + "key": "block.minecraft.banner.square_top_left.pink", + "english_translation": "Pink Chief Dexter Canton" + }, + { + "key": "block.minecraft.banner.half_vertical.purple", + "english_translation": "Purple Per Pale" + }, + { + "key": "block.minecraft.dark_oak_pressure_plate", + "english_translation": "Dark Oak Pressure Plate" + }, + { + "key": "subtitles.entity.drowned.shoot", + "english_translation": "Drowned throws Trident" + }, + { + "key": "block.minecraft.crimson_roots", + "english_translation": "Crimson Roots" + }, + { + "key": "biome.minecraft.the_end", + "english_translation": "The End" + }, + { + "key": "effect.minecraft.haste", + "english_translation": "Haste" + }, + { + "key": "block.minecraft.polished_blackstone_stairs", + "english_translation": "Polished Blackstone Stairs" + }, + { + "key": "options.showSubtitles", + "english_translation": "Show Subtitles" + }, + { + "key": "block.minecraft.banner.square_bottom_left.light_blue", + "english_translation": "Light Blue Base Dexter Canton" + }, + { + "key": "advancements.adventure.craft_decorated_pot_using_only_sherds.title", + "english_translation": "Careful Restoration" + }, + { + "key": "advancements.husbandry.silk_touch_nest.description", + "english_translation": "Move a Bee Nest, with 3 Bees inside, using Silk Touch" + }, + { + "key": "gui.copy_link_to_clipboard", + "english_translation": "Copy Link to Clipboard" + }, + { + "key": "block.minecraft.nether_quartz_ore", + "english_translation": "Nether Quartz Ore" + }, + { + "key": "color.minecraft.cyan", + "english_translation": "Cyan" + }, + { + "key": "subtitles.entity.ravager.step", + "english_translation": "Ravager steps" + }, + { + "key": "debug.advanced_tooltips.on", + "english_translation": "Advanced tooltips: shown" + }, + { + "key": "commands.seed.success", + "english_translation": "Seed: %s" + }, + { + "key": "argument.entity.options.predicate.description", + "english_translation": "Custom predicate" + }, + { + "key": "subtitles.entity.strider.retreat", + "english_translation": "Strider retreats" + }, + { + "key": "enchantment.minecraft.impaling", + "english_translation": "Impaling" + }, + { + "key": "block.minecraft.banner.stripe_left.cyan", + "english_translation": "Cyan Pale Dexter" + }, + { + "key": "block.minecraft.crimson_button", + "english_translation": "Crimson Button" + }, + { + "key": "advancements.story.upgrade_tools.title", + "english_translation": "Getting an Upgrade" + }, + { + "key": "createWorld.customize.custom.useRavines", + "english_translation": "Ravines" + }, + { + "key": "subtitles.entity.pig.ambient", + "english_translation": "Pig oinks" + }, + { + "key": "block.minecraft.banner.half_horizontal.black", + "english_translation": "Black Per Fess" + }, + { + "key": "block.minecraft.banner.stripe_right.pink", + "english_translation": "Pink Pale Sinister" + }, + { + "key": "trim_material.minecraft.copper", + "english_translation": "Copper Material" + }, + { + "key": "narrator.toast.disabled", + "english_translation": "Narrator Disabled" + }, + { + "key": "block.minecraft.banner.gradient.black", + "english_translation": "Black Gradient" + }, + { + "key": "block.minecraft.ochre_froglight", + "english_translation": "Ochre Froglight" + }, + { + "key": "enchantment.level.8", + "english_translation": "VIII" + }, + { + "key": "enchantment.level.7", + "english_translation": "VII" + }, + { + "key": "enchantment.level.6", + "english_translation": "VI" + }, + { + "key": "enchantment.level.5", + "english_translation": "V" + }, + { + "key": "enchantment.level.4", + "english_translation": "IV" + }, + { + "key": "enchantment.level.3", + "english_translation": "III" + }, + { + "key": "enchantment.level.2", + "english_translation": "II" + }, + { + "key": "narration.suggestion.tooltip", + "english_translation": "Selected suggestion %s out of %s: %s (%s)" + }, + { + "key": "enchantment.level.1", + "english_translation": "I" + }, + { + "key": "advancements.adventure.spyglass_at_parrot.description", + "english_translation": "Look at a Parrot through a Spyglass" + }, + { + "key": "commands.forceload.added.single", + "english_translation": "Marked chunk %s in %s to be force loaded" + }, + { + "key": "enchantment.level.9", + "english_translation": "IX" + }, + { + "key": "item.minecraft.stone_shovel", + "english_translation": "Stone Shovel" + }, + { + "key": "item.minecraft.arrow", + "english_translation": "Arrow" + }, + { + "key": "subtitles.block.end_portal.spawn", + "english_translation": "End Portal opens" + }, + { + "key": "block.minecraft.banner.base.magenta", + "english_translation": "Fully Magenta Field" + }, + { + "key": "advMode.mode.sequence", + "english_translation": "Chain" + }, + { + "key": "options.hideLightningFlashes.tooltip", + "english_translation": "Prevents Lightning Bolts from making the sky flash. The bolts themselves will still be visible." + }, + { + "key": "block.minecraft.yellow_wool", + "english_translation": "Yellow Wool" + }, + { + "key": "advancements.husbandry.feed_snifflet.description", + "english_translation": "Feed a Snifflet" + }, + { + "key": "mco.terms.buttons.agree", + "english_translation": "Agree" + }, + { + "key": "block.minecraft.oak_wall_hanging_sign", + "english_translation": "Oak Wall Hanging Sign" + }, + { + "key": "block.minecraft.crimson_fence", + "english_translation": "Crimson Fence" + }, + { + "key": "advancements.adventure.avoid_vibration.title", + "english_translation": "Sneak 100" + }, + { + "key": "attribute.name.generic.luck", + "english_translation": "Luck" + }, + { + "key": "attribute.name.generic.attack_speed", + "english_translation": "Attack Speed" + }, + { + "key": "block.minecraft.banner.gradient.lime", + "english_translation": "Lime Gradient" + }, + { + "key": "block.minecraft.banner.stripe_downright.brown", + "english_translation": "Brown Bend" + }, + { + "key": "commands.pardonip.invalid", + "english_translation": "Invalid IP address" + }, + { + "key": "selectWorld.load_folder_access", + "english_translation": "Unable to read or access folder where game worlds are saved!" + }, + { + "key": "advancements.adventure.play_jukebox_in_meadows.description", + "english_translation": "Make the Meadows come alive with the sound of music from a Jukebox" + }, + { + "key": "key.keyboard.equal", + "english_translation": "=" + }, + { + "key": "mco.configure.world.subscription.day", + "english_translation": "day" + }, + { + "key": "entity.minecraft.polar_bear", + "english_translation": "Polar Bear" + }, + { + "key": "subtitles.entity.warden.sniff", + "english_translation": "Warden sniffs" + }, + { + "key": "block.minecraft.green_candle_cake", + "english_translation": "Cake with Green Candle" + }, + { + "key": "narration.recipe.usage.more", + "english_translation": "Right click to show more recipes" + }, + { + "key": "painting.random", + "english_translation": "Random variant" + }, + { + "key": "subtitles.entity.villager.work_farmer", + "english_translation": "Farmer works" + }, + { + "key": "block.minecraft.banner.mojang.orange", + "english_translation": "Orange Thing" + }, + { + "key": "key.advancements", + "english_translation": "Advancements" + }, + { + "key": "subtitles.block.tripwire.detach", + "english_translation": "Tripwire detaches" + }, + { + "key": "block.minecraft.cracked_deepslate_tiles", + "english_translation": "Cracked Deepslate Tiles" + }, + { + "key": "death.attack.starve.player", + "english_translation": "%1$s starved to death whilst fighting %2$s" + }, + { + "key": "item.minecraft.elder_guardian_spawn_egg", + "english_translation": "Elder Guardian Spawn Egg" + }, + { + "key": "block.minecraft.stripped_mangrove_wood", + "english_translation": "Stripped Mangrove Wood" + }, + { + "key": "painting.minecraft.graham.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "painting.minecraft.wanderer.title", + "english_translation": "Wanderer" + }, + { + "key": "block.minecraft.chiseled_deepslate", + "english_translation": "Chiseled Deepslate" + }, + { + "key": "item.minecraft.spectral_arrow", + "english_translation": "Spectral Arrow" + }, + { + "key": "stat.minecraft.interact_with_loom", + "english_translation": "Interactions with Loom" + }, + { + "key": "subtitles.item.brush.brushing.sand.complete", + "english_translation": "Brushing Sand completed" + }, + { + "key": "block.minecraft.banner.piglin.lime", + "english_translation": "Lime Snout" + }, + { + "key": "selectWorld.versionQuestion", + "english_translation": "Do you really want to load this world?" + }, + { + "key": "item.minecraft.salmon_bucket", + "english_translation": "Bucket of Salmon" + }, + { + "key": "advancements.husbandry.root.description", + "english_translation": "The world is full of friends and food" + }, + { + "key": "outOfMemory.message", + "english_translation": "Minecraft has run out of memory.\n\nThis could be caused by a bug in the game or by the Java Virtual Machine not being allocated enough memory.\n\nTo prevent level corruption, the current game has quit. We've tried to free up enough memory to let you go back to the main menu and back to playing, but this may not have worked.\n\nPlease restart the game if you see this message again." + }, + { + "key": "biome.minecraft.crimson_forest", + "english_translation": "Crimson Forest" + }, + { + "key": "block.minecraft.banner.gradient_up.light_gray", + "english_translation": "Light Gray Base Gradient" + }, + { + "key": "subtitles.entity.enderman.stare", + "english_translation": "Enderman cries out" + }, + { + "key": "block.minecraft.cyan_banner", + "english_translation": "Cyan Banner" + }, + { + "key": "block.minecraft.andesite_slab", + "english_translation": "Andesite Slab" + }, + { + "key": "mco.backup.entry.worldType", + "english_translation": "World Type" + }, + { + "key": "entity.minecraft.goat", + "english_translation": "Goat" + }, + { + "key": "commands.item.entity.set.success.multiple", + "english_translation": "Replaced a slot on %s entities with %s" + }, + { + "key": "block.minecraft.banner.diagonal_right.white", + "english_translation": "White Per Bend" + }, + { + "key": "subtitles.entity.goat.step", + "english_translation": "Goat steps" + }, + { + "key": "commands.save.enabled", + "english_translation": "Automatic saving is now enabled" + }, + { + "key": "item.minecraft.golden_carrot", + "english_translation": "Golden Carrot" + }, + { + "key": "mco.upload.button.name", + "english_translation": "Upload" + }, + { + "key": "commands.place.structure.failed", + "english_translation": "Failed to place structure" + }, + { + "key": "block.minecraft.pitcher_plant", + "english_translation": "Pitcher Plant" + }, + { + "key": "commands.spreadplayers.failed.entities", + "english_translation": "Could not spread %s entity/entities around %s, %s (too many entities for space - try using spread of at most %s)" + }, + { + "key": "item.disabled", + "english_translation": "Disabled item" + }, + { + "key": "block.minecraft.banner.stripe_downleft.black", + "english_translation": "Black Bend Sinister" + }, + { + "key": "generator.custom", + "english_translation": "Custom" + }, + { + "key": "argument.entity.selector.missing", + "english_translation": "Missing selector type" + }, + { + "key": "narration.slider.usage.hovered", + "english_translation": "Drag slider to change value" + }, + { + "key": "item.minecraft.baked_potato", + "english_translation": "Baked Potato" + }, + { + "key": "block.minecraft.smooth_red_sandstone_slab", + "english_translation": "Smooth Red Sandstone Slab" + }, + { + "key": "death.attack.badRespawnPoint.link", + "english_translation": "Intentional Game Design" + }, + { + "key": "gamerule.fallDamage", + "english_translation": "Deal fall damage" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.yellow", + "english_translation": "Yellow Per Bend Sinister Inverted" + }, + { + "key": "block.minecraft.warped_planks", + "english_translation": "Warped Planks" + }, + { + "key": "dataPack.bundle.name", + "english_translation": "Bundles" + }, + { + "key": "item.minecraft.mangrove_boat", + "english_translation": "Mangrove Boat" + }, + { + "key": "narrator.position.screen", + "english_translation": "Screen element %s out of %s" + }, + { + "key": "block.minecraft.banner.half_vertical_right.purple", + "english_translation": "Purple Per Pale Inverted" + }, + { + "key": "block.minecraft.banner.diagonal_right.light_gray", + "english_translation": "Light Gray Per Bend" + }, + { + "key": "block.minecraft.banner.cross.green", + "english_translation": "Green Saltire" + }, + { + "key": "block.minecraft.cracked_nether_bricks", + "english_translation": "Cracked Nether Bricks" + }, + { + "key": "key.keyboard.up", + "english_translation": "Up Arrow" + }, + { + "key": "block.minecraft.banner.stripe_downleft.green", + "english_translation": "Green Bend Sinister" + }, + { + "key": "block.minecraft.banner.diagonal_right.pink", + "english_translation": "Pink Per Bend" + }, + { + "key": "mco.configure.current.minigame", + "english_translation": "Current" + }, + { + "key": "block.minecraft.banner.piglin.blue", + "english_translation": "Blue Snout" + }, + { + "key": "item.minecraft.zombie_villager_spawn_egg", + "english_translation": "Zombie Villager Spawn Egg" + }, + { + "key": "subtitles.entity.parrot.imitate.blaze", + "english_translation": "Parrot breathes" + }, + { + "key": "block.minecraft.stone_bricks", + "english_translation": "Stone Bricks" + }, + { + "key": "block.minecraft.blackstone_slab", + "english_translation": "Blackstone Slab" + }, + { + "key": "block.minecraft.snow", + "english_translation": "Snow" + }, + { + "key": "options.difficulty.peaceful.info", + "english_translation": "No hostile mobs and only some neutral mobs spawn. Hunger bar doesn't deplete and health replenishes over time." + }, + { + "key": "item.minecraft.shulker_spawn_egg", + "english_translation": "Shulker Spawn Egg" + }, + { + "key": "commands.publish.alreadyPublished", + "english_translation": "Multiplayer game is already hosted on port %s" + }, + { + "key": "subtitles.entity.goat.eat", + "english_translation": "Goat eats" + }, + { + "key": "item.minecraft.heart_pottery_shard", + "english_translation": "Heart Pottery Shard" + }, + { + "key": "block.minecraft.purple_stained_glass_pane", + "english_translation": "Purple Stained Glass Pane" + }, + { + "key": "inventory.hotbarSaved", + "english_translation": "Item hotbar saved (restore with %1$s+%2$s)" + }, + { + "key": "structure_block.load_prepare", + "english_translation": "Structure '%s' position prepared" + }, + { + "key": "subtitles.entity.warden.emerge", + "english_translation": "Warden emerges" + }, + { + "key": "subtitles.item.axe.scrape", + "english_translation": "Axe scrapes" + }, + { + "key": "gamerule.announceAdvancements", + "english_translation": "Announce advancements" + }, + { + "key": "subtitles.entity.stray.death", + "english_translation": "Stray dies" + }, + { + "key": "item.modifiers.chest", + "english_translation": "When on Body:" + }, + { + "key": "block.minecraft.banner.square_top_right.cyan", + "english_translation": "Cyan Chief Sinister Canton" + }, + { + "key": "block.minecraft.cobweb", + "english_translation": "Cobweb" + }, + { + "key": "color.minecraft.brown", + "english_translation": "Brown" + }, + { + "key": "options.entityShadows", + "english_translation": "Entity Shadows" + }, + { + "key": "entity.minecraft.item_display", + "english_translation": "Item Display" + }, + { + "key": "filled_map.buried_treasure", + "english_translation": "Buried Treasure Map" + }, + { + "key": "subtitles.entity.guardian.flop", + "english_translation": "Guardian flops" + }, + { + "key": "subtitles.entity.bat.takeoff", + "english_translation": "Bat takes off" + }, + { + "key": "entity.minecraft.tropical_fish.type.sunstreak", + "english_translation": "Sunstreak" + }, + { + "key": "block.minecraft.mycelium", + "english_translation": "Mycelium" + }, + { + "key": "multiplayer.applyingPack", + "english_translation": "Applying resource pack" + }, + { + "key": "item.minecraft.milk_bucket", + "english_translation": "Milk Bucket" + }, + { + "key": "painting.minecraft.pigscene.title", + "english_translation": "Pigscene" + }, + { + "key": "commands.debug.stopped", + "english_translation": "Stopped tick profiling after %s seconds and %s ticks (%s ticks per second)" + }, + { + "key": "entity.minecraft.blaze", + "english_translation": "Blaze" + }, + { + "key": "selectWorld.backupQuestion.experimental", + "english_translation": "Worlds using Experimental Settings are not supported" + }, + { + "key": "gui.narrate.editBox", + "english_translation": "%s edit box: %s" + }, + { + "key": "block.minecraft.bamboo_trapdoor", + "english_translation": "Bamboo Trapdoor" + }, + { + "key": "argument.entity.options.inapplicable", + "english_translation": "Option '%s' isn't applicable here" + }, + { + "key": "block.minecraft.beacon", + "english_translation": "Beacon" + }, + { + "key": "telemetry_info.screen.description", + "english_translation": "Collecting this data helps us improve Minecraft by guiding us in directions that are relevant to our players.\nYou can also send in additional feedback to help us keep improving Minecraft." + }, + { + "key": "stat.minecraft.aviate_one_cm", + "english_translation": "Distance by Elytra" + }, + { + "key": "book.finalizeButton", + "english_translation": "Sign and Close" + }, + { + "key": "subtitles.entity.strider.hurt", + "english_translation": "Strider hurts" + }, + { + "key": "block.minecraft.smooth_stone_slab", + "english_translation": "Smooth Stone Slab" + }, + { + "key": "biome.minecraft.snowy_beach", + "english_translation": "Snowy Beach" + }, + { + "key": "death.fell.accident.other_climbable", + "english_translation": "%1$s fell while climbing" + }, + { + "key": "item.minecraft.iron_horse_armor", + "english_translation": "Iron Horse Armor" + }, + { + "key": "chat.copy", + "english_translation": "Copy to Clipboard" + }, + { + "key": "entity.minecraft.fox", + "english_translation": "Fox" + }, + { + "key": "mco.selectServer.uninitialized", + "english_translation": "Click to start your new realm!" + }, + { + "key": "selectWorld.backupWarning.snapshot", + "english_translation": "This world was last played in version %s; you are on version %s. Please make a backup in case you experience world corruptions!" + }, + { + "key": "subtitles.entity.rabbit.ambient", + "english_translation": "Rabbit squeaks" + }, + { + "key": "subtitles.entity.sniffer.digging", + "english_translation": "Sniffer digs" + }, + { + "key": "spectatorMenu.previous_page", + "english_translation": "Previous Page" + }, + { + "key": "item.minecraft.filled_map", + "english_translation": "Map" + }, + { + "key": "stat.minecraft.interact_with_beacon", + "english_translation": "Interactions with Beacon" + }, + { + "key": "block.minecraft.banner.piglin.red", + "english_translation": "Red Snout" + }, + { + "key": "item.minecraft.cherry_boat", + "english_translation": "Cherry Boat" + }, + { + "key": "block.minecraft.cave_air", + "english_translation": "Cave Air" + }, + { + "key": "block.minecraft.podzol", + "english_translation": "Podzol" + }, + { + "key": "gamerule.snowAccumulationHeight", + "english_translation": "Snow accumulation height" + }, + { + "key": "slot.unknown", + "english_translation": "Unknown slot '%s'" + }, + { + "key": "subtitles.block.iron_trapdoor.close", + "english_translation": "Trapdoor closes" + }, + { + "key": "block.minecraft.banner.square_bottom_left.magenta", + "english_translation": "Magenta Base Dexter Canton" + }, + { + "key": "options.autosaveIndicator", + "english_translation": "Autosave Indicator" + }, + { + "key": "selectWorld.version", + "english_translation": "Version:" + }, + { + "key": "death.attack.inWall.player", + "english_translation": "%1$s suffocated in a wall whilst fighting %2$s" + }, + { + "key": "item.minecraft.llama_spawn_egg", + "english_translation": "Llama Spawn Egg" + }, + { + "key": "item.minecraft.splash_potion.effect.luck", + "english_translation": "Splash Potion of Luck" + }, + { + "key": "options.narrator.chat", + "english_translation": "Narrates Chat" + }, + { + "key": "death.fell.accident.scaffolding", + "english_translation": "%1$s fell off scaffolding" + }, + { + "key": "item.minecraft.stone_hoe", + "english_translation": "Stone Hoe" + }, + { + "key": "block.minecraft.banner.flower.red", + "english_translation": "Red Flower Charge" + }, + { + "key": "item.minecraft.iron_nugget", + "english_translation": "Iron Nugget" + }, + { + "key": "item.minecraft.dolphin_spawn_egg", + "english_translation": "Dolphin Spawn Egg" + }, + { + "key": "commands.teleport.success.location.single", + "english_translation": "Teleported %s to %s, %s, %s" + }, + { + "key": "options.graphics.fancy.tooltip", + "english_translation": "Fancy graphics balances performance and quality for the majority of machines.\nWeather, clouds, and particles may not appear behind translucent blocks or water." + }, + { + "key": "block.minecraft.banner.half_vertical_right.red", + "english_translation": "Red Per Pale Inverted" + }, + { + "key": "key.keyboard.caps.lock", + "english_translation": "Caps Lock" + }, + { + "key": "itemGroup.foodAndDrink", + "english_translation": "Food & Drinks" + }, + { + "key": "merchant.next_level", + "english_translation": "Trader's next level" + }, + { + "key": "block.minecraft.banner.diagonal_left.red", + "english_translation": "Red Per Bend Sinister" + }, + { + "key": "item.minecraft.item_frame", + "english_translation": "Item Frame" + }, + { + "key": "block.minecraft.banner.half_vertical_right.cyan", + "english_translation": "Cyan Per Pale Inverted" + }, + { + "key": "subtitles.entity.generic.eat", + "english_translation": "Eating" + }, + { + "key": "biome.minecraft.old_growth_pine_taiga", + "english_translation": "Old Growth Pine Taiga" + }, + { + "key": "subtitles.entity.hoglin.death", + "english_translation": "Hoglin dies" + }, + { + "key": "arguments.nbtpath.nothing_found", + "english_translation": "Found no elements matching %s" + }, + { + "key": "mco.reset.world.adventure", + "english_translation": "Adventures" + }, + { + "key": "painting.minecraft.sea.title", + "english_translation": "Seaside" + }, + { + "key": "options.difficulty.easy.info", + "english_translation": "Hostile mobs spawn but deal less damage. Hunger bar depletes and drains health down to 5 hearts." + }, + { + "key": "options.darkMojangStudiosBackgroundColor", + "english_translation": "Monochrome Logo" + }, + { + "key": "stat.minecraft.interact_with_campfire", + "english_translation": "Interactions with Campfire" + }, + { + "key": "subtitles.entity.shulker_bullet.hit", + "english_translation": "Shulker Bullet explodes" + }, + { + "key": "block.minecraft.cyan_wool", + "english_translation": "Cyan Wool" + }, + { + "key": "death.attack.magic.player", + "english_translation": "%1$s was killed by magic whilst trying to escape %2$s" + }, + { + "key": "commands.attribute.failed.no_attribute", + "english_translation": "Entity %s has no attribute %s" + }, + { + "key": "item.minecraft.music_disc_strad.desc", + "english_translation": "C418 - strad" + }, + { + "key": "commands.gamemode.success.other", + "english_translation": "Set %s's game mode to %s" + }, + { + "key": "item.minecraft.lingering_potion.effect.harming", + "english_translation": "Lingering Potion of Harming" + }, + { + "key": "block.minecraft.banner.straight_cross.pink", + "english_translation": "Pink Cross" + }, + { + "key": "subtitles.entity.shulker.open", + "english_translation": "Shulker opens" + }, + { + "key": "argument.entity.selector.allPlayers", + "english_translation": "All players" + }, + { + "key": "trim_pattern.minecraft.sentry", + "english_translation": "Sentry Armor Trim" + }, + { + "key": "container.enchant.lapis.one", + "english_translation": "1 Lapis Lazuli" + }, + { + "key": "stat.minecraft.fly_one_cm", + "english_translation": "Distance Flown" + }, + { + "key": "item.modifiers.legs", + "english_translation": "When on Legs:" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.cyan", + "english_translation": "Cyan Per Bend Inverted" + }, + { + "key": "commands.bossbar.set.visible.success.visible", + "english_translation": "Custom bossbar %s is now visible" + }, + { + "key": "block.minecraft.banner.small_stripes.lime", + "english_translation": "Lime Paly" + }, + { + "key": "block.minecraft.cut_sandstone", + "english_translation": "Cut Sandstone" + }, + { + "key": "block.minecraft.red_tulip", + "english_translation": "Red Tulip" + }, + { + "key": "subtitles.block.cake.add_candle", + "english_translation": "Cake squishes" + }, + { + "key": "gui.chatReport.send.no_reason", + "english_translation": "Please select a report category" + }, + { + "key": "controls.title", + "english_translation": "Controls" + }, + { + "key": "subtitles.entity.piglin.jealous", + "english_translation": "Piglin snorts enviously" + }, + { + "key": "telemetry.event.performance_metrics.description", + "english_translation": "Knowing the overall performance profile of Minecraft helps us tune and optimize the game for a wide range of machine specifications and operating systems. \nGame version is included to help us compare the performance profile for new versions of Minecraft." + }, + { + "key": "block.minecraft.light_gray_banner", + "english_translation": "Light Gray Banner" + }, + { + "key": "multiplayer.title", + "english_translation": "Play Multiplayer" + }, + { + "key": "gamerule.randomTickSpeed", + "english_translation": "Random tick speed rate" + }, + { + "key": "item.minecraft.heart_of_the_sea", + "english_translation": "Heart of the Sea" + }, + { + "key": "key.keyboard.left.alt", + "english_translation": "Left Alt" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.red", + "english_translation": "Red Per Bend Inverted" + }, + { + "key": "deathScreen.score", + "english_translation": "Score" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.magenta", + "english_translation": "Magenta Per Bend Sinister Inverted" + }, + { + "key": "optimizeWorld.info.skipped", + "english_translation": "Skipped chunks: %s" + }, + { + "key": "commands.ride.dismount.success", + "english_translation": "%s stopped riding %s" + }, + { + "key": "subtitles.entity.turtle.death", + "english_translation": "Turtle dies" + }, + { + "key": "item.minecraft.name_tag", + "english_translation": "Name Tag" + }, + { + "key": "stat.minecraft.jump", + "english_translation": "Jumps" + }, + { + "key": "block.minecraft.polished_deepslate_wall", + "english_translation": "Polished Deepslate Wall" + }, + { + "key": "subtitles.entity.elder_guardian.curse", + "english_translation": "Elder Guardian curses" + }, + { + "key": "block.minecraft.banner.stripe_top.purple", + "english_translation": "Purple Chief" + }, + { + "key": "commands.fillbiome.success.count", + "english_translation": "%s biome entry/entries set between %s, %s, %s and %s, %s, %s" + }, + { + "key": "item.minecraft.glass_bottle", + "english_translation": "Glass Bottle" + }, + { + "key": "block.minecraft.banner.piglin.magenta", + "english_translation": "Magenta Snout" + }, + { + "key": "item.minecraft.ender_eye", + "english_translation": "Eye of Ender" + }, + { + "key": "chat.disabled.options", + "english_translation": "Chat disabled in client options." + }, + { + "key": "item.minecraft.archer_pottery_shard", + "english_translation": "Archer Pottery Shard" + }, + { + "key": "key.keyboard.pause", + "english_translation": "Pause" + }, + { + "key": "block.minecraft.jungle_wall_sign", + "english_translation": "Jungle Wall Sign" + }, + { + "key": "block.minecraft.waxed_copper_block", + "english_translation": "Waxed Block of Copper" + }, + { + "key": "item.minecraft.pitcher_pod", + "english_translation": "Pitcher Pod" + }, + { + "key": "mco.template.select.failure", + "english_translation": "We couldn't retrieve the list of content for this category.\nPlease check your internet connection, or try again later." + }, + { + "key": "pack.name.fabricMods", + "english_translation": "Fabric Mods" + }, + { + "key": "commands.trigger.simple.success", + "english_translation": "Triggered %s" + }, + { + "key": "quickplay.error.title", + "english_translation": "Failed to Quick Play" + }, + { + "key": "item.minecraft.firework_star.white", + "english_translation": "White" + }, + { + "key": "block.minecraft.gray_stained_glass", + "english_translation": "Gray Stained Glass" + }, + { + "key": "block.minecraft.sandstone_slab", + "english_translation": "Sandstone Slab" + }, + { + "key": "item.minecraft.lingering_potion.effect.leaping", + "english_translation": "Lingering Potion of Leaping" + }, + { + "key": "container.furnace", + "english_translation": "Furnace" + }, + { + "key": "commands.forceload.query.success", + "english_translation": "Chunk at %s in %s is marked for force loading" + }, + { + "key": "commands.whitelist.remove.failed", + "english_translation": "Player is not whitelisted" + }, + { + "key": "block.minecraft.banner.skull.white", + "english_translation": "White Skull Charge" + }, + { + "key": "block.minecraft.banner.square_bottom_left.yellow", + "english_translation": "Yellow Base Dexter Canton" + }, + { + "key": "block.minecraft.banner.circle.cyan", + "english_translation": "Cyan Roundel" + }, + { + "key": "subtitles.item.flintandsteel.use", + "english_translation": "Flint and Steel click" + }, + { + "key": "options.telemetry.state.all", + "english_translation": "All" + }, + { + "key": "block.minecraft.potted_allium", + "english_translation": "Potted Allium" + }, + { + "key": "subtitles.entity.endermite.hurt", + "english_translation": "Endermite hurts" + }, + { + "key": "commands.debug.function.noRecursion", + "english_translation": "Can't trace from inside of function" + }, + { + "key": "block.minecraft.banner.small_stripes.blue", + "english_translation": "Blue Paly" + }, + { + "key": "block.minecraft.waxed_weathered_cut_copper_stairs", + "english_translation": "Waxed Weathered Cut Copper Stairs" + }, + { + "key": "block.minecraft.stone", + "english_translation": "Stone" + }, + { + "key": "subtitles.entity.allay.death", + "english_translation": "Allay dies" + }, + { + "key": "dataPack.vanilla.description", + "english_translation": "The default data for Minecraft" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.light_blue", + "english_translation": "Light Blue Per Bend Inverted" + }, + { + "key": "commands.place.jigsaw.success", + "english_translation": "Generated jigsaw at %s, %s, %s" + }, + { + "key": "trim_pattern.minecraft.wayfinder", + "english_translation": "Wayfinder Armor Trim" + }, + { + "key": "block.minecraft.banner.globe.black", + "english_translation": "Black Globe" + }, + { + "key": "block.minecraft.banner.skull.gray", + "english_translation": "Gray Skull Charge" + }, + { + "key": "advancements.adventure.very_very_frightening.description", + "english_translation": "Strike a Villager with lightning" + }, + { + "key": "selectWorld.backupQuestion.snapshot", + "english_translation": "Do you really want to load this world?" + }, + { + "key": "telemetry.property.game_mode.title", + "english_translation": "Game Mode" + }, + { + "key": "commands.scoreboard.players.list.empty", + "english_translation": "There are no tracked entities" + }, + { + "key": "gamerule.doTraderSpawning", + "english_translation": "Spawn Wandering Traders" + }, + { + "key": "advancements.story.lava_bucket.description", + "english_translation": "Fill a Bucket with lava" + }, + { + "key": "key.keyboard.minus", + "english_translation": "-" + }, + { + "key": "options.entityDistanceScaling", + "english_translation": "Entity Distance" + }, + { + "key": "item.minecraft.diamond_horse_armor", + "english_translation": "Diamond Horse Armor" + }, + { + "key": "gamerule.maxEntityCramming", + "english_translation": "Entity cramming threshold" + }, + { + "key": "advancements.adventure.totem_of_undying.title", + "english_translation": "Postmortal" + }, + { + "key": "entity.minecraft.snow_golem", + "english_translation": "Snow Golem" + }, + { + "key": "options.particles.minimal", + "english_translation": "Minimal" + }, + { + "key": "subtitles.block.barrel.open", + "english_translation": "Barrel opens" + }, + { + "key": "title.32bit.deprecation.realms", + "english_translation": "Minecraft will soon require a 64-bit system, which will prevent you from playing or using Realms on this device. You will need to manually cancel any Realms subscription." + }, + { + "key": "block.minecraft.copper_ore", + "english_translation": "Copper Ore" + }, + { + "key": "gui.socialInteractions.empty_blocked", + "english_translation": "No blocked players in chat" + }, + { + "key": "block.minecraft.green_wool", + "english_translation": "Green Wool" + }, + { + "key": "block.minecraft.carrots", + "english_translation": "Carrots" + }, + { + "key": "subtitles.entity.villager.work_mason", + "english_translation": "Mason works" + }, + { + "key": "mco.notification.dismiss", + "english_translation": "Dismiss" + }, + { + "key": "mco.configure.world.minigame", + "english_translation": "Current: %s" + }, + { + "key": "commands.summon.failed.uuid", + "english_translation": "Unable to summon entity due to duplicate UUIDs" + }, + { + "key": "advMode.trackOutput", + "english_translation": "Track output" + }, + { + "key": "mco.minigame.world.switch.title", + "english_translation": "Switch minigame" + }, + { + "key": "item.minecraft.cod", + "english_translation": "Raw Cod" + }, + { + "key": "block.minecraft.gray_candle_cake", + "english_translation": "Cake with Gray Candle" + }, + { + "key": "item.minecraft.debug_stick.select", + "english_translation": "selected \"%s\" (%s)" + }, + { + "key": "block.minecraft.piston_head", + "english_translation": "Piston Head" + }, + { + "key": "item.minecraft.potion.effect.slow_falling", + "english_translation": "Potion of Slow Falling" + }, + { + "key": "options.resourcepack", + "english_translation": "Resource Packs..." + }, + { + "key": "subtitles.entity.wither.hurt", + "english_translation": "Wither hurts" + }, + { + "key": "death.attack.mob", + "english_translation": "%1$s was slain by %2$s" + }, + { + "key": "block.minecraft.lime_carpet", + "english_translation": "Lime Carpet" + }, + { + "key": "advancements.nether.netherite_armor.description", + "english_translation": "Get a full suit of Netherite armor" + }, + { + "key": "subtitles.item.armor.equip_elytra", + "english_translation": "Elytra rustle" + }, + { + "key": "selectServer.hiddenAddress", + "english_translation": "(Hidden)" + }, + { + "key": "commands.weather.set.thunder", + "english_translation": "Set the weather to rain & thunder" + }, + { + "key": "color.minecraft.light_blue", + "english_translation": "Light Blue" + }, + { + "key": "block.minecraft.banner.mojang.red", + "english_translation": "Red Thing" + }, + { + "key": "subtitles.entity.salmon.flop", + "english_translation": "Salmon flops" + }, + { + "key": "block.minecraft.potted_crimson_roots", + "english_translation": "Potted Crimson Roots" + }, + { + "key": "item.minecraft.debug_stick.update", + "english_translation": "\"%s\" to %s" + }, + { + "key": "pack.incompatible.confirm.old", + "english_translation": "This pack was made for an older version of Minecraft and may no longer work correctly." + }, + { + "key": "options.narrator", + "english_translation": "Narrator" + }, + { + "key": "block.minecraft.stripped_crimson_hyphae", + "english_translation": "Stripped Crimson Hyphae" + }, + { + "key": "gui.chatReport.draft.content", + "english_translation": "Would you like to continue editing the existing report or discard it and create a new one?" + }, + { + "key": "mco.brokenworld.download", + "english_translation": "Download" + }, + { + "key": "subtitles.entity.zombie.break_wooden_door", + "english_translation": "Door breaks" + }, + { + "key": "block.minecraft.banner.gradient_up.gray", + "english_translation": "Gray Base Gradient" + }, + { + "key": "multiplayer.player.list.narration", + "english_translation": "Online players: %s" + }, + { + "key": "item.minecraft.bundle.fullness", + "english_translation": "%s/%s" + }, + { + "key": "subtitles.entity.hoglin.step", + "english_translation": "Hoglin steps" + }, + { + "key": "death.attack.dryout.player", + "english_translation": "%1$s died from dehydration whilst trying to escape %2$s" + }, + { + "key": "item.minecraft.iron_helmet", + "english_translation": "Iron Helmet" + }, + { + "key": "commands.experience.add.points.success.multiple", + "english_translation": "Gave %s experience points to %s players" + }, + { + "key": "subtitles.entity.parrot.imitate.piglin_brute", + "english_translation": "Parrot snorts" + }, + { + "key": "subtitles.entity.polar_bear.ambient_baby", + "english_translation": "Polar Bear hums" + }, + { + "key": "options.difficulty.normal.info", + "english_translation": "Hostile mobs spawn and deal standard damage. Hunger bar depletes and drains health down to half a heart." + }, + { + "key": "gui.toRealms", + "english_translation": "Back to Realms List" + }, + { + "key": "selectWorld.gameMode.survival", + "english_translation": "Survival" + }, + { + "key": "key.playerlist", + "english_translation": "List Players" + }, + { + "key": "options.graphics.warning.cancel", + "english_translation": "Take Me Back" + }, + { + "key": "debug.help.message", + "english_translation": "Key bindings:" + }, + { + "key": "block.minecraft.potted_blue_orchid", + "english_translation": "Potted Blue Orchid" + }, + { + "key": "block.minecraft.brick_stairs", + "english_translation": "Brick Stairs" + }, + { + "key": "structure_block.mode.data", + "english_translation": "Data" + }, + { + "key": "item.minecraft.beetroot_soup", + "english_translation": "Beetroot Soup" + }, + { + "key": "subtitles.entity.turtle.death_baby", + "english_translation": "Turtle baby dies" + }, + { + "key": "addServer.enterName", + "english_translation": "Server Name" + }, + { + "key": "multiplayer.disconnect.kicked", + "english_translation": "Kicked by an operator" + }, + { + "key": "block.minecraft.waxed_cut_copper_slab", + "english_translation": "Waxed Cut Copper Slab" + }, + { + "key": "mco.backup.changes.tooltip", + "english_translation": "Changes" + }, + { + "key": "subtitles.entity.skeleton.converted_to_stray", + "english_translation": "Skeleton converts to Stray" + }, + { + "key": "block.minecraft.banner.flower.yellow", + "english_translation": "Yellow Flower Charge" + }, + { + "key": "block.minecraft.banner.diagonal_right.magenta", + "english_translation": "Magenta Per Bend" + }, + { + "key": "mco.upload.size.failure.line2", + "english_translation": "It is %s. The maximum allowed size is %s." + }, + { + "key": "mco.upload.size.failure.line1", + "english_translation": "'%s' is too big!" + }, + { + "key": "createWorld.customize.custom.minHeight", + "english_translation": "Min. Height" + }, + { + "key": "item.minecraft.burn_pottery_shard", + "english_translation": "Burn Pottery Shard" + }, + { + "key": "block.minecraft.banner.square_bottom_right.purple", + "english_translation": "Purple Base Sinister Canton" + }, + { + "key": "commands.scoreboard.objectives.add.success", + "english_translation": "Created new objective %s" + }, + { + "key": "flat_world_preset.minecraft.water_world", + "english_translation": "Water World" + }, + { + "key": "key.keyboard.left.shift", + "english_translation": "Left Shift" + }, + { + "key": "block.minecraft.banner.base.brown", + "english_translation": "Fully Brown Field" + }, + { + "key": "block.minecraft.banner.base.red", + "english_translation": "Fully Red Field" + }, + { + "key": "command.context.here", + "english_translation": "<--[HERE]" + }, + { + "key": "mco.template.title", + "english_translation": "World templates" + }, + { + "key": "subtitles.entity.horse.ambient", + "english_translation": "Horse neighs" + }, + { + "key": "block.minecraft.cherry_wall_hanging_sign", + "english_translation": "Cherry Wall Hanging Sign" + }, + { + "key": "mco.configure.world.spawnNPCs", + "english_translation": "Spawn NPCs" + }, + { + "key": "item.minecraft.pillager_spawn_egg", + "english_translation": "Pillager Spawn Egg" + }, + { + "key": "structure_block.include_entities", + "english_translation": "Include Entities:" + }, + { + "key": "multiplayerWarning.check", + "english_translation": "Do not show this screen again" + }, + { + "key": "subtitles.entity.leash_knot.break", + "english_translation": "Leash Knot breaks" + }, + { + "key": "block.minecraft.banner.triangle_bottom.magenta", + "english_translation": "Magenta Chevron" + }, + { + "key": "options.hidden", + "english_translation": "Hidden" + }, + { + "key": "block.minecraft.banner.circle.brown", + "english_translation": "Brown Roundel" + }, + { + "key": "item.minecraft.strider_spawn_egg", + "english_translation": "Strider Spawn Egg" + }, + { + "key": "subtitles.entity.parrot.imitate.wither_skeleton", + "english_translation": "Parrot rattles" + }, + { + "key": "mco.gui.button", + "english_translation": "Button" + }, + { + "key": "block.minecraft.banner.diagonal_up_right.pink", + "english_translation": "Pink Per Bend Sinister Inverted" + }, + { + "key": "gui.socialInteractions.status_offline", + "english_translation": "Offline" + }, + { + "key": "block.minecraft.weeping_vines_plant", + "english_translation": "Weeping Vines Plant" + }, + { + "key": "mco.download.preparing", + "english_translation": "Preparing download" + }, + { + "key": "block.minecraft.banner.rhombus.light_blue", + "english_translation": "Light Blue Lozenge" + }, + { + "key": "mco.upload.entry.cheats", + "english_translation": "%1$s, %2$s" + }, + { + "key": "death.attack.outsideBorder.player", + "english_translation": "%1$s left the confines of this world whilst fighting %2$s" + }, + { + "key": "block.minecraft.gray_banner", + "english_translation": "Gray Banner" + }, + { + "key": "commands.function.success.single", + "english_translation": "Executed %s command(s) from function '%s'" + }, + { + "key": "multiplayer.message_not_delivered", + "english_translation": "Can't deliver chat message, check server logs: %s" + }, + { + "key": "subtitles.entity.fox.aggro", + "english_translation": "Fox angers" + }, + { + "key": "gamerule.mobGriefing", + "english_translation": "Allow destructive mob actions" + }, + { + "key": "item.minecraft.spyglass", + "english_translation": "Spyglass" + }, + { + "key": "subtitles.item.bucket.fill_axolotl", + "english_translation": "Axolotl scooped" + }, + { + "key": "options.screenEffectScale.tooltip", + "english_translation": "Strength of nausea and Nether portal screen distortion effects.\nAt lower values, the nausea effect is replaced with a green overlay." + }, + { + "key": "selectWorld.gameMode", + "english_translation": "Game Mode" + }, + { + "key": "entity.minecraft.tropical_fish.type.stripey", + "english_translation": "Stripey" + }, + { + "key": "createWorld.customize.custom.prev", + "english_translation": "Previous Page" + }, + { + "key": "createWorld.customize.presets.title", + "english_translation": "Select a Preset" + }, + { + "key": "block.minecraft.white_stained_glass_pane", + "english_translation": "White Stained Glass Pane" + }, + { + "key": "block.minecraft.potted_jungle_sapling", + "english_translation": "Potted Jungle Sapling" + }, + { + "key": "options.modelPart.right_sleeve", + "english_translation": "Right Sleeve" + }, + { + "key": "commands.summon.failed", + "english_translation": "Unable to summon entity" + }, + { + "key": "arguments.operation.invalid", + "english_translation": "Invalid operation" + }, + { + "key": "block.minecraft.banner.half_vertical.black", + "english_translation": "Black Per Pale" + }, + { + "key": "item.minecraft.lingering_potion", + "english_translation": "Lingering Potion" + }, + { + "key": "subtitles.entity.villager.ambient", + "english_translation": "Villager mumbles" + }, + { + "key": "block.minecraft.banner.rhombus.lime", + "english_translation": "Lime Lozenge" + }, + { + "key": "block.minecraft.banner.half_vertical.cyan", + "english_translation": "Cyan Per Pale" + }, + { + "key": "key.keyboard.left.bracket", + "english_translation": "[" + }, + { + "key": "item.minecraft.tipped_arrow.effect.swiftness", + "english_translation": "Arrow of Swiftness" + }, + { + "key": "subtitles.item.trident.thunder", + "english_translation": "Trident thunder cracks" + }, + { + "key": "argument.time.invalid_tick_count", + "english_translation": "Tick count must be non-negative" + }, + { + "key": "block.minecraft.banner.stripe_top.magenta", + "english_translation": "Magenta Chief" + }, + { + "key": "menu.reportBugs", + "english_translation": "Report Bugs" + }, + { + "key": "enchantment.minecraft.frost_walker", + "english_translation": "Frost Walker" + }, + { + "key": "block.minecraft.banner.half_vertical_right.light_gray", + "english_translation": "Light Gray Per Pale Inverted" + }, + { + "key": "block.minecraft.banner.stripe_downright.orange", + "english_translation": "Orange Bend" + }, + { + "key": "biome.minecraft.stony_shore", + "english_translation": "Stony Shore" + }, + { + "key": "item.minecraft.goat_horn", + "english_translation": "Goat Horn" + }, + { + "key": "painting.minecraft.pointer.title", + "english_translation": "Pointer" + }, + { + "key": "block.minecraft.birch_button", + "english_translation": "Birch Button" + }, + { + "key": "subtitles.weather.rain", + "english_translation": "Rain falls" + }, + { + "key": "gamerule.tntExplosionDropDecay", + "english_translation": "In TNT explosions, some blocks won't drop their loot" + }, + { + "key": "block.minecraft.purple_candle_cake", + "english_translation": "Cake with Purple Candle" + }, + { + "key": "commands.summon.invalidPosition", + "english_translation": "Invalid position for summon" + }, + { + "key": "block.minecraft.stripped_crimson_stem", + "english_translation": "Stripped Crimson Stem" + }, + { + "key": "subtitles.block.sculk_sensor.clicking", + "english_translation": "Sculk Sensor starts clicking" + }, + { + "key": "subtitles.entity.camel.eat", + "english_translation": "Camel eats" + }, + { + "key": "subtitles.entity.wandering_trader.death", + "english_translation": "Wandering Trader dies" + }, + { + "key": "gui.abuseReport.reason.hate_speech", + "english_translation": "Hate speech" + }, + { + "key": "block.minecraft.jungle_fence", + "english_translation": "Jungle Fence" + }, + { + "key": "entity.minecraft.item", + "english_translation": "Item" + }, + { + "key": "selectWorld.mapType.normal", + "english_translation": "Normal" + }, + { + "key": "instrument.minecraft.yearn_goat_horn", + "english_translation": "Yearn" + }, + { + "key": "commands.schedule.cleared.success", + "english_translation": "Removed %s schedule(s) with id %s" + }, + { + "key": "block.minecraft.banner.globe.magenta", + "english_translation": "Magenta Globe" + }, + { + "key": "advMode.type", + "english_translation": "Type" + }, + { + "key": "generator.minecraft.flat", + "english_translation": "Superflat" + }, + { + "key": "menu.singleplayer", + "english_translation": "Singleplayer" + }, + { + "key": "narrator.loading.done", + "english_translation": "Done" + }, + { + "key": "commands.attribute.failed.entity", + "english_translation": "%s is not a valid entity for this command" + }, + { + "key": "disconnect.timeout", + "english_translation": "Timed out" + }, + { + "key": "selectWorld.recreate.error.text", + "english_translation": "Something went wrong while trying to recreate a world." + }, + { + "key": "book.generation.3", + "english_translation": "Tattered" + }, + { + "key": "book.generation.1", + "english_translation": "Copy of original" + }, + { + "key": "book.generation.2", + "english_translation": "Copy of a copy" + }, + { + "key": "gamerule.waterSourceConversion.description", + "english_translation": "When flowing water is surrounded on two sides by water sources it converts into a source." + }, + { + "key": "subtitles.entity.wandering_trader.reappeared", + "english_translation": "Wandering Trader appears" + }, + { + "key": "block.minecraft.seagrass", + "english_translation": "Seagrass" + }, + { + "key": "block.minecraft.diamond_block", + "english_translation": "Block of Diamond" + }, + { + "key": "item.minecraft.potion.effect.healing", + "english_translation": "Potion of Healing" + }, + { + "key": "mco.configure.world.subscription.remaining.days", + "english_translation": "%1$s day(s)" + }, + { + "key": "block.minecraft.blue_carpet", + "english_translation": "Blue Carpet" + }, + { + "key": "block.minecraft.lightning_rod", + "english_translation": "Lightning Rod" + }, + { + "key": "enchantment.minecraft.sweeping", + "english_translation": "Sweeping Edge" + }, + { + "key": "commands.data.block.query", + "english_translation": "%s, %s, %s has the following block data: %s" + }, + { + "key": "subtitles.entity.zombie.attack_wooden_door", + "english_translation": "Door shakes" + }, + { + "key": "item.minecraft.dark_oak_boat", + "english_translation": "Dark Oak Boat" + }, + { + "key": "options.chat.delay_none", + "english_translation": "Chat Delay: None" + }, + { + "key": "item.minecraft.white_dye", + "english_translation": "White Dye" + }, + { + "key": "block.minecraft.potted_cactus", + "english_translation": "Potted Cactus" + }, + { + "key": "gui.chatReport.send.comments_too_long", + "english_translation": "Please shorten the comment" + }, + { + "key": "item.minecraft.crossbow.projectile", + "english_translation": "Projectile:" + }, + { + "key": "container.enchant.clue", + "english_translation": "%s . . . ?" + }, + { + "key": "block.minecraft.banner.rhombus.blue", + "english_translation": "Blue Lozenge" + }, + { + "key": "selectWorld.edit.export_worldgen_settings", + "english_translation": "Export World Generation Settings" + }, + { + "key": "subtitles.entity.zombie.ambient", + "english_translation": "Zombie groans" + }, + { + "key": "item.minecraft.feather", + "english_translation": "Feather" + }, + { + "key": "options.languageWarning", + "english_translation": "Language translations may not be 100%% accurate" + }, + { + "key": "painting.minecraft.skeleton.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.banner.border.light_gray", + "english_translation": "Light Gray Bordure" + }, + { + "key": "subtitles.entity.zombie.death", + "english_translation": "Zombie dies" + }, + { + "key": "item.minecraft.chainmail_helmet", + "english_translation": "Chainmail Helmet" + }, + { + "key": "gui.banned.title.permanent", + "english_translation": "Account permanently banned" + }, + { + "key": "item.minecraft.warden_spawn_egg", + "english_translation": "Warden Spawn Egg" + }, + { + "key": "commands.forceload.removed.multiple", + "english_translation": "Unmarked %s chunks in %s from %s to %s for force loading" + }, + { + "key": "options.damageTiltStrength", + "english_translation": "Damage Tilt" + }, + { + "key": "team.visibility.always", + "english_translation": "Always" + }, + { + "key": "block.minecraft.mud_brick_slab", + "english_translation": "Mud Brick Slab" + }, + { + "key": "argument.entity.options.level.description", + "english_translation": "Experience level" + }, + { + "key": "block.minecraft.banner.gradient.orange", + "english_translation": "Orange Gradient" + }, + { + "key": "block.minecraft.netherrack", + "english_translation": "Netherrack" + }, + { + "key": "block.minecraft.ice", + "english_translation": "Ice" + }, + { + "key": "item.minecraft.tadpole_spawn_egg", + "english_translation": "Tadpole Spawn Egg" + }, + { + "key": "block.minecraft.banner.square_bottom_right.light_gray", + "english_translation": "Light Gray Base Sinister Canton" + }, + { + "key": "book.generation.0", + "english_translation": "Original" + }, + { + "key": "block.minecraft.banner.square_top_right.purple", + "english_translation": "Purple Chief Sinister Canton" + }, + { + "key": "block.minecraft.crimson_sign", + "english_translation": "Crimson Sign" + }, + { + "key": "block.minecraft.lantern", + "english_translation": "Lantern" + }, + { + "key": "mco.configure.world.invites.normal.tooltip", + "english_translation": "Normal user" + }, + { + "key": "block.minecraft.banner.stripe_bottom.brown", + "english_translation": "Brown Base" + }, + { + "key": "color.minecraft.magenta", + "english_translation": "Magenta" + }, + { + "key": "gui.banned.reason.extreme_violence_or_gore", + "english_translation": "Depictions of real-life excessive violence or gore" + }, + { + "key": "block.minecraft.banner.half_horizontal.purple", + "english_translation": "Purple Per Fess" + }, + { + "key": "block.minecraft.dropper", + "english_translation": "Dropper" + }, + { + "key": "commands.perf.notRunning", + "english_translation": "The performance profiler hasn't started" + }, + { + "key": "subtitles.entity.goat.ambient", + "english_translation": "Goat bleats" + }, + { + "key": "subtitles.entity.tadpole.flop", + "english_translation": "Tadpole flops" + }, + { + "key": "advMode.self", + "english_translation": "Use \"@s\" to target the executing entity" + }, + { + "key": "key.categories.gameplay", + "english_translation": "Gameplay" + }, + { + "key": "narration.selection.usage", + "english_translation": "Press up and down buttons to move to another entry" + }, + { + "key": "block.minecraft.banner.straight_cross.brown", + "english_translation": "Brown Cross" + }, + { + "key": "advancements.toast.task", + "english_translation": "Advancement Made!" + }, + { + "key": "block.minecraft.banner.triangles_top.red", + "english_translation": "Red Chief Indented" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.lime", + "english_translation": "Lime Per Fess Inverted" + }, + { + "key": "options.sensitivity", + "english_translation": "Sensitivity" + }, + { + "key": "subtitles.entity.enderman.teleport", + "english_translation": "Enderman teleports" + }, + { + "key": "block.minecraft.pink_banner", + "english_translation": "Pink Banner" + }, + { + "key": "commands.clear.test.single", + "english_translation": "Found %s matching item(s) on player %s" + }, + { + "key": "block.minecraft.pink_tulip", + "english_translation": "Pink Tulip" + }, + { + "key": "commands.drop.no_held_items", + "english_translation": "Entity can't hold any items" + }, + { + "key": "narrator.position.object_list", + "english_translation": "Selected row element %s out of %s" + }, + { + "key": "mco.trial.message.line1", + "english_translation": "Want to get your own realm?" + }, + { + "key": "mco.trial.message.line2", + "english_translation": "Click here for more info!" + }, + { + "key": "quickplay.error.realm_permission", + "english_translation": "Lacking permission to connect to this Realm" + }, + { + "key": "subtitles.entity.strider.eat", + "english_translation": "Strider eats" + }, + { + "key": "block.minecraft.banner.globe.green", + "english_translation": "Green Globe" + }, + { + "key": "argument.entity.options.tag.description", + "english_translation": "Entities with tag" + }, + { + "key": "argument.entity.options.dz.description", + "english_translation": "Entities between z and z + dz" + }, + { + "key": "item.minecraft.golden_shovel", + "english_translation": "Golden Shovel" + }, + { + "key": "subtitles.entity.leash_knot.place", + "english_translation": "Leash Knot tied" + }, + { + "key": "advancements.husbandry.allay_deliver_item_to_player.description", + "english_translation": "Have an Allay deliver items to you" + }, + { + "key": "block.minecraft.redstone_lamp", + "english_translation": "Redstone Lamp" + }, + { + "key": "effect.minecraft.jump_boost", + "english_translation": "Jump Boost" + }, + { + "key": "commands.scoreboard.objectives.display.alreadyEmpty", + "english_translation": "Nothing changed. That display slot is already empty" + }, + { + "key": "effect.minecraft.instant_health", + "english_translation": "Instant Health" + }, + { + "key": "mco.brokenworld.play", + "english_translation": "Play" + }, + { + "key": "options.modelPart.right_pants_leg", + "english_translation": "Right Pants Leg" + }, + { + "key": "subtitles.entity.skeleton_horse.swim", + "english_translation": "Skeleton Horse swims" + }, + { + "key": "commands.team.add.success", + "english_translation": "Created team %s" + }, + { + "key": "subtitles.entity.parrot.imitate.piglin", + "english_translation": "Parrot snorts" + }, + { + "key": "debug.inspect.server.block", + "english_translation": "Copied server-side block data to clipboard" + }, + { + "key": "block.minecraft.diorite_wall", + "english_translation": "Diorite Wall" + }, + { + "key": "commands.effect.clear.specific.success.multiple", + "english_translation": "Removed effect %s from %s targets" + }, + { + "key": "advancements.husbandry.breed_all_animals.description", + "english_translation": "Breed all the animals!" + }, + { + "key": "subtitles.block.beacon.power_select", + "english_translation": "Beacon power selected" + }, + { + "key": "resourcePack.programmer_art.name", + "english_translation": "Programmer Art" + }, + { + "key": "subtitles.block.beacon.deactivate", + "english_translation": "Beacon deactivates" + }, + { + "key": "options.off", + "english_translation": "OFF" + }, + { + "key": "item.minecraft.tipped_arrow.effect.levitation", + "english_translation": "Arrow of Levitation" + }, + { + "key": "item.minecraft.painting", + "english_translation": "Painting" + }, + { + "key": "block.minecraft.oak_button", + "english_translation": "Oak Button" + }, + { + "key": "commands.perf.stopped", + "english_translation": "Stopped performance profiling after %s second(s) and %s tick(s) (%s tick(s) per second)" + }, + { + "key": "commands.stopsound.success.source.sound", + "english_translation": "Stopped sound '%s' on source '%s'" + }, + { + "key": "subtitles.item.crossbow.hit", + "english_translation": "Arrow hits" + }, + { + "key": "entity.minecraft.minecart", + "english_translation": "Minecart" + }, + { + "key": "block.minecraft.polished_basalt", + "english_translation": "Polished Basalt" + }, + { + "key": "item.minecraft.lingering_potion.effect.water_breathing", + "english_translation": "Lingering Potion of Water Breathing" + }, + { + "key": "item.minecraft.acacia_chest_boat", + "english_translation": "Acacia Boat with Chest" + }, + { + "key": "multiplayer.status.old", + "english_translation": "Old" + }, + { + "key": "command.context.parse_error", + "english_translation": "%s at position %s: %s" + }, + { + "key": "stat.minecraft.drop", + "english_translation": "Items Dropped" + }, + { + "key": "block.minecraft.banner.stripe_downleft.red", + "english_translation": "Red Bend Sinister" + }, + { + "key": "block.minecraft.light_gray_bed", + "english_translation": "Light Gray Bed" + }, + { + "key": "stat_type.minecraft.crafted", + "english_translation": "Times Crafted" + }, + { + "key": "subtitles.block.sniffer_egg.plop", + "english_translation": "Sniffer plops" + }, + { + "key": "block.minecraft.polished_andesite_slab", + "english_translation": "Polished Andesite Slab" + }, + { + "key": "item.minecraft.firework_star.magenta", + "english_translation": "Magenta" + }, + { + "key": "subtitles.entity.villager.work_shepherd", + "english_translation": "Shepherd works" + }, + { + "key": "block.minecraft.mossy_cobblestone_wall", + "english_translation": "Mossy Cobblestone Wall" + }, + { + "key": "multiplayer.stopSleeping", + "english_translation": "Leave Bed" + }, + { + "key": "commands.particle.failed", + "english_translation": "The particle was not visible for anybody" + }, + { + "key": "subtitles.entity.camel.hurt", + "english_translation": "Camel hurts" + }, + { + "key": "advancements.husbandry.froglights.description", + "english_translation": "Have all Froglights in your inventory" + }, + { + "key": "screenshot.failure", + "english_translation": "Couldn't save screenshot: %s" + }, + { + "key": "parsing.quote.escape", + "english_translation": "Invalid escape sequence '\\%s' in quoted string" + }, + { + "key": "advancements.adventure.read_power_from_chiseled_bookshelf.title", + "english_translation": "The Power of Books" + }, + { + "key": "stat.minecraft.sprint_one_cm", + "english_translation": "Distance Sprinted" + }, + { + "key": "commands.scoreboard.objectives.remove.success", + "english_translation": "Removed objective %s" + }, + { + "key": "biome.minecraft.dark_forest", + "english_translation": "Dark Forest" + }, + { + "key": "entity.minecraft.trident", + "english_translation": "Trident" + }, + { + "key": "multiplayer.disconnect.unexpected_query_response", + "english_translation": "Unexpected custom data from client" + }, + { + "key": "block.minecraft.gilded_blackstone", + "english_translation": "Gilded Blackstone" + }, + { + "key": "subtitles.entity.husk.hurt", + "english_translation": "Husk hurts" + }, + { + "key": "advancements.story.form_obsidian.title", + "english_translation": "Ice Bucket Challenge" + }, + { + "key": "advancements.nether.charge_respawn_anchor.title", + "english_translation": "Not Quite \"Nine\" Lives" + }, + { + "key": "block.minecraft.jungle_slab", + "english_translation": "Jungle Slab" + }, + { + "key": "multiplayer.downloadingStats", + "english_translation": "Retrieving statistics..." + }, + { + "key": "subtitles.entity.cat.purr", + "english_translation": "Cat purrs" + }, + { + "key": "difficulty.lock.question", + "english_translation": "Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again." + }, + { + "key": "item.minecraft.jungle_chest_boat", + "english_translation": "Jungle Boat with Chest" + }, + { + "key": "team.visibility.hideForOtherTeams", + "english_translation": "Hide for other teams" + }, + { + "key": "block.minecraft.mangrove_button", + "english_translation": "Mangrove Button" + }, + { + "key": "item.minecraft.chicken", + "english_translation": "Raw Chicken" + }, + { + "key": "block.minecraft.banner.square_bottom_left.white", + "english_translation": "White Base Dexter Canton" + }, + { + "key": "death.attack.fireworks.item", + "english_translation": "%1$s went off with a bang due to a firework fired from %3$s by %2$s" + }, + { + "key": "mco.selectServer.trial", + "english_translation": "Get a trial!" + }, + { + "key": "block.minecraft.yellow_stained_glass", + "english_translation": "Yellow Stained Glass" + }, + { + "key": "chat.coordinates", + "english_translation": "%s, %s, %s" + }, + { + "key": "subtitles.entity.skeleton_horse.ambient", + "english_translation": "Skeleton Horse cries" + }, + { + "key": "subtitles.block.chest.close", + "english_translation": "Chest closes" + }, + { + "key": "advancements.nether.find_bastion.title", + "english_translation": "Those Were the Days" + }, + { + "key": "item.minecraft.tipped_arrow.effect.empty", + "english_translation": "Uncraftable Tipped Arrow" + }, + { + "key": "block.minecraft.banner.square_top_left.white", + "english_translation": "White Chief Dexter Canton" + }, + { + "key": "block.minecraft.weathered_cut_copper_slab", + "english_translation": "Weathered Cut Copper Slab" + }, + { + "key": "gui.abuseReport.reason.alcohol_tobacco_drugs.description", + "english_translation": "Someone is encouraging others to partake in illegal drug related activities or encouraging underage drinking." + }, + { + "key": "options.prioritizeChunkUpdates.none.tooltip", + "english_translation": "Nearby chunks are compiled in parallel threads. This may result in brief visual holes when blocks are destroyed." + }, + { + "key": "block.minecraft.banner.mojang.pink", + "english_translation": "Pink Thing" + }, + { + "key": "gui.abuseReport.reason.defamation_impersonation_false_information", + "english_translation": "Defamation, impersonation, or false information" + }, + { + "key": "block.minecraft.birch_sign", + "english_translation": "Birch Sign" + }, + { + "key": "block.minecraft.banner.stripe_left.light_gray", + "english_translation": "Light Gray Pale Dexter" + }, + { + "key": "subtitles.entity.hoglin.hurt", + "english_translation": "Hoglin hurts" + }, + { + "key": "chat_screen.usage", + "english_translation": "Input message and press Enter to send" + }, + { + "key": "key.drop", + "english_translation": "Drop Selected Item" + }, + { + "key": "mco.configure.world.players.title", + "english_translation": "Players" + }, + { + "key": "flat_world_preset.minecraft.snowy_kingdom", + "english_translation": "Snowy Kingdom" + }, + { + "key": "item.minecraft.wheat", + "english_translation": "Wheat" + }, + { + "key": "entity.minecraft.end_crystal", + "english_translation": "End Crystal" + }, + { + "key": "options.mouse_settings.title", + "english_translation": "Mouse Settings" + }, + { + "key": "block.minecraft.shulker_box", + "english_translation": "Shulker Box" + }, + { + "key": "subtitles.entity.zombie_horse.ambient", + "english_translation": "Zombie Horse cries" + }, + { + "key": "subtitles.entity.mooshroom.eat", + "english_translation": "Mooshroom eats" + }, + { + "key": "block.minecraft.banner.base.cyan", + "english_translation": "Fully Cyan Field" + }, + { + "key": "gui.abuseReport.sending.title", + "english_translation": "Sending your report..." + }, + { + "key": "credits_and_attribution.button.attribution", + "english_translation": "Attribution" + }, + { + "key": "selectWorld.backupWarning.downgrade", + "english_translation": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work. If you still want to continue, please make a backup!" + }, + { + "key": "key.keyboard.keypad.add", + "english_translation": "Keypad +" + }, + { + "key": "block.minecraft.player_head.named", + "english_translation": "%s's Head" + }, + { + "key": "key.keyboard.slash", + "english_translation": "/" + }, + { + "key": "subtitles.entity.player.death", + "english_translation": "Player dies" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.yellow", + "english_translation": "Yellow Per Bend Inverted" + }, + { + "key": "menu.generatingTerrain", + "english_translation": "Building terrain" + }, + { + "key": "item.minecraft.golden_sword", + "english_translation": "Golden Sword" + }, + { + "key": "mco.error.invalid.session.message", + "english_translation": "Please try restarting Minecraft" + }, + { + "key": "commands.ride.not_riding", + "english_translation": "%s is not riding any vehicle" + }, + { + "key": "createWorld.customize.custom.preset.mountains", + "english_translation": "Mountain Madness" + }, + { + "key": "block.minecraft.farmland", + "english_translation": "Farmland" + }, + { + "key": "commands.data.get.multiple", + "english_translation": "This argument accepts a single NBT value" + }, + { + "key": "options.forceUnicodeFont", + "english_translation": "Force Unicode Font" + }, + { + "key": "block.minecraft.cobblestone", + "english_translation": "Cobblestone" + }, + { + "key": "entity.minecraft.egg", + "english_translation": "Thrown Egg" + }, + { + "key": "block.minecraft.cyan_terracotta", + "english_translation": "Cyan Terracotta" + }, + { + "key": "gui.chatReport.send.too_many_messages", + "english_translation": "Trying to include too many messages in the report" + }, + { + "key": "merchant.trades", + "english_translation": "Trades" + }, + { + "key": "block.minecraft.light_blue_concrete", + "english_translation": "Light Blue Concrete" + }, + { + "key": "block.minecraft.acacia_button", + "english_translation": "Acacia Button" + }, + { + "key": "item.minecraft.fermented_spider_eye", + "english_translation": "Fermented Spider Eye" + }, + { + "key": "mco.configure.world.activityfeed.disabled", + "english_translation": "Player feed temporarily disabled" + }, + { + "key": "block.minecraft.honeycomb_block", + "english_translation": "Honeycomb Block" + }, + { + "key": "commands.deop.success", + "english_translation": "Made %s no longer a server operator" + }, + { + "key": "key.fullscreen", + "english_translation": "Toggle Fullscreen" + }, + { + "key": "block.minecraft.banner.border.gray", + "english_translation": "Gray Bordure" + }, + { + "key": "commands.function.success.single.result", + "english_translation": "Function '%2$s' returned %1$s" + }, + { + "key": "selectWorld.mapFeatures", + "english_translation": "Generate Structures" + }, + { + "key": "subtitles.block.chorus_flower.death", + "english_translation": "Chorus Flower withers" + }, + { + "key": "subtitles.block.sculk_catalyst.bloom", + "english_translation": "Sculk Catalyst blooms" + }, + { + "key": "subtitles.entity.warden.attack_impact", + "english_translation": "Warden lands hit" + }, + { + "key": "block.minecraft.magenta_terracotta", + "english_translation": "Magenta Terracotta" + }, + { + "key": "accessibility.onboarding.screen.narrator", + "english_translation": "Press enter to enable the narrator" + }, + { + "key": "enchantment.minecraft.projectile_protection", + "english_translation": "Projectile Protection" + }, + { + "key": "subtitles.block.beehive.enter", + "english_translation": "Bee enters hive" + }, + { + "key": "enchantment.minecraft.bane_of_arthropods", + "english_translation": "Bane of Arthropods" + }, + { + "key": "block.minecraft.banner.base.purple", + "english_translation": "Fully Purple Field" + }, + { + "key": "block.minecraft.stripped_jungle_wood", + "english_translation": "Stripped Jungle Wood" + }, + { + "key": "trim_material.minecraft.quartz", + "english_translation": "Quartz Material" + }, + { + "key": "createWorld.customize.custom.fixedBiome", + "english_translation": "Biome" + }, + { + "key": "block.minecraft.banner.stripe_middle.magenta", + "english_translation": "Magenta Fess" + }, + { + "key": "subtitles.item.bundle.insert", + "english_translation": "Item packed" + }, + { + "key": "subtitles.block.tripwire.attach", + "english_translation": "Tripwire attaches" + }, + { + "key": "subtitles.entity.zombie_villager.ambient", + "english_translation": "Zombie Villager groans" + }, + { + "key": "pack.incompatible.confirm.new", + "english_translation": "This pack was made for a newer version of Minecraft and may not work correctly." + }, + { + "key": "commands.advancement.advancementNotFound", + "english_translation": "No advancement was found by the name '%1$s'" + }, + { + "key": "subtitles.entity.sniffer.scenting", + "english_translation": "Sniffer scents" + }, + { + "key": "block.minecraft.banner.stripe_downleft.pink", + "english_translation": "Pink Bend Sinister" + }, + { + "key": "painting.minecraft.water.author", + "english_translation": "Mojang" + }, + { + "key": "block.minecraft.yellow_bed", + "english_translation": "Yellow Bed" + }, + { + "key": "gui.done", + "english_translation": "Done" + }, + { + "key": "commands.schedule.created.tag", + "english_translation": "Scheduled tag '%s' in %s ticks at gametime %s" + }, + { + "key": "arguments.nbtpath.node.invalid", + "english_translation": "Invalid NBT path element" + }, + { + "key": "death.attack.dragonBreath", + "english_translation": "%1$s was roasted in dragon's breath" + }, + { + "key": "commands.jfr.dump.failed", + "english_translation": "Failed to dump JFR recording: %s" + }, + { + "key": "mco.time.hoursAgo", + "english_translation": "%1$s hour(s) ago" + }, + { + "key": "stat.minecraft.climb_one_cm", + "english_translation": "Distance Climbed" + }, + { + "key": "subtitles.entity.iron_golem.repair", + "english_translation": "Iron Golem repaired" + }, + { + "key": "death.fell.assist.item", + "english_translation": "%1$s was doomed to fall by %2$s using %3$s" + }, + { + "key": "advancements.adventure.trim_with_all_exclusive_armor_patterns.title", + "english_translation": "Smithing with Style" + }, + { + "key": "block.minecraft.crimson_nylium", + "english_translation": "Crimson Nylium" + }, + { + "key": "item.minecraft.sheep_spawn_egg", + "english_translation": "Sheep Spawn Egg" + }, + { + "key": "advancements.adventure.sniper_duel.title", + "english_translation": "Sniper Duel" + }, + { + "key": "entity.minecraft.vex", + "english_translation": "Vex" + }, + { + "key": "advancements.nether.loot_bastion.title", + "english_translation": "War Pigs" + }, + { + "key": "block.minecraft.mossy_cobblestone", + "english_translation": "Mossy Cobblestone" + }, + { + "key": "death.attack.sweetBerryBush.player", + "english_translation": "%1$s was poked to death by a sweet berry bush whilst trying to escape %2$s" + }, + { + "key": "block.minecraft.prismarine_brick_stairs", + "english_translation": "Prismarine Brick Stairs" + }, + { + "key": "block.minecraft.ladder", + "english_translation": "Ladder" + }, + { + "key": "selectWorld.customizeType", + "english_translation": "Customize" + }, + { + "key": "subtitles.item.bundle.drop_contents", + "english_translation": "Bundle empties" + }, + { + "key": "block.minecraft.jungle_planks", + "english_translation": "Jungle Planks" + }, + { + "key": "subtitles.entity.frog.eat", + "english_translation": "Frog eats" + }, + { + "key": "argument.anchor.invalid", + "english_translation": "Invalid entity anchor position %s" + }, + { + "key": "subtitles.entity.item_frame.break", + "english_translation": "Item Frame breaks" + }, + { + "key": "block.minecraft.banner.diagonal_left.purple", + "english_translation": "Purple Per Bend Sinister" + }, + { + "key": "gui.banned.description", + "english_translation": "%s\n\n%s\n\nLearn more at the following link: %s" + }, + { + "key": "itemGroup.redstone", + "english_translation": "Redstone Blocks" + }, + { + "key": "stat.minecraft.trigger_trapped_chest", + "english_translation": "Trapped Chests Triggered" + }, + { + "key": "editGamerule.title", + "english_translation": "Edit Game Rules" + }, + { + "key": "item.minecraft.chainmail_leggings", + "english_translation": "Chainmail Leggings" + }, + { + "key": "item.minecraft.skeleton_horse_spawn_egg", + "english_translation": "Skeleton Horse Spawn Egg" + }, + { + "key": "item.minecraft.squid_spawn_egg", + "english_translation": "Squid Spawn Egg" + }, + { + "key": "selectWorld.conversion.tooltip", + "english_translation": "This world must be opened in an older version (like 1.6.4) to be safely converted" + }, + { + "key": "block.minecraft.banner.square_bottom_right.cyan", + "english_translation": "Cyan Base Sinister Canton" + }, + { + "key": "block.minecraft.banner.creeper.light_gray", + "english_translation": "Light Gray Creeper Charge" + }, + { + "key": "block.minecraft.banner.triangles_top.yellow", + "english_translation": "Yellow Chief Indented" + }, + { + "key": "block.minecraft.oak_fence", + "english_translation": "Oak Fence" + }, + { + "key": "item.minecraft.lingering_potion.effect.invisibility", + "english_translation": "Lingering Potion of Invisibility" + }, + { + "key": "dataPack.bundle.description", + "english_translation": "Enables experimental Bundle item" + }, + { + "key": "container.beacon", + "english_translation": "Beacon" + }, + { + "key": "commands.clone.overlap", + "english_translation": "The source and destination areas cannot overlap" + }, + { + "key": "block.minecraft.banner.half_vertical_right.black", + "english_translation": "Black Per Pale Inverted" + }, + { + "key": "biome.minecraft.lush_caves", + "english_translation": "Lush Caves" + }, + { + "key": "selectWorld.backupEraseCache", + "english_translation": "Erase Cached Data" + }, + { + "key": "block.minecraft.crimson_fence_gate", + "english_translation": "Crimson Fence Gate" + }, + { + "key": "block.minecraft.banner.cross.light_blue", + "english_translation": "Light Blue Saltire" + }, + { + "key": "block.minecraft.potted_pink_tulip", + "english_translation": "Potted Pink Tulip" + }, + { + "key": "mco.download.resourcePack.fail", + "english_translation": "Failed to download resource pack!" + }, + { + "key": "block.minecraft.potted_fern", + "english_translation": "Potted Fern" + }, + { + "key": "item.minecraft.nautilus_shell", + "english_translation": "Nautilus Shell" + }, + { + "key": "item.minecraft.golden_hoe", + "english_translation": "Golden Hoe" + }, + { + "key": "item.minecraft.potion.effect.fire_resistance", + "english_translation": "Potion of Fire Resistance" + }, + { + "key": "gui.chatSelection.context", + "english_translation": "Messages surrounding this selection will be included to provide additional context" + }, + { + "key": "subtitles.entity.tropical_fish.death", + "english_translation": "Tropical Fish dies" + }, + { + "key": "flat_world_preset.minecraft.overworld", + "english_translation": "Overworld" + }, + { + "key": "item.minecraft.carrot_on_a_stick", + "english_translation": "Carrot on a Stick" + }, + { + "key": "multiplayer.disconnect.out_of_order_chat", + "english_translation": "Out-of-order chat packet received. Did your system time change?" + }, + { + "key": "narration.recipe", + "english_translation": "Recipe for %s" + }, + { + "key": "controls.reset", + "english_translation": "Reset" + }, + { + "key": "trim_pattern.minecraft.eye", + "english_translation": "Eye Armor Trim" + }, + { + "key": "entity.minecraft.mooshroom", + "english_translation": "Mooshroom" + }, + { + "key": "argument.resource.invalid_type", + "english_translation": "Element '%s' has wrong type '%s' (expected '%s')" + }, + { + "key": "commands.team.option.seeFriendlyInvisibles.alreadyEnabled", + "english_translation": "Nothing changed. That team can already see invisible teammates" + }, + { + "key": "item.minecraft.bow", + "english_translation": "Bow" + }, + { + "key": "options.glintStrength", + "english_translation": "Glint Strength" + }, + { + "key": "block.minecraft.banner.stripe_bottom.gray", + "english_translation": "Gray Base" + }, + { + "key": "block.minecraft.deepslate", + "english_translation": "Deepslate" + }, + { + "key": "block.minecraft.wheat", + "english_translation": "Wheat Crops" + }, + { + "key": "gamerule.maxCommandChainLength.description", + "english_translation": "Applies to command block chains and functions." + }, + { + "key": "menu.online", + "english_translation": "Minecraft Realms" + }, + { + "key": "stat.minecraft.damage_dealt_absorbed", + "english_translation": "Damage Dealt (Absorbed)" + }, + { + "key": "block.minecraft.banner.triangle_bottom.white", + "english_translation": "White Chevron" + }, + { + "key": "options.accessibility.text_background.everywhere", + "english_translation": "Everywhere" + }, + { + "key": "item.minecraft.debug_stick", + "english_translation": "Debug Stick" + }, + { + "key": "block.minecraft.banner.piglin.brown", + "english_translation": "Brown Snout" + }, + { + "key": "block.minecraft.dark_oak_hanging_sign", + "english_translation": "Dark Oak Hanging Sign" + }, + { + "key": "mco.selectServer.expiredRenew", + "english_translation": "Renew" + }, + { + "key": "item.minecraft.mule_spawn_egg", + "english_translation": "Mule Spawn Egg" + }, + { + "key": "instrument.minecraft.seek_goat_horn", + "english_translation": "Seek" + }, + { + "key": "block.minecraft.banner.cross.gray", + "english_translation": "Gray Saltire" + }, + { + "key": "block.minecraft.bamboo_block", + "english_translation": "Block of Bamboo" + }, + { + "key": "lanServer.port.unavailable", + "english_translation": "Port not available.\nLeave the edit box empty or enter a different number between 1024 and 65535." + }, + { + "key": "item.minecraft.hopper_minecart", + "english_translation": "Minecart with Hopper" + }, + { + "key": "demo.remainingTime", + "english_translation": "Remaining time: %s" + }, + { + "key": "gamerule.waterSourceConversion", + "english_translation": "Water converts to source" + }, + { + "key": "pack.description.modResources", + "english_translation": "Mod resources." + }, + { + "key": "item.minecraft.tipped_arrow.effect.awkward", + "english_translation": "Tipped Arrow" + }, + { + "key": "mco.client.incompatible.title", + "english_translation": "Client incompatible!" + }, + { + "key": "block.minecraft.banner.stripe_center.orange", + "english_translation": "Orange Pale" + }, + { + "key": "mco.selectServer.create", + "english_translation": "Create realm" + }, + { + "key": "block.minecraft.banner.stripe_left.purple", + "english_translation": "Purple Pale Dexter" + }, + { + "key": "subtitles.entity.player.attack.crit", + "english_translation": "Critical attack" + }, + { + "key": "subtitles.entity.panda.worried_ambient", + "english_translation": "Panda whimpers" + }, + { + "key": "subtitles.item.dye.use", + "english_translation": "Dye stains" + }, + { + "key": "instrument.minecraft.dream_goat_horn", + "english_translation": "Dream" + }, + { + "key": "block.minecraft.banner.globe.white", + "english_translation": "White Globe" + }, + { + "key": "dataPack.vanilla.name", + "english_translation": "Default" + }, + { + "key": "gui.down", + "english_translation": "Down" + }, + { + "key": "block.minecraft.black_bed", + "english_translation": "Black Bed" + }, + { + "key": "entity.minecraft.sniffer", + "english_translation": "Sniffer" + }, + { + "key": "block.minecraft.banner.stripe_middle.gray", + "english_translation": "Gray Fess" + }, + { + "key": "death.attack.onFire.player", + "english_translation": "%1$s was burnt to a crisp whilst fighting %2$s" + }, + { + "key": "subtitles.block.composter.empty", + "english_translation": "Composter emptied" + }, + { + "key": "subtitles.entity.warden.nearby_closer", + "english_translation": "Warden advances" + }, + { + "key": "demo.demoExpired", + "english_translation": "Demo time's up!" + }, + { + "key": "item.minecraft.spruce_boat", + "english_translation": "Spruce Boat" + }, + { + "key": "commands.weather.set.clear", + "english_translation": "Set the weather to clear" + }, + { + "key": "subtitles.item.crossbow.shoot", + "english_translation": "Crossbow fires" + }, + { + "key": "mco.backup.restoring", + "english_translation": "Restoring your realm" + }, + { + "key": "subtitles.entity.item_frame.place", + "english_translation": "Item Frame placed" + }, + { + "key": "subtitles.entity.hoglin.converted_to_zombified", + "english_translation": "Hoglin converts to Zoglin" + }, + { + "key": "subtitles.entity.magma_cube.death", + "english_translation": "Magma Cube dies" + }, + { + "key": "commands.worldborder.warning.time.failed", + "english_translation": "Nothing changed. The world border warning is already that amount of time" + }, + { + "key": "block.minecraft.banner.half_vertical_right.green", + "english_translation": "Green Per Pale Inverted" + }, + { + "key": "item.minecraft.tipped_arrow.effect.mundane", + "english_translation": "Tipped Arrow" + }, + { + "key": "subtitles.entity.parrot.imitate.wither", + "english_translation": "Parrot angers" + }, + { + "key": "advancements.adventure.honey_block_slide.description", + "english_translation": "Jump into a Honey Block to break your fall" + }, + { + "key": "advancements.adventure.two_birds_one_arrow.title", + "english_translation": "Two Birds, One Arrow" + }, + { + "key": "block.minecraft.banner.gradient.blue", + "english_translation": "Blue Gradient" + }, + { + "key": "mco.selectServer.closed", + "english_translation": "Closed realm" + }, + { + "key": "block.minecraft.sea_lantern", + "english_translation": "Sea Lantern" + }, + { + "key": "block.minecraft.stripped_jungle_log", + "english_translation": "Stripped Jungle Log" + }, + { + "key": "container.brewing", + "english_translation": "Brewing Stand" + }, + { + "key": "subtitles.block.generic.hit", + "english_translation": "Block breaking" + }, + { + "key": "block.minecraft.prismarine_bricks", + "english_translation": "Prismarine Bricks" + }, + { + "key": "selectServer.deleteWarning", + "english_translation": "'%s' will be lost forever! (A long time!)" + }, + { + "key": "subtitles.entity.piglin.death", + "english_translation": "Piglin dies" + }, + { + "key": "block.minecraft.banner.creeper.cyan", + "english_translation": "Cyan Creeper Charge" + }, + { + "key": "advancements.husbandry.wax_on.description", + "english_translation": "Apply Honeycomb to a Copper block!" + }, + { + "key": "item.minecraft.brown_dye", + "english_translation": "Brown Dye" + }, + { + "key": "mco.upload.hardcore", + "english_translation": "Hardcore worlds can't be uploaded!" + }, + { + "key": "subtitles.entity.egg.throw", + "english_translation": "Egg flies" + }, + { + "key": "advancements.adventure.kill_mob_near_sculk_catalyst.description", + "english_translation": "Kill a mob near a Sculk Catalyst" + }, + { + "key": "item.minecraft.prize_pottery_sherd", + "english_translation": "Prize Pottery Sherd" + }, + { + "key": "stat.minecraft.walk_under_water_one_cm", + "english_translation": "Distance Walked under Water" + }, + { + "key": "createWorld.customize.custom.preset.caveChaos", + "english_translation": "Caves of Chaos" + }, + { + "key": "stat.minecraft.interact_with_blast_furnace", + "english_translation": "Interactions with Blast Furnace" + }, + { + "key": "gui.recipebook.toggleRecipes.smeltable", + "english_translation": "Showing Smeltable" + }, + { + "key": "item.minecraft.panda_spawn_egg", + "english_translation": "Panda Spawn Egg" + }, + { + "key": "block.minecraft.conduit", + "english_translation": "Conduit" + }, + { + "key": "block.minecraft.oxidized_cut_copper", + "english_translation": "Oxidized Cut Copper" + }, + { + "key": "commands.worldborder.damage.buffer.failed", + "english_translation": "Nothing changed. The world border damage buffer is already that distance" + }, + { + "key": "block.minecraft.white_candle_cake", + "english_translation": "Cake with White Candle" + }, + { + "key": "block.minecraft.dead_bubble_coral", + "english_translation": "Dead Bubble Coral" + }, + { + "key": "block.minecraft.cobblestone_stairs", + "english_translation": "Cobblestone Stairs" + }, + { + "key": "gui.abuseReport.reason.imminent_harm", + "english_translation": "Imminent harm - Threat to harm others" + }, + { + "key": "mco.invites.nopending", + "english_translation": "No pending invites!" + }, + { + "key": "subtitles.entity.parrot.imitate.husk", + "english_translation": "Parrot groans" + }, + { + "key": "stat.minecraft.play_time", + "english_translation": "Time Played" + }, + { + "key": "block.minecraft.banner.curly_border.red", + "english_translation": "Red Bordure Indented" + }, + { + "key": "block.minecraft.calcite", + "english_translation": "Calcite" + }, + { + "key": "subtitles.entity.skeleton.hurt", + "english_translation": "Skeleton hurts" + }, + { + "key": "block.minecraft.cyan_concrete_powder", + "english_translation": "Cyan Concrete Powder" + }, + { + "key": "commands.spawnpoint.success.single", + "english_translation": "Set spawn point to %s, %s, %s [%s] in %s for %s" + }, + { + "key": "block.minecraft.gray_bed", + "english_translation": "Gray Bed" + }, + { + "key": "argument.entity.invalid", + "english_translation": "Invalid name or UUID" + }, + { + "key": "block.minecraft.grass", + "english_translation": "Grass" + }, + { + "key": "mirror.left_right", + "english_translation": "← →" + }, + { + "key": "subtitles.item.spyglass.use", + "english_translation": "Spyglass expands" + }, + { + "key": "createWorld.customize.presets.select", + "english_translation": "Use Preset" + }, + { + "key": "commands.fillbiome.toobig", + "english_translation": "Too many blocks in the specified volume (maximum %s, specified %s)" + }, + { + "key": "createWorld.customize.custom.useMansions", + "english_translation": "Woodland Mansions" + }, + { + "key": "commands.advancement.revoke.one.to.one.success", + "english_translation": "Revoked the advancement %s from %s" + }, + { + "key": "selectWorld.recreate.customized.text", + "english_translation": "Customized worlds are no longer supported in this version of Minecraft. We can try to recreate it with the same seed and properties, but any terrain customizations will be lost. We're sorry for the inconvenience!" + }, + { + "key": "block.minecraft.jungle_door", + "english_translation": "Jungle Door" + }, + { + "key": "death.attack.freeze.player", + "english_translation": "%1$s was frozen to death by %2$s" + }, + { + "key": "entity.minecraft.drowned", + "english_translation": "Drowned" + }, + { + "key": "entity.minecraft.pufferfish", + "english_translation": "Pufferfish" + }, + { + "key": "block.minecraft.banner.globe.red", + "english_translation": "Red Globe" + }, + { + "key": "item.minecraft.dried_kelp", + "english_translation": "Dried Kelp" + }, + { + "key": "subtitles.entity.camel.step", + "english_translation": "Camel steps" + }, + { + "key": "block.minecraft.basalt", + "english_translation": "Basalt" + }, + { + "key": "item.minecraft.diamond_chestplate", + "english_translation": "Diamond Chestplate" + }, + { + "key": "credits_and_attribution.button.licenses", + "english_translation": "Licenses" + }, + { + "key": "selectWorld.resultFolder", + "english_translation": "Will be saved in:" + }, + { + "key": "block.minecraft.creeper_head", + "english_translation": "Creeper Head" + }, + { + "key": "commands.advancement.revoke.criterion.to.one.success", + "english_translation": "Revoked criterion '%s' of advancement %s from %s" + }, + { + "key": "pack.source.server", + "english_translation": "server" + }, + { + "key": "block.minecraft.dark_prismarine", + "english_translation": "Dark Prismarine" + }, + { + "key": "subtitles.item.armor.equip_turtle", + "english_translation": "Turtle Shell thunks" + }, + { + "key": "stat.minecraft.minecart_one_cm", + "english_translation": "Distance by Minecart" + }, + { + "key": "selectWorld.edit.backupSize", + "english_translation": "size: %s MB" + }, + { + "key": "subtitles.entity.parrot.imitate.phantom", + "english_translation": "Parrot screeches" + }, + { + "key": "subtitles.entity.dolphin.splash", + "english_translation": "Dolphin splashes" + }, + { + "key": "item.minecraft.bamboo_raft", + "english_translation": "Bamboo Raft" + }, + { + "key": "item.minecraft.firework_star.brown", + "english_translation": "Brown" + }, + { + "key": "item.minecraft.emerald", + "english_translation": "Emerald" + }, + { + "key": "subtitles.entity.salmon.hurt", + "english_translation": "Salmon hurts" + }, + { + "key": "tutorial.punch_tree.description", + "english_translation": "Hold down %s" + }, + { + "key": "commands.title.reset.multiple", + "english_translation": "Reset title options for %s players" + }, + { + "key": "pack.source.local", + "english_translation": "local" + }, + { + "key": "subtitles.entity.evoker.death", + "english_translation": "Evoker dies" + }, + { + "key": "item.modifiers.feet", + "english_translation": "When on Feet:" + }, + { + "key": "subtitles.entity.horse.saddle", + "english_translation": "Saddle equips" + }, + { + "key": "subtitles.entity.wither.ambient", + "english_translation": "Wither angers" + }, + { + "key": "mco.backup.entry.uploaded", + "english_translation": "Uploaded" + }, + { + "key": "entity.minecraft.zombified_piglin", + "english_translation": "Zombified Piglin" + }, + { + "key": "chat.disabled.profile.moreInfo", + "english_translation": "Chat not allowed by account settings. Cannot send or view messages." + }, + { + "key": "stat.minecraft.play_noteblock", + "english_translation": "Note Blocks Played" + }, + { + "key": "advancements.husbandry.make_a_sign_glow.description", + "english_translation": "Make the text of any kind of sign glow" + }, + { + "key": "block.minecraft.cherry_fence", + "english_translation": "Cherry Fence" + }, + { + "key": "subtitles.entity.arrow.hit_player", + "english_translation": "Player hit" + }, + { + "key": "disconnect.lost", + "english_translation": "Connection Lost" + }, + { + "key": "advMode.mode.autoexec.bat", + "english_translation": "Always Active" + }, + { + "key": "block.minecraft.copper_block", + "english_translation": "Block of Copper" + }, + { + "key": "block.minecraft.lime_shulker_box", + "english_translation": "Lime Shulker Box" + }, + { + "key": "gui.socialInteractions.status_hidden", + "english_translation": "Hidden" + }, + { + "key": "commands.spreadplayers.failed.teams", + "english_translation": "Could not spread %s team(s) around %s, %s (too many entities for space - try using spread of at most %s)" + }, + { + "key": "pack.incompatible.old", + "english_translation": "(Made for an older version of Minecraft)" + }, + { + "key": "block.minecraft.acacia_wood", + "english_translation": "Acacia Wood" + }, + { + "key": "gamerule.doTileDrops.description", + "english_translation": "Controls resource drops from blocks, including experience orbs." + }, + { + "key": "block.minecraft.potted_azalea_bush", + "english_translation": "Potted Azalea" + }, + { + "key": "block.minecraft.banner.circle.orange", + "english_translation": "Orange Roundel" + }, + { + "key": "block.minecraft.gravel", + "english_translation": "Gravel" + }, + { + "key": "block.minecraft.bubble_coral_wall_fan", + "english_translation": "Bubble Coral Wall Fan" + }, + { + "key": "subtitles.entity.minecart.riding", + "english_translation": "Minecart rolls" + }, + { + "key": "block.minecraft.banner.mojang.gray", + "english_translation": "Gray Thing" + }, + { + "key": "death.attack.genericKill", + "english_translation": "%1$s was killed" + }, + { + "key": "block.minecraft.light_blue_terracotta", + "english_translation": "Light Blue Terracotta" + }, + { + "key": "commands.team.remove.success", + "english_translation": "Removed team %s" + }, + { + "key": "key.togglePerspective", + "english_translation": "Toggle Perspective" + }, + { + "key": "subtitles.entity.enderman.scream", + "english_translation": "Enderman screams" + }, + { + "key": "item.minecraft.rabbit_stew", + "english_translation": "Rabbit Stew" + }, + { + "key": "item.minecraft.netherite_sword", + "english_translation": "Netherite Sword" + }, + { + "key": "biome.minecraft.ice_spikes", + "english_translation": "Ice Spikes" + }, + { + "key": "options.hideMatchedNames.tooltip", + "english_translation": "3rd-party Servers may send chat messages in non-standard formats.\nWith this option on, hidden players will be matched based on chat sender names." + }, + { + "key": "mco.client.incompatible.msg.line1", + "english_translation": "Your client is not compatible with Realms." + }, + { + "key": "block.minecraft.pink_concrete", + "english_translation": "Pink Concrete" + }, + { + "key": "item.minecraft.chainmail_chestplate", + "english_translation": "Chainmail Chestplate" + }, + { + "key": "mco.client.incompatible.msg.line3", + "english_translation": "Realms is not compatible with snapshot versions." + }, + { + "key": "mco.client.incompatible.msg.line2", + "english_translation": "Please use the most recent version of Minecraft." + }, + { + "key": "commands.tag.remove.failed", + "english_translation": "Target does not have this tag" + }, + { + "key": "deathScreen.titleScreen", + "english_translation": "Title Screen" + }, + { + "key": "item.minecraft.lingering_potion.effect.levitation", + "english_translation": "Lingering Potion of Levitation" + }, + { + "key": "item.minecraft.nether_brick", + "english_translation": "Nether Brick" + }, + { + "key": "death.attack.inFire.player", + "english_translation": "%1$s walked into fire whilst fighting %2$s" + }, + { + "key": "block.minecraft.prismarine", + "english_translation": "Prismarine" + }, + { + "key": "block.minecraft.banner.half_vertical_right.gray", + "english_translation": "Gray Per Pale Inverted" + }, + { + "key": "item.minecraft.music_disc_far", + "english_translation": "Music Disc" + }, + { + "key": "structure_block.size_failure", + "english_translation": "Unable to detect structure size. Add corners with matching structure names" + }, + { + "key": "entity.minecraft.panda", + "english_translation": "Panda" + }, + { + "key": "narration.button", + "english_translation": "Button: %s" + }, + { + "key": "options.difficulty.hard.info", + "english_translation": "Hostile mobs spawn and deal more damage. Hunger bar depletes and drains all health." + }, + { + "key": "selectWorld.backupJoinConfirmButton", + "english_translation": "Create Backup and Load" + }, + { + "key": "multiplayer.status.quitting", + "english_translation": "Quitting" + }, + { + "key": "subtitles.entity.goat.ram_impact", + "english_translation": "Goat rams" + }, + { + "key": "subtitles.item.brush.brushing.gravel.complete", + "english_translation": "Brushing Gravel completed" + }, + { + "key": "block.minecraft.brown_stained_glass_pane", + "english_translation": "Brown Stained Glass Pane" + }, + { + "key": "advancements.adventure.avoid_vibration.description", + "english_translation": "Sneak near a Sculk Sensor or Warden to prevent it from detecting you" + }, + { + "key": "entity.minecraft.potion", + "english_translation": "Potion" + }, + { + "key": "soundCategory.weather", + "english_translation": "Weather" + }, + { + "key": "block.minecraft.banner.straight_cross.red", + "english_translation": "Red Cross" + }, + { + "key": "gui.chatSelection.heading", + "english_translation": "%s %s" + }, + { + "key": "commands.attribute.value.get.success", + "english_translation": "Value of attribute %s for entity %s is %s" + }, + { + "key": "merchant.deprecated", + "english_translation": "Villagers restock up to two times per day." + }, + { + "key": "commands.title.times.multiple", + "english_translation": "Changed title display times for %s players" + }, + { + "key": "block.minecraft.banner.stripe_middle.green", + "english_translation": "Green Fess" + }, + { + "key": "subtitles.entity.creeper.primed", + "english_translation": "Creeper hisses" + }, + { + "key": "block.minecraft.light_blue_stained_glass", + "english_translation": "Light Blue Stained Glass" + }, + { + "key": "entity.minecraft.villager.toolsmith", + "english_translation": "Toolsmith" + }, + { + "key": "item.minecraft.diamond_shovel", + "english_translation": "Diamond Shovel" + }, + { + "key": "pack.copyFailure", + "english_translation": "Failed to copy packs" + }, + { + "key": "gui.socialInteractions.shown_in_chat", + "english_translation": "Chat messages from %s will be shown" + }, + { + "key": "subtitles.entity.axolotl.idle_water", + "english_translation": "Axolotl chirps" + }, + { + "key": "narrator.controls.bound", + "english_translation": "%s is bound to %s" + }, + { + "key": "block.minecraft.banner.triangles_bottom.purple", + "english_translation": "Purple Base Indented" + }, + { + "key": "subtitles.entity.sniffer.egg_hatch", + "english_translation": "Sniffer Egg hatches" + }, + { + "key": "telemetry_info.button.show_data", + "english_translation": "Open My Data" + }, + { + "key": "subtitles.entity.zombie_villager.cure", + "english_translation": "Zombie Villager snuffles" + }, + { + "key": "commands.drop.success.single_with_table", + "english_translation": "Dropped %s %s from loot table %s" + }, + { + "key": "block.minecraft.waxed_exposed_cut_copper_slab", + "english_translation": "Waxed Exposed Cut Copper Slab" + }, + { + "key": "structure_block.mode.corner", + "english_translation": "Corner" + }, + { + "key": "commands.ride.mount.failure.cant_ride_players", + "english_translation": "Players can't be ridden" + }, + { + "key": "gamerule.doInsomnia", + "english_translation": "Spawn phantoms" + }, + { + "key": "filled_map.level", + "english_translation": "(Level %s/%s)" + }, + { + "key": "commands.team.list.members.empty", + "english_translation": "There are no members on team %s" + }, + { + "key": "subtitles.entity.wolf.ambient", + "english_translation": "Wolf pants" + }, + { + "key": "mco.configure.world.buttons.close", + "english_translation": "Close realm" + }, + { + "key": "key.smoothCamera", + "english_translation": "Toggle Cinematic Camera" + }, + { + "key": "block.minecraft.banner.stripe_top.light_blue", + "english_translation": "Light Blue Chief" + }, + { + "key": "selectWorld.experimental.message", + "english_translation": "Be careful!\nThis configuration requires features that are still under development. Your world might crash, break, or not work with future updates." + }, + { + "key": "options.glintSpeed", + "english_translation": "Glint Speed" + }, + { + "key": "subtitles.entity.wither.death", + "english_translation": "Wither dies" + }, + { + "key": "argument.item.id.invalid", + "english_translation": "Unknown item '%s'" + }, + { + "key": "block.minecraft.stone_brick_stairs", + "english_translation": "Stone Brick Stairs" + }, + { + "key": "mco.backup.entry.enabledPack", + "english_translation": "Enabled Pack" + }, + { + "key": "commands.list.nameAndId", + "english_translation": "%s (%s)" + }, + { + "key": "pack.incompatible.confirm.title", + "english_translation": "Are you sure you want to load this pack?" + }, + { + "key": "subtitles.entity.frog.ambient", + "english_translation": "Frog croaks" + }, + { + "key": "argument.entity.options.advancements.description", + "english_translation": "Players with advancements" + }, + { + "key": "gamerule.freezeDamage", + "english_translation": "Deal freeze damage" + }, + { + "key": "subtitles.block.big_dripleaf.tilt_down", + "english_translation": "Dripleaf tilts down" + }, + { + "key": "block.minecraft.target", + "english_translation": "Target" + }, + { + "key": "item.minecraft.tipped_arrow.effect.water", + "english_translation": "Arrow of Splashing" + }, + { + "key": "block.minecraft.hanging_roots", + "english_translation": "Hanging Roots" + }, + { + "key": "block.minecraft.birch_sapling", + "english_translation": "Birch Sapling" + }, + { + "key": "gui.abuseReport.sent.title", + "english_translation": "Report sent" + }, + { + "key": "item.minecraft.iron_golem_spawn_egg", + "english_translation": "Iron Golem Spawn Egg" + }, + { + "key": "block.minecraft.banner.half_vertical_right.white", + "english_translation": "White Per Pale Inverted" + }, + { + "key": "commands.difficulty.query", + "english_translation": "The difficulty is %s" + }, + { + "key": "mco.time.secondsAgo", + "english_translation": "%1$s second(s) ago" + }, + { + "key": "block.minecraft.jungle_sapling", + "english_translation": "Jungle Sapling" + }, + { + "key": "block.minecraft.kelp", + "english_translation": "Kelp" + }, + { + "key": "demo.help.movementMouse", + "english_translation": "Look around using the mouse" + }, + { + "key": "commands.whitelist.remove.success", + "english_translation": "Removed %s from the whitelist" + }, + { + "key": "advancements.adventure.kill_a_mob.title", + "english_translation": "Monster Hunter" + }, + { + "key": "death.attack.hotFloor.player", + "english_translation": "%1$s walked into the danger zone due to %2$s" + }, + { + "key": "commands.spectate.success.started", + "english_translation": "Now spectating %s" + }, + { + "key": "block.minecraft.banner.stripe_right.light_blue", + "english_translation": "Light Blue Pale Sinister" + }, + { + "key": "advancements.adventure.whos_the_pillager_now.description", + "english_translation": "Give a Pillager a taste of their own medicine" + }, + { + "key": "parsing.expected", + "english_translation": "Expected '%s'" + }, + { + "key": "block.minecraft.chorus_plant", + "english_translation": "Chorus Plant" + }, + { + "key": "options.graphics.warning.version", + "english_translation": "OpenGL Version detected: [%s]" + }, + { + "key": "gui.chatReport.draft.discard", + "english_translation": "Discard" + }, + { + "key": "selectWorld.backupQuestion.downgrade", + "english_translation": "Downgrading a world is not supported" + }, + { + "key": "options.hideLightningFlashes", + "english_translation": "Hide Lightning Flashes" + }, + { + "key": "item.minecraft.cooked_rabbit", + "english_translation": "Cooked Rabbit" + }, + { + "key": "key.keyboard.right.bracket", + "english_translation": "]" + }, + { + "key": "entity.minecraft.shulker_bullet", + "english_translation": "Shulker Bullet" + }, + { + "key": "gui.recipebook.search_hint", + "english_translation": "Search..." + }, + { + "key": "mco.selectServer.expiredTrial", + "english_translation": "Your trial has ended" + }, + { + "key": "block.minecraft.banner.stripe_downleft.purple", + "english_translation": "Purple Bend Sinister" + }, + { + "key": "argument.entity.options.type.description", + "english_translation": "Entities of type" + }, + { + "key": "block.minecraft.azure_bluet", + "english_translation": "Azure Bluet" + }, + { + "key": "trim_material.minecraft.lapis", + "english_translation": "Lapis Material" + }, + { + "key": "trim_pattern.minecraft.tide", + "english_translation": "Tide Armor Trim" + }, + { + "key": "block.minecraft.banner.stripe_middle.white", + "english_translation": "White Fess" + }, + { + "key": "subtitles.entity.squid.squirt", + "english_translation": "Squid shoots ink" + }, + { + "key": "gui.abuseReport.reason.alcohol_tobacco_drugs", + "english_translation": "Drugs or alcohol" + }, + { + "key": "mco.create.world.skip", + "english_translation": "Skip" + }, + { + "key": "debug.pause_focus.help", + "english_translation": "F3 + P = Pause on lost focus" + }, + { + "key": "options.chat.opacity", + "english_translation": "Chat Text Opacity" + }, + { + "key": "subtitles.block.blastfurnace.fire_crackle", + "english_translation": "Blast Furnace crackles" + }, + { + "key": "createWorld.customize.custom.size", + "english_translation": "Spawn Size" + }, + { + "key": "block.minecraft.purpur_slab", + "english_translation": "Purpur Slab" + }, + { + "key": "item.minecraft.lingering_potion.effect.turtle_master", + "english_translation": "Lingering Potion of the Turtle Master" + }, + { + "key": "mco.selectServer.close", + "english_translation": "Close" + }, + { + "key": "block.minecraft.banner.triangle_bottom.purple", + "english_translation": "Purple Chevron" + }, + { + "key": "block.minecraft.spruce_sign", + "english_translation": "Spruce Sign" + }, + { + "key": "item.minecraft.light_blue_dye", + "english_translation": "Light Blue Dye" + }, + { + "key": "stat.minecraft.fall_one_cm", + "english_translation": "Distance Fallen" + }, + { + "key": "block.minecraft.dragon_egg", + "english_translation": "Dragon Egg" + }, + { + "key": "block.minecraft.banner.bricks.yellow", + "english_translation": "Yellow Field Masoned" + }, + { + "key": "block.minecraft.banner.gradient_up.pink", + "english_translation": "Pink Base Gradient" + }, + { + "key": "block.minecraft.banner.square_bottom_left.cyan", + "english_translation": "Cyan Base Dexter Canton" + }, + { + "key": "block.minecraft.sculk_catalyst", + "english_translation": "Sculk Catalyst" + }, + { + "key": "block.minecraft.red_wool", + "english_translation": "Red Wool" + }, + { + "key": "item.minecraft.wheat_seeds", + "english_translation": "Wheat Seeds" + }, + { + "key": "options.audioDevice.default", + "english_translation": "System Default" + }, + { + "key": "commands.bossbar.set.max.success", + "english_translation": "Custom bossbar %s has changed maximum to %s" + }, + { + "key": "block.minecraft.polished_diorite", + "english_translation": "Polished Diorite" + }, + { + "key": "parsing.int.expected", + "english_translation": "Expected integer" + }, + { + "key": "item.minecraft.hoglin_spawn_egg", + "english_translation": "Hoglin Spawn Egg" + }, + { + "key": "mco.upload.verifying", + "english_translation": "Verifying your world" + }, + { + "key": "commands.experience.query.points", + "english_translation": "%s has %s experience points" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.blue", + "english_translation": "Blue Per Fess Inverted" + }, + { + "key": "block.minecraft.lava_cauldron", + "english_translation": "Lava Cauldron" + }, + { + "key": "options.directionalAudio", + "english_translation": "Directional Audio" + }, + { + "key": "block.minecraft.dead_horn_coral", + "english_translation": "Dead Horn Coral" + }, + { + "key": "item.minecraft.suspicious_stew", + "english_translation": "Suspicious Stew" + }, + { + "key": "subtitles.block.bell.use", + "english_translation": "Bell rings" + }, + { + "key": "block.minecraft.stone_button", + "english_translation": "Stone Button" + }, + { + "key": "advancements.husbandry.leash_all_frog_variants.title", + "english_translation": "When the Squad Hops into Town" + }, + { + "key": "selectWorld.gameMode.creative.info", + "english_translation": "Create, build, and explore without limits. You can fly, have endless materials, and can't be hurt by monsters." + }, + { + "key": "stat.minecraft.inspect_dropper", + "english_translation": "Droppers Searched" + }, + { + "key": "subtitles.entity.zoglin.step", + "english_translation": "Zoglin steps" + }, + { + "key": "block.minecraft.pink_stained_glass", + "english_translation": "Pink Stained Glass" + }, + { + "key": "death.attack.sting.player", + "english_translation": "%1$s was stung to death by %2$s" + }, + { + "key": "item.minecraft.shears", + "english_translation": "Shears" + }, + { + "key": "biome.minecraft.taiga", + "english_translation": "Taiga" + }, + { + "key": "block.minecraft.banner.triangles_bottom.light_blue", + "english_translation": "Light Blue Base Indented" + }, + { + "key": "item.minecraft.potion.effect.water_breathing", + "english_translation": "Potion of Water Breathing" + }, + { + "key": "death.attack.fallingStalactite.player", + "english_translation": "%1$s was skewered by a falling stalactite whilst fighting %2$s" + }, + { + "key": "block.minecraft.banner.stripe_middle.yellow", + "english_translation": "Yellow Fess" + }, + { + "key": "multiplayer.disconnect.banned.expiration", + "english_translation": "\nYour ban will be removed on %s" + }, + { + "key": "subtitles.entity.sniffer.egg_crack", + "english_translation": "Sniffer Egg cracks" + }, + { + "key": "trim_pattern.minecraft.vex", + "english_translation": "Vex Armor Trim" + }, + { + "key": "effect.minecraft.regeneration", + "english_translation": "Regeneration" + }, + { + "key": "mco.configure.world.commandBlocks", + "english_translation": "Command blocks" + }, + { + "key": "subtitles.entity.horse.breathe", + "english_translation": "Horse breathes" + }, + { + "key": "block.minecraft.red_candle", + "english_translation": "Red Candle" + }, + { + "key": "commands.scoreboard.players.list.entity.success", + "english_translation": "%s has %s score(s):" + }, + { + "key": "block.minecraft.blue_concrete_powder", + "english_translation": "Blue Concrete Powder" + }, + { + "key": "mco.configure.world.subscription.month", + "english_translation": "month" + }, + { + "key": "multiplayer.player.left", + "english_translation": "%s left the game" + }, + { + "key": "createWorld.customize.custom.useMonuments", + "english_translation": "Ocean Monuments" + }, + { + "key": "mco.configure.world.subscription.title", + "english_translation": "Your subscription" + }, + { + "key": "block.minecraft.banner.square_top_left.light_blue", + "english_translation": "Light Blue Chief Dexter Canton" + }, + { + "key": "commands.team.option.friendlyfire.disabled", + "english_translation": "Disabled friendly fire for team %s" + }, + { + "key": "block.minecraft.crimson_door", + "english_translation": "Crimson Door" + }, + { + "key": "block.minecraft.granite_stairs", + "english_translation": "Granite Stairs" + }, + { + "key": "block.minecraft.banner.globe.purple", + "english_translation": "Purple Globe" + }, + { + "key": "subtitles.entity.phantom.ambient", + "english_translation": "Phantom screeches" + }, + { + "key": "block.minecraft.bed.too_far_away", + "english_translation": "You may not rest now; the bed is too far away" + }, + { + "key": "trim_pattern.minecraft.ward", + "english_translation": "Ward Armor Trim" + }, + { + "key": "gui.chatSelection.join", + "english_translation": "%s joined the chat" + }, + { + "key": "block.minecraft.banner.stripe_right.gray", + "english_translation": "Gray Pale Sinister" + }, + { + "key": "commands.place.template.success", + "english_translation": "Loaded template \"%s\" at %s, %s, %s" + }, + { + "key": "block.minecraft.banner.piglin.purple", + "english_translation": "Purple Snout" + }, + { + "key": "gui.narrate.button", + "english_translation": "%s button" + }, + { + "key": "block.minecraft.banner.diagonal_left.light_blue", + "english_translation": "Light Blue Per Bend Sinister" + }, + { + "key": "options.notifications.display_time.tooltip", + "english_translation": "Affects the length of time that all notifications stay visible on the screen." + }, + { + "key": "block.minecraft.bamboo_sapling", + "english_translation": "Bamboo Shoot" + }, + { + "key": "advancements.nether.get_wither_skull.title", + "english_translation": "Spooky Scary Skeleton" + }, + { + "key": "block.minecraft.birch_pressure_plate", + "english_translation": "Birch Pressure Plate" + }, + { + "key": "mco.download.failed", + "english_translation": "Download failed" + }, + { + "key": "mco.reset.world.generate", + "english_translation": "New world" + }, + { + "key": "selectWorld.gameMode.creative", + "english_translation": "Creative" + }, + { + "key": "advancements.husbandry.tactical_fishing.description", + "english_translation": "Catch a Fish... without a Fishing Rod!" + }, + { + "key": "block.minecraft.banner.straight_cross.gray", + "english_translation": "Gray Cross" + }, + { + "key": "color.minecraft.orange", + "english_translation": "Orange" + }, + { + "key": "commands.op.success", + "english_translation": "Made %s a server operator" + }, + { + "key": "gui.chatSelection.title", + "english_translation": "Select Chat Messages to Report" + }, + { + "key": "block.minecraft.banner.half_vertical.red", + "english_translation": "Red Per Pale" + }, + { + "key": "parsing.float.invalid", + "english_translation": "Invalid float '%s'" + }, + { + "key": "advMode.allPlayers", + "english_translation": "Use \"@a\" to target all players" + }, + { + "key": "block.minecraft.banner.stripe_right.orange", + "english_translation": "Orange Pale Sinister" + }, + { + "key": "block.minecraft.cherry_sapling", + "english_translation": "Cherry Sapling" + }, + { + "key": "subtitles.entity.ender_dragon.ambient", + "english_translation": "Dragon roars" + }, + { + "key": "block.minecraft.glowstone", + "english_translation": "Glowstone" + }, + { + "key": "mco.download.confirmation.line1", + "english_translation": "The world you are going to download is larger than %s" + }, + { + "key": "mco.download.confirmation.line2", + "english_translation": "You won't be able to upload this world to your realm again" + }, + { + "key": "block.minecraft.potted_cornflower", + "english_translation": "Potted Cornflower" + }, + { + "key": "subtitles.item.axe.wax_off", + "english_translation": "Wax off" + }, + { + "key": "multiplayer.lan.server_found", + "english_translation": "New server found: %s" + }, + { + "key": "subtitles.entity.spider.hurt", + "english_translation": "Spider hurts" + }, + { + "key": "entity.minecraft.marker", + "english_translation": "Marker" + }, + { + "key": "subtitles.entity.piglin_brute.death", + "english_translation": "Piglin Brute dies" + }, + { + "key": "advancements.nether.use_lodestone.title", + "english_translation": "Country Lode, Take Me Home" + }, + { + "key": "block.minecraft.oxeye_daisy", + "english_translation": "Oxeye Daisy" + }, + { + "key": "subtitles.entity.player.attack.strong", + "english_translation": "Strong attack" + }, + { + "key": "subtitles.entity.witch.ambient", + "english_translation": "Witch giggles" + }, + { + "key": "subtitles.block.pointed_dripstone.drip_lava_into_cauldron", + "english_translation": "Lava drips into Cauldron" + }, + { + "key": "block.minecraft.granite", + "english_translation": "Granite" + }, + { + "key": "book.invalid.tag", + "english_translation": "* Invalid book tag *" + }, + { + "key": "block.minecraft.sculk_shrieker", + "english_translation": "Sculk Shrieker" + }, + { + "key": "commands.deop.failed", + "english_translation": "Nothing changed. The player is not an operator" + }, + { + "key": "block.minecraft.banner.circle.gray", + "english_translation": "Gray Roundel" + }, + { + "key": "block.minecraft.banner.diagonal_up_left.gray", + "english_translation": "Gray Per Bend Inverted" + }, + { + "key": "argument.block.property.unknown", + "english_translation": "Block %s does not have property '%s'" + }, + { + "key": "key.keyboard.apostrophe", + "english_translation": "'" + }, + { + "key": "stat.minecraft.deaths", + "english_translation": "Number of Deaths" + }, + { + "key": "block.minecraft.banner.triangle_top.magenta", + "english_translation": "Magenta Inverted Chevron" + }, + { + "key": "narrator.screen.title", + "english_translation": "Title Screen" + }, + { + "key": "item.minecraft.arms_up_pottery_sherd", + "english_translation": "Arms Up Pottery Sherd" + }, + { + "key": "subtitles.entity.lightning_bolt.impact", + "english_translation": "Lightning strikes" + }, + { + "key": "subtitles.entity.sheep.death", + "english_translation": "Sheep dies" + }, + { + "key": "commands.recipe.take.success.multiple", + "english_translation": "Took %s recipes from %s players" + }, + { + "key": "subtitles.ui.stonecutter.take_result", + "english_translation": "Stonecutter used" + }, + { + "key": "block.minecraft.pink_wool", + "english_translation": "Pink Wool" + }, + { + "key": "multiplayer.status.ping.narration", + "english_translation": "Ping %s milliseconds" + }, + { + "key": "tutorial.move.title", + "english_translation": "Move with %s, %s, %s and %s" + }, + { + "key": "block.minecraft.banner.skull.cyan", + "english_translation": "Cyan Skull Charge" + }, + { + "key": "structure_block.hover.corner", + "english_translation": "Corner: %s" + }, + { + "key": "advancements.husbandry.root.title", + "english_translation": "Husbandry" + }, + { + "key": "item.minecraft.plenty_pottery_shard", + "english_translation": "Plenty Pottery Shard" + }, + { + "key": "painting.minecraft.alban.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.green_stained_glass_pane", + "english_translation": "Green Stained Glass Pane" + }, + { + "key": "item.minecraft.wooden_axe", + "english_translation": "Wooden Axe" + }, + { + "key": "block.minecraft.cobblestone_wall", + "english_translation": "Cobblestone Wall" + }, + { + "key": "optimizeWorld.title", + "english_translation": "Optimizing World '%s'" + }, + { + "key": "subtitles.block.campfire.crackle", + "english_translation": "Campfire crackles" + }, + { + "key": "item.minecraft.cyan_dye", + "english_translation": "Cyan Dye" + }, + { + "key": "commands.gamerule.set", + "english_translation": "Gamerule %s is now set to: %s" + }, + { + "key": "block.minecraft.banner.stripe_bottom.orange", + "english_translation": "Orange Base" + }, + { + "key": "title.singleplayer", + "english_translation": "Singleplayer" + }, + { + "key": "block.minecraft.banner.diagonal_right.black", + "english_translation": "Black Per Bend" + }, + { + "key": "block.minecraft.banner.stripe_downleft.white", + "english_translation": "White Bend Sinister" + }, + { + "key": "subtitles.entity.vex.ambient", + "english_translation": "Vex vexes" + }, + { + "key": "block.minecraft.tall_grass", + "english_translation": "Tall Grass" + }, + { + "key": "commands.advancement.grant.criterion.to.many.success", + "english_translation": "Granted criterion '%s' of advancement %s to %s players" + }, + { + "key": "advancements.adventure.adventuring_time.description", + "english_translation": "Discover every biome" + }, + { + "key": "block.minecraft.potted_dark_oak_sapling", + "english_translation": "Potted Dark Oak Sapling" + }, + { + "key": "entity.minecraft.villager.fisherman", + "english_translation": "Fisherman" + }, + { + "key": "mco.configure.world.buttons.players", + "english_translation": "Players" + }, + { + "key": "mco.brokenworld.message.line2", + "english_translation": "You can also choose to download the world to singleplayer." + }, + { + "key": "mco.brokenworld.message.line1", + "english_translation": "Please reset or select another world." + }, + { + "key": "advancements.adventure.spyglass_at_ghast.title", + "english_translation": "Is It a Balloon?" + }, + { + "key": "item.minecraft.sweet_berries", + "english_translation": "Sweet Berries" + }, + { + "key": "effect.minecraft.water_breathing", + "english_translation": "Water Breathing" + }, + { + "key": "item.minecraft.glowstone_dust", + "english_translation": "Glowstone Dust" + }, + { + "key": "trim_material.minecraft.netherite", + "english_translation": "Netherite Material" + }, + { + "key": "item.minecraft.flint_and_steel", + "english_translation": "Flint and Steel" + }, + { + "key": "item.minecraft.cherry_chest_boat", + "english_translation": "Cherry Boat with Chest" + }, + { + "key": "resourcePack.high_contrast.name", + "english_translation": "High Contrast" + }, + { + "key": "block.minecraft.banner.half_horizontal.cyan", + "english_translation": "Cyan Per Fess" + }, + { + "key": "generator.customized", + "english_translation": "Old Customized" + }, + { + "key": "item.minecraft.firework_star.yellow", + "english_translation": "Yellow" + }, + { + "key": "commands.recipe.give.failed", + "english_translation": "No new recipes were learned" + }, + { + "key": "stat_type.minecraft.used", + "english_translation": "Times Used" + }, + { + "key": "block.minecraft.banner.square_top_left.brown", + "english_translation": "Brown Chief Dexter Canton" + }, + { + "key": "block.minecraft.red_concrete_powder", + "english_translation": "Red Concrete Powder" + }, + { + "key": "item.minecraft.firework_star.blue", + "english_translation": "Blue" + }, + { + "key": "key.attack", + "english_translation": "Attack/Destroy" + }, + { + "key": "block.minecraft.banner.stripe_top.lime", + "english_translation": "Lime Chief" + }, + { + "key": "block.minecraft.banner.skull.light_gray", + "english_translation": "Light Gray Skull Charge" + }, + { + "key": "block.minecraft.spore_blossom", + "english_translation": "Spore Blossom" + }, + { + "key": "entity.minecraft.zombie", + "english_translation": "Zombie" + }, + { + "key": "block.minecraft.birch_hanging_sign", + "english_translation": "Birch Hanging Sign" + }, + { + "key": "controls.keybinds.duplicateKeybinds", + "english_translation": "This key is also used for:\n%s" + }, + { + "key": "block.minecraft.detector_rail", + "english_translation": "Detector Rail" + }, + { + "key": "block.minecraft.damaged_anvil", + "english_translation": "Damaged Anvil" + }, + { + "key": "block.minecraft.green_glazed_terracotta", + "english_translation": "Green Glazed Terracotta" + }, + { + "key": "gui.banned.reason.drugs", + "english_translation": "References to illegal drugs" + }, + { + "key": "item.minecraft.music_disc_ward.desc", + "english_translation": "C418 - ward" + }, + { + "key": "subtitles.entity.mule.angry", + "english_translation": "Mule neighs" + }, + { + "key": "block.minecraft.light_gray_glazed_terracotta", + "english_translation": "Light Gray Glazed Terracotta" + }, + { + "key": "commands.forceload.added.multiple", + "english_translation": "Marked %s chunks in %s from %s to %s to be force loaded" + }, + { + "key": "pack.nameAndSource", + "english_translation": "%s (%s)" + }, + { + "key": "subtitles.entity.ender_dragon.hurt", + "english_translation": "Dragon hurts" + }, + { + "key": "block.minecraft.banner.square_bottom_left.orange", + "english_translation": "Orange Base Dexter Canton" + }, + { + "key": "selectWorld.gameRules", + "english_translation": "Game Rules" + }, + { + "key": "options.fovEffectScale", + "english_translation": "FOV Effects" + }, + { + "key": "options.chat.title", + "english_translation": "Chat Settings..." + }, + { + "key": "subtitles.entity.ender_dragon.shoot", + "english_translation": "Dragon shoots" + }, + { + "key": "death.fell.finish", + "english_translation": "%1$s fell too far and was finished by %2$s" + }, + { + "key": "pack.incompatible.new", + "english_translation": "(Made for a newer version of Minecraft)" + }, + { + "key": "subtitles.entity.zoglin.hurt", + "english_translation": "Zoglin hurts" + }, + { + "key": "block.minecraft.stripped_spruce_log", + "english_translation": "Stripped Spruce Log" + }, + { + "key": "block.minecraft.banner.triangles_top.cyan", + "english_translation": "Cyan Chief Indented" + }, + { + "key": "pack.source.world", + "english_translation": "world" + }, + { + "key": "block.minecraft.lime_concrete", + "english_translation": "Lime Concrete" + }, + { + "key": "subtitles.entity.turtle.lay_egg", + "english_translation": "Turtle lays egg" + }, + { + "key": "biome.minecraft.warm_ocean", + "english_translation": "Warm Ocean" + }, + { + "key": "gamerule.snowAccumulationHeight.description", + "english_translation": "When it snows, layers of snow form on the ground up to at most this number of layers." + }, + { + "key": "subtitles.entity.warden.nearby_closest", + "english_translation": "Warden draws close" + }, + { + "key": "block.minecraft.waxed_weathered_cut_copper", + "english_translation": "Waxed Weathered Cut Copper" + }, + { + "key": "subtitles.chiseled_bookshelf.insert", + "english_translation": "Book placed" + }, + { + "key": "item.minecraft.shield.purple", + "english_translation": "Purple Shield" + }, + { + "key": "block.minecraft.deepslate_iron_ore", + "english_translation": "Deepslate Iron Ore" + }, + { + "key": "death.attack.badRespawnPoint.message", + "english_translation": "%1$s was killed by %2$s" + }, + { + "key": "key.keyboard.keypad.0", + "english_translation": "Keypad 0" + }, + { + "key": "key.keyboard.keypad.1", + "english_translation": "Keypad 1" + }, + { + "key": "container.upgrade.missing_template_tooltip", + "english_translation": "Add Smithing Template" + }, + { + "key": "block.minecraft.banner.diagonal_right.green", + "english_translation": "Green Per Bend" + }, + { + "key": "key.keyboard.keypad.2", + "english_translation": "Keypad 2" + }, + { + "key": "subtitles.entity.donkey.hurt", + "english_translation": "Donkey hurts" + }, + { + "key": "key.keyboard.keypad.3", + "english_translation": "Keypad 3" + }, + { + "key": "key.keyboard.keypad.4", + "english_translation": "Keypad 4" + }, + { + "key": "key.keyboard.keypad.5", + "english_translation": "Keypad 5" + }, + { + "key": "key.keyboard.keypad.6", + "english_translation": "Keypad 6" + }, + { + "key": "key.keyboard.keypad.7", + "english_translation": "Keypad 7" + }, + { + "key": "key.keyboard.keypad.8", + "english_translation": "Keypad 8" + }, + { + "key": "stat.minecraft.target_hit", + "english_translation": "Targets Hit" + }, + { + "key": "key.keyboard.keypad.9", + "english_translation": "Keypad 9" + }, + { + "key": "commands.data.modify.expected_object", + "english_translation": "Expected object, got: %s" + }, + { + "key": "stat.minecraft.interact_with_anvil", + "english_translation": "Interactions with Anvil" + }, + { + "key": "options.graphics.warning.title", + "english_translation": "Graphics Device Unsupported" + }, + { + "key": "block.minecraft.banner.stripe_top.blue", + "english_translation": "Blue Chief" + }, + { + "key": "argument.entity.options.level.negative", + "english_translation": "Level shouldn't be negative" + }, + { + "key": "block.minecraft.spruce_log", + "english_translation": "Spruce Log" + }, + { + "key": "item.minecraft.ink_sac", + "english_translation": "Ink Sac" + }, + { + "key": "subtitles.entity.salmon.death", + "english_translation": "Salmon dies" + }, + { + "key": "item.minecraft.gold_ingot", + "english_translation": "Gold Ingot" + }, + { + "key": "stat.minecraft.tune_noteblock", + "english_translation": "Note Blocks Tuned" + }, + { + "key": "subtitles.entity.wither_skeleton.death", + "english_translation": "Wither Skeleton dies" + }, + { + "key": "block.minecraft.respawn_anchor", + "english_translation": "Respawn Anchor" + }, + { + "key": "item.minecraft.piglin_brute_spawn_egg", + "english_translation": "Piglin Brute Spawn Egg" + }, + { + "key": "commands.title.cleared.single", + "english_translation": "Cleared titles for %s" + }, + { + "key": "advancements.nether.ride_strider.title", + "english_translation": "This Boat Has Legs" + }, + { + "key": "commands.forceload.list.single", + "english_translation": "A force loaded chunk was found in %s at: %s" + }, + { + "key": "block.minecraft.brain_coral", + "english_translation": "Brain Coral" + }, + { + "key": "argument.nbt.array.invalid", + "english_translation": "Invalid array type '%s'" + }, + { + "key": "options.graphics.warning.renderer", + "english_translation": "Renderer detected: [%s]" + }, + { + "key": "block.minecraft.banner.half_horizontal.magenta", + "english_translation": "Magenta Per Fess" + }, + { + "key": "item.minecraft.cooked_mutton", + "english_translation": "Cooked Mutton" + }, + { + "key": "selectWorld.world", + "english_translation": "World" + }, + { + "key": "block.minecraft.banner.square_bottom_left.brown", + "english_translation": "Brown Base Dexter Canton" + }, + { + "key": "gui.acknowledge", + "english_translation": "Acknowledge" + }, + { + "key": "block.minecraft.banner.rhombus.magenta", + "english_translation": "Magenta Lozenge" + }, + { + "key": "block.minecraft.banner.stripe_middle.pink", + "english_translation": "Pink Fess" + }, + { + "key": "createWorld.customize.custom.count", + "english_translation": "Spawn Tries" + }, + { + "key": "subtitles.entity.parrot.imitate.endermite", + "english_translation": "Parrot scuttles" + }, + { + "key": "block.minecraft.banner.stripe_center.lime", + "english_translation": "Lime Pale" + }, + { + "key": "block.minecraft.dead_bubble_coral_fan", + "english_translation": "Dead Bubble Coral Fan" + }, + { + "key": "selectWorld.edit.backupFolder", + "english_translation": "Open Backups Folder" + }, + { + "key": "subtitles.item.trident.throw", + "english_translation": "Trident clangs" + }, + { + "key": "death.attack.fireworks.player", + "english_translation": "%1$s went off with a bang whilst fighting %2$s" + }, + { + "key": "subtitles.entity.parrot.imitate.pillager", + "english_translation": "Parrot murmurs" + }, + { + "key": "gui.abuseReport.send.json_error", + "english_translation": "Encountered malformed payload while sending your report." + }, + { + "key": "item.minecraft.shelter_pottery_shard", + "english_translation": "Shelter Pottery Shard" + }, + { + "key": "block.minecraft.beacon.secondary", + "english_translation": "Secondary Power" + }, + { + "key": "block.minecraft.water_cauldron", + "english_translation": "Water Cauldron" + }, + { + "key": "item.minecraft.splash_potion.effect.strength", + "english_translation": "Splash Potion of Strength" + }, + { + "key": "effect.minecraft.night_vision", + "english_translation": "Night Vision" + }, + { + "key": "subtitles.entity.fox.death", + "english_translation": "Fox dies" + }, + { + "key": "container.enderchest", + "english_translation": "Ender Chest" + }, + { + "key": "item.minecraft.purple_dye", + "english_translation": "Purple Dye" + }, + { + "key": "biome.minecraft.birch_forest", + "english_translation": "Birch Forest" + }, + { + "key": "block.minecraft.banner.gradient.white", + "english_translation": "White Gradient" + }, + { + "key": "item.minecraft.pitcher_plant", + "english_translation": "Pitcher Plant" + }, + { + "key": "fabric-registry-sync-v0.unknown-remote.title.plural", + "english_translation": "Received %s registry entries that are unknown to this client.\n" + }, + { + "key": "subtitles.block.grindstone.use", + "english_translation": "Grindstone used" + }, + { + "key": "biome.minecraft.forest", + "english_translation": "Forest" + }, + { + "key": "gui.abuseReport.reason.self_harm_or_suicide.description", + "english_translation": "Someone is threatening to harm themselves in real life or talking about harming themselves in real life." + }, + { + "key": "commands.scoreboard.objectives.modify.displayname", + "english_translation": "Changed the display name of %s to %s" + }, + { + "key": "block.minecraft.water", + "english_translation": "Water" + }, + { + "key": "subtitles.entity.boat.paddle_water", + "english_translation": "Rowing" + }, + { + "key": "gui.banned.reason.harassment_or_bullying", + "english_translation": "Abusive language used in a directed, harmful manner" + }, + { + "key": "selectWorld.deleteWarning", + "english_translation": "'%s' will be lost forever! (A long time!)" + }, + { + "key": "block.minecraft.green_carpet", + "english_translation": "Green Carpet" + }, + { + "key": "team.collision.always", + "english_translation": "Always" + }, + { + "key": "subtitles.entity.guardian.ambient_land", + "english_translation": "Guardian flaps" + }, + { + "key": "mco.configure.world.delete.button", + "english_translation": "Delete realm" + }, + { + "key": "telemetry.property.launcher_name.title", + "english_translation": "Launcher Name" + }, + { + "key": "gamerule.sendCommandFeedback", + "english_translation": "Send command feedback" + }, + { + "key": "block.minecraft.banner.triangle_top.purple", + "english_translation": "Purple Inverted Chevron" + }, + { + "key": "item.minecraft.lingering_potion.effect.slowness", + "english_translation": "Lingering Potion of Slowness" + }, + { + "key": "mco.backup.unknown", + "english_translation": "UNKNOWN" + }, + { + "key": "multiplayer.disconnect.invalid_player_movement", + "english_translation": "Invalid move player packet received" + }, + { + "key": "advancements.end.respawn_dragon.description", + "english_translation": "Respawn the Ender Dragon" + }, + { + "key": "block.minecraft.banner.stripe_bottom.magenta", + "english_translation": "Magenta Base" + }, + { + "key": "subtitles.block.smithing_table.use", + "english_translation": "Smithing Table used" + }, + { + "key": "block.minecraft.sculk_vein", + "english_translation": "Sculk Vein" + }, + { + "key": "command.unknown.command", + "english_translation": "Unknown or incomplete command, see below for error" + }, + { + "key": "advMode.previousOutput", + "english_translation": "Previous Output" + }, + { + "key": "stat.minecraft.enchant_item", + "english_translation": "Items Enchanted" + }, + { + "key": "block.minecraft.dark_oak_leaves", + "english_translation": "Dark Oak Leaves" + }, + { + "key": "key.keyboard.unknown", + "english_translation": "Not Bound" + }, + { + "key": "item.minecraft.rabbit_spawn_egg", + "english_translation": "Rabbit Spawn Egg" + }, + { + "key": "block.minecraft.green_stained_glass", + "english_translation": "Green Stained Glass" + }, + { + "key": "mirror.front_back", + "english_translation": "↑ ↓" + }, + { + "key": "block.minecraft.command_block", + "english_translation": "Command Block" + }, + { + "key": "block.minecraft.banner.stripe_center.blue", + "english_translation": "Blue Pale" + }, + { + "key": "advancements.nether.obtain_crying_obsidian.title", + "english_translation": "Who is Cutting Onions?" + }, + { + "key": "mco.minigame.world.slot.screen.title", + "english_translation": "Switching world..." + }, + { + "key": "disconnect.overflow", + "english_translation": "Buffer overflow" + }, + { + "key": "options.directionalAudio.on.tooltip", + "english_translation": "Uses HRTF-based directional audio to improve the simulation of 3D sound. Requires HRTF compatible audio hardware, and is best experienced with headphones." + }, + { + "key": "block.minecraft.bed.no_sleep", + "english_translation": "You can sleep only at night or during thunderstorms" + }, + { + "key": "commands.drop.success.multiple_with_table", + "english_translation": "Dropped %s items from loot table %s" + }, + { + "key": "commands.worldborder.set.failed.small", + "english_translation": "World border cannot be smaller than 1 block wide" + }, + { + "key": "item.minecraft.firework_star.lime", + "english_translation": "Lime" + }, + { + "key": "telemetry.event.game_load_times.description", + "english_translation": "This event can help us figure out where startup performance improvements are needed by measuring the execution times of the startup phases." + }, + { + "key": "subtitles.block.enchantment_table.use", + "english_translation": "Enchanting Table used" + }, + { + "key": "subtitles.block.sculk.charge", + "english_translation": "Sculk bubbles" + }, + { + "key": "subtitles.entity.glow_item_frame.add_item", + "english_translation": "Glow Item Frame fills" + }, + { + "key": "block.minecraft.raw_iron_block", + "english_translation": "Block of Raw Iron" + }, + { + "key": "enchantment.minecraft.multishot", + "english_translation": "Multishot" + }, + { + "key": "painting.minecraft.donkey_kong.title", + "english_translation": "Kong" + }, + { + "key": "gui.abuseReport.send.service_unavailable", + "english_translation": "Unable to reach the Abuse Reporting service. Please make sure you are connected to the internet and try again." + }, + { + "key": "gamerule.reducedDebugInfo", + "english_translation": "Reduce debug info" + }, + { + "key": "key.keyboard.menu", + "english_translation": "Menu" + }, + { + "key": "advMode.notAllowed", + "english_translation": "Must be an opped player in creative mode" + }, + { + "key": "symlink_warning.title", + "english_translation": "World folder contains symbolic links" + }, + { + "key": "options.graphics.warning.message", + "english_translation": "Your graphics device is detected as unsupported for the %s graphics option.\n\nYou may ignore this and continue, however support will not be provided for your device if you choose to use %s graphics." + }, + { + "key": "options.renderClouds", + "english_translation": "Clouds" + }, + { + "key": "subtitles.entity.panda.cant_breed", + "english_translation": "Panda bleats" + }, + { + "key": "item.minecraft.chainmail_boots", + "english_translation": "Chainmail Boots" + }, + { + "key": "advancements.husbandry.obtain_sniffer_egg.title", + "english_translation": "Smells Interesting" + }, + { + "key": "createWorld.customize.custom.heightScale", + "english_translation": "Height Scale" + }, + { + "key": "structure_block.invalid_structure_name", + "english_translation": "Invalid structure name '%s'" + }, + { + "key": "block.minecraft.blue_glazed_terracotta", + "english_translation": "Blue Glazed Terracotta" + }, + { + "key": "death.attack.lightningBolt", + "english_translation": "%1$s was struck by lightning" + }, + { + "key": "item.minecraft.snort_pottery_shard", + "english_translation": "Snort Pottery Shard" + }, + { + "key": "telemetry.property.seconds_since_load.title", + "english_translation": "Time Since Load (Seconds)" + }, + { + "key": "block.minecraft.cyan_stained_glass_pane", + "english_translation": "Cyan Stained Glass Pane" + }, + { + "key": "multiplayer.texturePrompt.line1", + "english_translation": "This server recommends the use of a custom resource pack." + }, + { + "key": "multiplayer.texturePrompt.line2", + "english_translation": "Would you like to download and install it automagically?" + }, + { + "key": "addServer.hideAddress", + "english_translation": "Hide Address" + }, + { + "key": "block.minecraft.banner.cross.yellow", + "english_translation": "Yellow Saltire" + }, + { + "key": "block.minecraft.banner.triangle_bottom.gray", + "english_translation": "Gray Chevron" + }, + { + "key": "biome.minecraft.windswept_savanna", + "english_translation": "Windswept Savanna" + }, + { + "key": "block.minecraft.banner.stripe_center.light_gray", + "english_translation": "Light Gray Pale" + }, + { + "key": "subtitles.entity.puffer_fish.sting", + "english_translation": "Pufferfish stings" + }, + { + "key": "createWorld.customize.custom.maxHeight", + "english_translation": "Max. Height" + }, + { + "key": "item.minecraft.splash_potion.effect.leaping", + "english_translation": "Splash Potion of Leaping" + }, + { + "key": "mco.minigame.world.restore", + "english_translation": "Ending minigame..." + }, + { + "key": "advancements.story.shiny_gear.title", + "english_translation": "Cover Me with Diamonds" + }, + { + "key": "structure_block.size.z", + "english_translation": "structure size z" + }, + { + "key": "structure_block.size.x", + "english_translation": "structure size x" + }, + { + "key": "structure_block.size.y", + "english_translation": "structure size y" + }, + { + "key": "entity.minecraft.glow_item_frame", + "english_translation": "Glow Item Frame" + }, + { + "key": "biome.minecraft.end_highlands", + "english_translation": "End Highlands" + }, + { + "key": "gamerule.doMobLoot.description", + "english_translation": "Controls resource drops from mobs, including experience orbs." + }, + { + "key": "mco.reset.world.title", + "english_translation": "Reset world" + }, + { + "key": "telemetry.event.world_load_times.description", + "english_translation": "It’s important for us to understand how long it takes to join a world, and how that changes over time. For example, when we add new features or do larger technical changes, we need to see what impact that had on load times." + }, + { + "key": "block.minecraft.banner.half_horizontal.red", + "english_translation": "Red Per Fess" + }, + { + "key": "key.keyboard.scroll.lock", + "english_translation": "Scroll Lock" + }, + { + "key": "block.minecraft.bamboo_fence_gate", + "english_translation": "Bamboo Fence Gate" + }, + { + "key": "entity.minecraft.wandering_trader", + "english_translation": "Wandering Trader" + }, + { + "key": "argument.entity.options.mode.invalid", + "english_translation": "Invalid or unknown game mode '%s'" + }, + { + "key": "advancements.adventure.kill_all_mobs.description", + "english_translation": "Kill one of every hostile monster" + }, + { + "key": "effect.minecraft.fire_resistance", + "english_translation": "Fire Resistance" + }, + { + "key": "block.minecraft.ominous_banner", + "english_translation": "Ominous Banner" + }, + { + "key": "block.minecraft.white_concrete_powder", + "english_translation": "White Concrete Powder" + }, + { + "key": "block.minecraft.banner.cross.pink", + "english_translation": "Pink Saltire" + }, + { + "key": "narration.edit_box", + "english_translation": "Edit box: %s" + }, + { + "key": "block.minecraft.crimson_slab", + "english_translation": "Crimson Slab" + }, + { + "key": "commands.bossbar.get.value", + "english_translation": "Custom bossbar %s has a value of %s" + }, + { + "key": "commands.tag.list.multiple.success", + "english_translation": "The %s entities have %s total tags: %s" + }, + { + "key": "selectWorld.recreate", + "english_translation": "Re-Create" + }, + { + "key": "item.minecraft.stone_pickaxe", + "english_translation": "Stone Pickaxe" + }, + { + "key": "subtitles.entity.fox.screech", + "english_translation": "Fox screeches" + }, + { + "key": "options.biomeBlendRadius.9", + "english_translation": "9x9 (Very High)" + }, + { + "key": "options.biomeBlendRadius.7", + "english_translation": "7x7 (High)" + }, + { + "key": "options.biomeBlendRadius.5", + "english_translation": "5x5 (Normal)" + }, + { + "key": "options.biomeBlendRadius.3", + "english_translation": "3x3 (Fast)" + }, + { + "key": "commands.advancement.grant.one.to.one.failure", + "english_translation": "Couldn't grant advancement %s to %s as they already have it" + }, + { + "key": "options.biomeBlendRadius.1", + "english_translation": "OFF (Fastest)" + }, + { + "key": "block.minecraft.cherry_wood", + "english_translation": "Cherry Wood" + }, + { + "key": "multiplayer.player.joined.renamed", + "english_translation": "%s (formerly known as %s) joined the game" + }, + { + "key": "effect.minecraft.slowness", + "english_translation": "Slowness" + }, + { + "key": "block.minecraft.potted_red_mushroom", + "english_translation": "Potted Red Mushroom" + }, + { + "key": "trim_material.minecraft.iron", + "english_translation": "Iron Material" + }, + { + "key": "block.minecraft.banner.border.yellow", + "english_translation": "Yellow Bordure" + }, + { + "key": "subtitles.entity.warden.listening", + "english_translation": "Warden takes notice" + }, + { + "key": "block.minecraft.banner.stripe_downright.black", + "english_translation": "Black Bend" + }, + { + "key": "block.minecraft.banner.stripe_downright.white", + "english_translation": "White Bend" + }, + { + "key": "block.minecraft.banner.gradient.green", + "english_translation": "Green Gradient" + }, + { + "key": "gamerule.commandBlockOutput", + "english_translation": "Broadcast command block output" + }, + { + "key": "selectServer.defaultName", + "english_translation": "Minecraft Server" + }, + { + "key": "gui.abuseReport.send.http_error", + "english_translation": "An unexpected HTTP error occurred while sending your report." + }, + { + "key": "block.minecraft.banner.diagonal_up_right.light_gray", + "english_translation": "Light Gray Per Bend Sinister Inverted" + }, + { + "key": "advancements.husbandry.tame_an_animal.title", + "english_translation": "Best Friends Forever" + }, + { + "key": "telemetry.event.world_loaded.description", + "english_translation": "Knowing how players play Minecraft (such as Game Mode, client or server modded, and game version) allows us to focus game updates to improve the areas that players care about most.\nThe World Loaded event is paired with the World Unloaded event to calculate how long the play session has lasted." + }, + { + "key": "options.prioritizeChunkUpdates.byPlayer", + "english_translation": "Semi Blocking" + }, + { + "key": "item.minecraft.nether_wart", + "english_translation": "Nether Wart" + }, + { + "key": "block.minecraft.banner.triangle_top.light_blue", + "english_translation": "Light Blue Inverted Chevron" + }, + { + "key": "gui.socialInteractions.tooltip.report.disabled", + "english_translation": "The reporting service is unavailable" + }, + { + "key": "block.minecraft.banner.stripe_middle.black", + "english_translation": "Black Fess" + }, + { + "key": "item.minecraft.spruce_chest_boat", + "english_translation": "Spruce Boat with Chest" + }, + { + "key": "options.biomeBlendRadius", + "english_translation": "Biome Blend" + }, + { + "key": "commands.give.failed.toomanyitems", + "english_translation": "Can't give more than %s of %s" + }, + { + "key": "subtitles.entity.parrot.imitate.ravager", + "english_translation": "Parrot grunts" + }, + { + "key": "block.minecraft.powder_snow", + "english_translation": "Powder Snow" + }, + { + "key": "options.guiScale", + "english_translation": "GUI Scale" + }, + { + "key": "compliance.playtime.greaterThan24Hours", + "english_translation": "You've been playing for greater than 24 hours" + }, + { + "key": "entity.minecraft.snowball", + "english_translation": "Snowball" + }, + { + "key": "menu.savingLevel", + "english_translation": "Saving world" + }, + { + "key": "biome.minecraft.deep_cold_ocean", + "english_translation": "Deep Cold Ocean" + }, + { + "key": "death.attack.genericKill.player", + "english_translation": "%1$s was killed whilst fighting %2$s" + }, + { + "key": "block.minecraft.orange_bed", + "english_translation": "Orange Bed" + }, + { + "key": "telemetry.event.performance_metrics.title", + "english_translation": "Performance Metrics" + }, + { + "key": "block.minecraft.jungle_stairs", + "english_translation": "Jungle Stairs" + }, + { + "key": "enchantment.minecraft.smite", + "english_translation": "Smite" + }, + { + "key": "entity.minecraft.hopper_minecart", + "english_translation": "Minecart with Hopper" + }, + { + "key": "block.minecraft.bamboo_sign", + "english_translation": "Bamboo Sign" + }, + { + "key": "block.minecraft.iron_block", + "english_translation": "Block of Iron" + }, + { + "key": "advancements.adventure.root.description", + "english_translation": "Adventure, exploration and combat" + }, + { + "key": "gui.chatReport.draft.quittotitle.title", + "english_translation": "You have a draft chat report that will be lost if you quit" + }, + { + "key": "block.minecraft.banner.cross.brown", + "english_translation": "Brown Saltire" + }, + { + "key": "instrument.minecraft.call_goat_horn", + "english_translation": "Call" + }, + { + "key": "subtitles.entity.drowned.ambient", + "english_translation": "Drowned gurgles" + }, + { + "key": "trim_pattern.minecraft.raiser", + "english_translation": "Raiser Armor Trim" + }, + { + "key": "block.minecraft.purple_concrete", + "english_translation": "Purple Concrete" + }, + { + "key": "subtitles.entity.item_frame.rotate_item", + "english_translation": "Item Frame clicks" + }, + { + "key": "item.minecraft.shield.pink", + "english_translation": "Pink Shield" + }, + { + "key": "gui.abuseReport.reason.terrorism_or_violent_extremism.description", + "english_translation": "Someone is talking about, promoting, or threatening to commit acts of terrorism or violent extremism for political, religious, ideological, or other reasons." + }, + { + "key": "subtitles.block.furnace.fire_crackle", + "english_translation": "Furnace crackles" + }, + { + "key": "stat.minecraft.interact_with_furnace", + "english_translation": "Interactions with Furnace" + }, + { + "key": "advancements.adventure.sniper_duel.description", + "english_translation": "Kill a Skeleton from at least 50 meters away" + }, + { + "key": "biome.minecraft.mushroom_fields", + "english_translation": "Mushroom Fields" + }, + { + "key": "block.minecraft.red_carpet", + "english_translation": "Red Carpet" + }, + { + "key": "key.keyboard.f8", + "english_translation": "F8" + }, + { + "key": "key.keyboard.f9", + "english_translation": "F9" + }, + { + "key": "key.keyboard.f6", + "english_translation": "F6" + }, + { + "key": "key.keyboard.f7", + "english_translation": "F7" + }, + { + "key": "subtitles.entity.wandering_trader.disappeared", + "english_translation": "Wandering Trader disappears" + }, + { + "key": "debug.inspect.help", + "english_translation": "F3 + I = Copy entity or block data to clipboard" + }, + { + "key": "key.keyboard.f1", + "english_translation": "F1" + }, + { + "key": "options.fovEffectScale.tooltip", + "english_translation": "Controls how much the field of view can change with gameplay effects." + }, + { + "key": "key.keyboard.f4", + "english_translation": "F4" + }, + { + "key": "key.keyboard.f5", + "english_translation": "F5" + }, + { + "key": "multiplayer.disconnect.invalid_vehicle_movement", + "english_translation": "Invalid move vehicle packet received" + }, + { + "key": "key.keyboard.f2", + "english_translation": "F2" + }, + { + "key": "key.keyboard.f3", + "english_translation": "F3" + }, + { + "key": "mco.template.select.none.linkTitle", + "english_translation": "consider submitting something yourself" + }, + { + "key": "block.minecraft.banner.curly_border.light_blue", + "english_translation": "Light Blue Bordure Indented" + }, + { + "key": "advancements.story.smelt_iron.description", + "english_translation": "Smelt an Iron Ingot" + }, + { + "key": "chat_screen.message", + "english_translation": "Message to send: %s" + }, + { + "key": "subtitles.block.redstone_torch.burnout", + "english_translation": "Torch fizzes" + }, + { + "key": "entity.minecraft.villager.nitwit", + "english_translation": "Nitwit" + }, + { + "key": "command.expected.separator", + "english_translation": "Expected whitespace to end one argument, but found trailing data" + }, + { + "key": "block.minecraft.oak_fence_gate", + "english_translation": "Oak Fence Gate" + }, + { + "key": "subtitles.entity.horse.gallop", + "english_translation": "Horse gallops" + }, + { + "key": "gamerule.category.misc", + "english_translation": "Miscellaneous" + }, + { + "key": "commands.locate.biome.success", + "english_translation": "The nearest %s is at %s (%s blocks away)" + }, + { + "key": "block.minecraft.banner.creeper.gray", + "english_translation": "Gray Creeper Charge" + }, + { + "key": "subtitles.item.book.page_turn", + "english_translation": "Page rustles" + }, + { + "key": "painting.minecraft.wanderer.author", + "english_translation": "Kristoffer Zetterstrand" + }, + { + "key": "block.minecraft.cyan_bed", + "english_translation": "Cyan Bed" + }, + { + "key": "subtitles.item.bone_meal.use", + "english_translation": "Bone Meal crinkles" + }, + { + "key": "item.minecraft.golden_chestplate", + "english_translation": "Golden Chestplate" + }, + { + "key": "item.minecraft.rabbit_foot", + "english_translation": "Rabbit's Foot" + }, + { + "key": "entity.minecraft.villager.cleric", + "english_translation": "Cleric" + }, + { + "key": "gamerule.doPatrolSpawning", + "english_translation": "Spawn pillager patrols" + }, + { + "key": "block.minecraft.banner.stripe_middle.light_blue", + "english_translation": "Light Blue Fess" + }, + { + "key": "jigsaw_block.target", + "english_translation": "Target Name:" + }, + { + "key": "block.minecraft.banner.stripe_downright.green", + "english_translation": "Green Bend" + }, + { + "key": "subtitles.entity.horse.hurt", + "english_translation": "Horse hurts" + }, + { + "key": "stat.minecraft.interact_with_grindstone", + "english_translation": "Interactions with Grindstone" + }, + { + "key": "biome.minecraft.old_growth_birch_forest", + "english_translation": "Old Growth Birch Forest" + }, + { + "key": "block.minecraft.player_wall_head", + "english_translation": "Player Wall Head" + }, + { + "key": "optimizeWorld.info.converted", + "english_translation": "Upgraded chunks: %s" + }, + { + "key": "argument.enum.invalid", + "english_translation": "Invalid value \"%s\"" + }, + { + "key": "item.minecraft.miner_pottery_sherd", + "english_translation": "Miner Pottery Sherd" + }, + { + "key": "block.minecraft.brown_glazed_terracotta", + "english_translation": "Brown Glazed Terracotta" + }, + { + "key": "options.modelPart.left_pants_leg", + "english_translation": "Left Pants Leg" + }, + { + "key": "mco.reset.world.template", + "english_translation": "World templates" + }, + { + "key": "effect.minecraft.resistance", + "english_translation": "Resistance" + }, + { + "key": "arguments.function.unknown", + "english_translation": "Unknown function %s" + }, + { + "key": "subtitles.entity.zombie_villager.hurt", + "english_translation": "Zombie Villager hurts" + }, + { + "key": "block.minecraft.cave_vines", + "english_translation": "Cave Vines" + }, + { + "key": "container.enchant", + "english_translation": "Enchant" + }, + { + "key": "item.minecraft.frog_spawn_egg", + "english_translation": "Frog Spawn Egg" + }, + { + "key": "commands.bossbar.set.visible.success.hidden", + "english_translation": "Custom bossbar %s is now hidden" + }, + { + "key": "stat.minecraft.interact_with_smoker", + "english_translation": "Interactions with Smoker" + }, + { + "key": "createWorld.customize.flat.title", + "english_translation": "Superflat Customization" + }, + { + "key": "telemetry.property.load_time_bootstrap_ms.title", + "english_translation": "Bootstrap Time (Milliseconds)" + }, + { + "key": "item.minecraft.lingering_potion.effect.awkward", + "english_translation": "Awkward Lingering Potion" + }, + { + "key": "block.minecraft.waxed_weathered_copper", + "english_translation": "Waxed Weathered Copper" + }, + { + "key": "argument.player.unknown", + "english_translation": "That player does not exist" + }, + { + "key": "block.minecraft.mangrove_trapdoor", + "english_translation": "Mangrove Trapdoor" + }, + { + "key": "mco.minigame.world.selected", + "english_translation": "Selected minigame:" + }, + { + "key": "item.minecraft.sniffer_spawn_egg", + "english_translation": "Sniffer Spawn Egg" + }, + { + "key": "block.minecraft.banner.half_horizontal_bottom.purple", + "english_translation": "Purple Per Fess Inverted" + }, + { + "key": "block.minecraft.fletching_table", + "english_translation": "Fletching Table" + }, + { + "key": "block.minecraft.banner.stripe_downleft.gray", + "english_translation": "Gray Bend Sinister" + }, + { + "key": "argument.range.swapped", + "english_translation": "Min cannot be bigger than max" + }, + { + "key": "commands.setblock.success", + "english_translation": "Changed the block at %s, %s, %s" + }, + { + "key": "item.minecraft.leather_chestplate", + "english_translation": "Leather Tunic" + }, + { + "key": "item.minecraft.chicken_spawn_egg", + "english_translation": "Chicken Spawn Egg" + }, + { + "key": "item.minecraft.porkchop", + "english_translation": "Raw Porkchop" + }, + { + "key": "attribute.modifier.take.1", + "english_translation": "-%s%% %s" + }, + { + "key": "attribute.modifier.take.0", + "english_translation": "-%s %s" + }, + { + "key": "selectWorld.gameMode.survival.info", + "english_translation": "Explore a mysterious world where you build, collect, craft, and fight monsters." + }, + { + "key": "item.minecraft.flower_banner_pattern.desc", + "english_translation": "Flower Charge" + }, + { + "key": "block.minecraft.granite_slab", + "english_translation": "Granite Slab" + }, + { + "key": "argument.entity.options.x.description", + "english_translation": "x position" + }, + { + "key": "subtitles.entity.skeleton.shoot", + "english_translation": "Skeleton shoots" + }, + { + "key": "chat.coordinates.tooltip", + "english_translation": "Click to teleport" + }, + { + "key": "argument.pos2d.incomplete", + "english_translation": "Incomplete (expected 2 coordinates)" + }, + { + "key": "block.minecraft.banner.triangles_bottom.red", + "english_translation": "Red Base Indented" + }, + { + "key": "item.minecraft.beef", + "english_translation": "Raw Beef" + }, + { + "key": "attribute.modifier.take.2", + "english_translation": "-%s%% %s" + }, + { + "key": "block.minecraft.fern", + "english_translation": "Fern" + }, + { + "key": "item.minecraft.rotten_flesh", + "english_translation": "Rotten Flesh" + }, + { + "key": "stat.minecraft.sleep_in_bed", + "english_translation": "Times Slept in a Bed" + }, + { + "key": "block.minecraft.banner.border.cyan", + "english_translation": "Cyan Bordure" + }, + { + "key": "credits_and_attribution.screen.title", + "english_translation": "Credits and Attribution" + }, + { + "key": "item.minecraft.brewing_stand", + "english_translation": "Brewing Stand" + }, + { + "key": "subtitles.entity.fox.ambient", + "english_translation": "Fox squeaks" + }, + { + "key": "subtitles.entity.generic.drink", + "english_translation": "Sipping" + }, + { + "key": "subtitles.entity.tadpole.hurt", + "english_translation": "Tadpole hurts" + }, + { + "key": "commands.advancement.revoke.many.to.one.success", + "english_translation": "Revoked %s advancements from %s" + }, + { + "key": "item.minecraft.potion", + "english_translation": "Potion" + }, + { + "key": "mco.info", + "english_translation": "Info!" + }, + { + "key": "gamerule.category.player", + "english_translation": "Player" + }, + { + "key": "block.minecraft.blue_wool", + "english_translation": "Blue Wool" + }, + { + "key": "block.minecraft.fire_coral", + "english_translation": "Fire Coral" + }, + { + "key": "advancements.husbandry.ride_a_boat_with_a_goat.description", + "english_translation": "Get in a Boat and float with a Goat" + }, + { + "key": "entity.minecraft.wolf", + "english_translation": "Wolf" + } +] \ No newline at end of file diff --git a/vendor/valence/crates/valence_lang/src/lib.rs b/vendor/valence/crates/valence_lang/src/lib.rs new file mode 100644 index 00000000..0f8f3b93 --- /dev/null +++ b/vendor/valence/crates/valence_lang/src/lib.rs @@ -0,0 +1,8 @@ +#![doc = include_str!("../README.md")] + +/// Contains Rust constants for all of Minecraft's standard translation keys. +/// +/// Use these with `Text::translate`. +pub mod keys { + include!(concat!(env!("OUT_DIR"), "/translation_keys.rs")); +} diff --git a/vendor/valence/crates/valence_math/Cargo.toml b/vendor/valence/crates/valence_math/Cargo.toml new file mode 100644 index 00000000..08badf18 --- /dev/null +++ b/vendor/valence/crates/valence_math/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "valence_math" +description = "Math for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +glam.workspace = true diff --git a/vendor/valence/crates/valence_math/README.md b/vendor/valence/crates/valence_math/README.md new file mode 100644 index 00000000..d7f7f918 --- /dev/null +++ b/vendor/valence/crates/valence_math/README.md @@ -0,0 +1,6 @@ +# valence_math + +Common math utilities for Valence. + +This crate re-exports the contents of [`glam`](https://docs.rs/glam/latest/glam/) along with our own types such as [`Aabb`]. +For more information, please see `glam`'s documentation. diff --git a/vendor/valence/crates/valence_math/src/aabb.rs b/vendor/valence/crates/valence_math/src/aabb.rs new file mode 100644 index 00000000..5617a349 --- /dev/null +++ b/vendor/valence/crates/valence_math/src/aabb.rs @@ -0,0 +1,210 @@ +use std::ops::{Add, Sub}; + +use glam::DVec3; + +/// A three-dimensional axis-aligned bounding box, or "AABB". +/// +/// The AABB is defined by two points—`min` and `max`. `min` is less than or +/// equal to `max` componentwise. +#[derive(Copy, Clone, PartialEq, Default, Debug)] +pub struct Aabb { + min: DVec3, + max: DVec3, +} + +impl Aabb { + pub const ZERO: Self = Self { + min: DVec3::ZERO, + max: DVec3::ZERO, + }; + + /// Constructs a new AABB from `min` and `max` points. + /// + /// # Panics + /// + /// Panics if `debug_assertions` are enabled and `min` is not less than or + /// equal to `max` componentwise. + #[cfg_attr(debug_assertions, track_caller)] + pub fn new(min: DVec3, max: DVec3) -> Self { + debug_assert!( + min.x <= max.x && min.y <= max.y && min.z <= max.z, + "`min` must be less than or equal to `max` componentwise (min = {min}, max = {max})" + ); + + Self { min, max } + } + + // TODO: remove when the assertion in `new` can be done in a `const` context. + #[doc(hidden)] + pub const fn new_unchecked(min: DVec3, max: DVec3) -> Self { + Self { min, max } + } + + /// Returns a new AABB containing a single point `p`. + pub fn new_point(p: DVec3) -> Self { + Self::new(p, p) + } + + pub fn from_bottom_size(bottom: DVec3, size: DVec3) -> Self { + Self::new( + DVec3 { + x: bottom.x - size.x / 2.0, + y: bottom.y, + z: bottom.z - size.z / 2.0, + }, + DVec3 { + x: bottom.x + size.x / 2.0, + y: bottom.y + size.y, + z: bottom.z + size.z / 2.0, + }, + ) + } + + pub const fn min(self) -> DVec3 { + self.min + } + + pub const fn max(self) -> DVec3 { + self.max + } + + pub fn union(self, other: Self) -> Self { + Self::new(self.min.min(other.min), self.max.max(other.max)) + } + + pub fn intersects(self, other: Self) -> bool { + self.max.x >= other.min.x + && other.max.x >= self.min.x + && self.max.y >= other.min.y + && other.max.y >= self.min.y + && self.max.z >= other.min.z + && other.max.z >= self.min.z + } + + /// Does this bounding box contain the given point? + pub fn contains_point(self, p: DVec3) -> bool { + self.min.x <= p.x + && self.min.y <= p.y + && self.min.z <= p.z + && self.max.x >= p.x + && self.max.y >= p.y + && self.max.z >= p.z + } + + /// Returns the closest point in the AABB to the given point. + pub fn projected_point(self, p: DVec3) -> DVec3 { + p.clamp(self.min, self.max) + } + + /// Returns the smallest distance from the AABB to the point. + pub fn distance_to_point(self, p: DVec3) -> f64 { + self.projected_point(p).distance(p) + } + + /// Calculates the intersection between this AABB and a ray + /// defined by its `origin` point and `direction` vector. + /// + /// If an intersection occurs, `Some([near, far])` is returned. `near` and + /// `far` are the values of `t` in the equation `origin + t * direction = + /// point` where `point` is the nearest or furthest intersection point to + /// the `origin`. If no intersection occurs, then `None` is returned. + /// + /// In other words, if `direction` is normalized, then `near` and `far` are + /// the distances to the nearest and furthest intersection points. + pub fn ray_intersection(self, origin: DVec3, direction: DVec3) -> Option<[f64; 2]> { + let mut near: f64 = 0.0; + let mut far = f64::INFINITY; + + for i in 0..3 { + // Rust's definition of `min` and `max` properly handle the NaNs these + // computations may produce. + let t0 = (self.min[i] - origin[i]) / direction[i]; + let t1 = (self.max[i] - origin[i]) / direction[i]; + + near = near.max(t0.min(t1)); + far = far.min(t0.max(t1)); + } + + if near <= far { Some([near, far]) } else { None } + } +} + +impl Add for Aabb { + type Output = Aabb; + + fn add(self, rhs: DVec3) -> Self::Output { + Self::new(self.min + rhs, self.max + rhs) + } +} + +impl Add for DVec3 { + type Output = Aabb; + + fn add(self, rhs: Aabb) -> Self::Output { + rhs + self + } +} + +impl Sub for Aabb { + type Output = Aabb; + + fn sub(self, rhs: DVec3) -> Self::Output { + Self::new(self.min - rhs, self.max - rhs) + } +} + +impl Sub for DVec3 { + type Output = Aabb; + + fn sub(self, rhs: Aabb) -> Self::Output { + rhs - self + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ray_intersect_edge_cases() { + let bb = Aabb::new([0.0, 0.0, 0.0].into(), [1.0, 1.0, 1.0].into()); + + let ros = [ + // On a corner + DVec3::new(0.0, 0.0, 0.0), + // Outside + DVec3::new(-0.5, 0.5, -0.5), + // In the center + DVec3::new(0.5, 0.5, 0.5), + // On an edge + DVec3::new(0.0, 0.5, 0.0), + // On a face + DVec3::new(0.0, 0.5, 0.5), + // Outside slabs + DVec3::new(-2.0, -2.0, -2.0), + ]; + + let rds = [ + DVec3::new(1.0, 0.0, 0.0), + DVec3::new(-1.0, 0.0, 0.0), + DVec3::new(0.0, 1.0, 0.0), + DVec3::new(0.0, -1.0, 0.0), + DVec3::new(0.0, 0.0, 1.0), + DVec3::new(0.0, 0.0, -1.0), + ]; + + assert!(rds.iter().all(|d| d.is_normalized())); + + for ro in ros { + for rd in rds { + if let Some([near, far]) = bb.ray_intersection(ro, rd) { + assert!(near.is_finite()); + assert!(far.is_finite()); + assert!(near <= far); + assert!(near >= 0.0); + assert!(far >= 0.0); + } + } + } + } +} diff --git a/vendor/valence/crates/valence_math/src/lib.rs b/vendor/valence/crates/valence_math/src/lib.rs new file mode 100644 index 00000000..bf3db2c0 --- /dev/null +++ b/vendor/valence/crates/valence_math/src/lib.rs @@ -0,0 +1,6 @@ +#![doc = include_str!("../README.md")] + +mod aabb; + +pub use aabb::Aabb; +pub use glam::*; diff --git a/vendor/valence/crates/valence_nbt/Cargo.toml b/vendor/valence/crates/valence_nbt/Cargo.toml new file mode 100644 index 00000000..3c60fd03 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "valence_nbt" +description = "Minecraft's Named Binary Tag (NBT) format." +readme = "README.md" +documentation = "https://docs.rs/valence_nbt/" +license.workspace = true +keywords = ["nbt", "minecraft", "serialization"] +version = "0.8.0" +edition.workspace = true +repository.workspace = true + +[features] +binary = ["dep:byteorder", "dep:cesu8"] +java_string = ["dep:java_string"] +snbt = [] +# When enabled, the order of fields in compounds are preserved. +preserve_order = ["dep:indexmap"] +serde = ["dep:serde", "dep:thiserror", "indexmap?/serde"] + +[dependencies] +byteorder = { workspace = true, optional = true } +cesu8 = { workspace = true, optional = true } +indexmap = { workspace = true, optional = true } +java_string = { workspace = true, optional = true } +serde = { workspace = true, features = ["derive"], optional = true } +thiserror = { workspace = true, optional = true } +uuid = { workspace = true, optional = true } +valence_ident = { workspace = true, optional = true } + +[dev-dependencies] +pretty_assertions.workspace = true +serde_json.workspace = true diff --git a/vendor/valence/crates/valence_nbt/README.md b/vendor/valence/crates/valence_nbt/README.md new file mode 100644 index 00000000..8e930ea9 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/README.md @@ -0,0 +1,14 @@ +# valence_nbt + +A library for encoding and decoding Minecraft's [Named Binary Tag] (NBT) +format. + +[Named Binary Tag]: https://minecraft.wiki/w/NBT_format + +# Features +- `binary`: Adds support for serializing and deserializing in Java edition's binary format. +- `snbt`: Adds support for serializing and deserializing in "stringified" format. +- `preserve_order`: Causes the order of fields in [`Compound`]s to be + preserved during insertion and deletion at a slight cost to performance. + The iterators on `Compound` can then implement [`DoubleEndedIterator`]. +- `serde` Adds support for [`serde`](https://docs.rs/serde/latest/serde/) diff --git a/vendor/valence/crates/valence_nbt/src/binary.rs b/vendor/valence/crates/valence_nbt/src/binary.rs new file mode 100644 index 00000000..fca76ab4 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary.rs @@ -0,0 +1,73 @@ +//! Support for serializing and deserializing compounds in Java edition's binary +//! format. +//! +//! # Examples +//! +//! ``` +//! use valence_nbt::{Compound, List, compound, to_binary}; +//! +//! let c = compound! { +//! "byte" => 5_i8, +//! "string" => "hello", +//! "list_of_float" => List::Float(vec![ +//! 3.1415, +//! 2.7182, +//! 1.4142 +//! ]), +//! }; +//! +//! let mut buf = vec![]; +//! +//! to_binary(&c, &mut buf, "").unwrap(); +//! ``` +//! +//! Decode NBT data from its binary form. +//! +//! ``` +//! use valence_nbt::{Compound, compound, from_binary}; +//! +//! let some_bytes = [10, 0, 0, 3, 0, 3, 105, 110, 116, 0, 0, 222, 173, 0]; +//! +//! let expected_value = compound! { +//! "int" => 0xdead +//! }; +//! +//! let (nbt, root_name) = from_binary(&mut some_bytes.as_slice()).unwrap(); +//! +//! assert_eq!(nbt, expected_value); +//! assert_eq!(root_name, ""); +//! ``` + +mod decode; +mod encode; +mod error; +mod modified_utf8; +#[cfg(test)] +mod tests; + +pub use decode::{FromModifiedUtf8, FromModifiedUtf8Error, from_binary}; +pub use encode::{ToModifiedUtf8, to_binary, written_size}; +pub use error::*; + +use crate::Tag; + +impl Tag { + /// Returns the name of this tag for error reporting purposes. + const fn name(self) -> &'static str { + match self { + Tag::End => "end", + Tag::Byte => "byte", + Tag::Short => "short", + Tag::Int => "int", + Tag::Long => "long", + Tag::Float => "float", + Tag::Double => "double", + Tag::ByteArray => "byte array", + Tag::String => "string", + Tag::List => "list", + Tag::Compound => "compound", + Tag::IntArray => "int array", + Tag::LongArray => "long array", + } + } +} diff --git a/vendor/valence/crates/valence_nbt/src/binary/decode.rs b/vendor/valence/crates/valence_nbt/src/binary/decode.rs new file mode 100644 index 00000000..60713208 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary/decode.rs @@ -0,0 +1,373 @@ +use std::borrow::Cow; +use std::hash::Hash; +use std::{fmt, mem}; + +use byteorder::{BigEndian, ReadBytesExt}; + +use super::{Error, Result}; +use crate::tag::Tag; +use crate::{Compound, List, Value}; + +/// Decodes uncompressed NBT binary data from the provided slice. +/// +/// The string returned in the tuple is the name of the root compound +/// (typically the empty string). +pub fn from_binary<'de, S>(slice: &mut &'de [u8]) -> Result<(Compound, S)> +where + S: FromModifiedUtf8<'de> + Hash + Ord, +{ + let mut state = DecodeState { slice, depth: 0 }; + + let root_tag = state.read_tag()?; + + if root_tag != Tag::Compound { + return Err(Error::new_owned(format!( + "expected root tag for compound (got {})", + root_tag.name(), + ))); + } + + let root_name = state.read_string::()?; + let root = state.read_compound()?; + + debug_assert_eq!(state.depth, 0); + + Ok((root, root_name)) +} + +/// Maximum recursion depth to prevent overflowing the call stack. +const MAX_DEPTH: usize = 512; + +struct DecodeState<'a, 'de> { + slice: &'a mut &'de [u8], + /// Current recursion depth. + depth: usize, +} + +impl<'de> DecodeState<'_, 'de> { + #[inline] + fn check_depth(&mut self, f: impl FnOnce(&mut Self) -> Result) -> Result { + if self.depth >= MAX_DEPTH { + return Err(Error::new_static("reached maximum recursion depth")); + } + + self.depth += 1; + let res = f(self); + self.depth -= 1; + res + } + + fn read_tag(&mut self) -> Result { + match self.slice.read_u8()? { + 0 => Ok(Tag::End), + 1 => Ok(Tag::Byte), + 2 => Ok(Tag::Short), + 3 => Ok(Tag::Int), + 4 => Ok(Tag::Long), + 5 => Ok(Tag::Float), + 6 => Ok(Tag::Double), + 7 => Ok(Tag::ByteArray), + 8 => Ok(Tag::String), + 9 => Ok(Tag::List), + 10 => Ok(Tag::Compound), + 11 => Ok(Tag::IntArray), + 12 => Ok(Tag::LongArray), + byte => Err(Error::new_owned(format!("invalid tag byte of {byte:#x}"))), + } + } + + fn read_value(&mut self, tag: Tag) -> Result> + where + S: FromModifiedUtf8<'de> + Hash + Ord, + { + match tag { + Tag::End => unreachable!("illegal TAG_End argument"), + Tag::Byte => Ok(self.read_byte()?.into()), + Tag::Short => Ok(self.read_short()?.into()), + Tag::Int => Ok(self.read_int()?.into()), + Tag::Long => Ok(self.read_long()?.into()), + Tag::Float => Ok(self.read_float()?.into()), + Tag::Double => Ok(self.read_double()?.into()), + Tag::ByteArray => Ok(self.read_byte_array()?.into()), + Tag::String => Ok(Value::String(self.read_string::()?)), + Tag::List => self.check_depth(|st| Ok(st.read_any_list::()?.into())), + Tag::Compound => self.check_depth(|st| Ok(st.read_compound::()?.into())), + Tag::IntArray => Ok(self.read_int_array()?.into()), + Tag::LongArray => Ok(self.read_long_array()?.into()), + } + } + + fn read_byte(&mut self) -> Result { + Ok(self.slice.read_i8()?) + } + + fn read_short(&mut self) -> Result { + Ok(self.slice.read_i16::()?) + } + + fn read_int(&mut self) -> Result { + Ok(self.slice.read_i32::()?) + } + + fn read_long(&mut self) -> Result { + Ok(self.slice.read_i64::()?) + } + + fn read_float(&mut self) -> Result { + Ok(self.slice.read_f32::()?) + } + + fn read_double(&mut self) -> Result { + Ok(self.slice.read_f64::()?) + } + + fn read_byte_array(&mut self) -> Result> { + let len = self.slice.read_i32::()?; + + if len.is_negative() { + return Err(Error::new_owned(format!( + "negative byte array length of {len}" + ))); + } + + if len as usize > self.slice.len() { + return Err(Error::new_owned(format!( + "byte array length of {len} exceeds remainder of input" + ))); + } + + let (left, right) = self.slice.split_at(len as usize); + + let array = left.iter().map(|b| *b as i8).collect(); + *self.slice = right; + + Ok(array) + } + + fn read_string(&mut self) -> Result + where + S: FromModifiedUtf8<'de>, + { + let len = self.slice.read_u16::()?.into(); + + if len > self.slice.len() { + return Err(Error::new_owned(format!( + "string of length {len} exceeds remainder of input" + ))); + } + + let (left, right) = self.slice.split_at(len); + + match S::from_modified_utf8(left) { + Ok(str) => { + *self.slice = right; + Ok(str) + } + Err(_) => Err(Error::new_static("could not decode modified UTF-8 data")), + } + } + + fn read_any_list(&mut self) -> Result> + where + S: FromModifiedUtf8<'de> + Hash + Ord, + { + match self.read_tag()? { + Tag::End => match self.read_int()? { + 0 => Ok(List::End), + len => Err(Error::new_owned(format!( + "TAG_End list with nonzero length of {len}" + ))), + }, + Tag::Byte => Ok(self.read_list(Tag::Byte, 1, |st| st.read_byte())?.into()), + Tag::Short => Ok(self.read_list(Tag::Short, 2, |st| st.read_short())?.into()), + Tag::Int => Ok(self.read_list(Tag::Int, 4, |st| st.read_int())?.into()), + Tag::Long => Ok(self.read_list(Tag::Long, 8, |st| st.read_long())?.into()), + Tag::Float => Ok(self.read_list(Tag::Float, 4, |st| st.read_float())?.into()), + Tag::Double => Ok(self + .read_list(Tag::Double, 8, |st| st.read_double())? + .into()), + Tag::ByteArray => Ok(self + .read_list(Tag::ByteArray, 0, |st| st.read_byte_array())? + .into()), + Tag::String => Ok(List::String( + self.read_list(Tag::String, 0, |st| st.read_string::())?, + )), + Tag::List => self.check_depth(|st| { + Ok(st + .read_list(Tag::List, 0, |st| st.read_any_list::())? + .into()) + }), + Tag::Compound => self.check_depth(|st| { + Ok(st + .read_list(Tag::Compound, 0, |st| st.read_compound::())? + .into()) + }), + Tag::IntArray => Ok(self + .read_list(Tag::IntArray, 0, |st| st.read_int_array())? + .into()), + Tag::LongArray => Ok(self + .read_list(Tag::LongArray, 0, |st| st.read_long_array())? + .into()), + } + } + + /// Assumes the element tag has already been read. + /// + /// `min_elem_size` is the minimum size of the list element when encoded. + #[inline] + fn read_list( + &mut self, + elem_type: Tag, + elem_size: usize, + mut read_elem: F, + ) -> Result> + where + F: FnMut(&mut Self) -> Result, + { + let len = self.read_int()?; + + if len.is_negative() { + return Err(Error::new_owned(format!( + "negative {} list length of {len}", + elem_type.name() + ))); + } + + // Ensure we don't reserve more than the maximum amount of memory required given + // the size of the remaining input. + if len as u64 * elem_size as u64 > self.slice.len() as u64 { + return Err(Error::new_owned(format!( + "{} list of length {len} exceeds remainder of input", + elem_type.name() + ))); + } + + let mut list = Vec::with_capacity(if elem_size == 0 { 0 } else { len as usize }); + + for _ in 0..len { + list.push(read_elem(self)?); + } + + Ok(list) + } + + fn read_compound(&mut self) -> Result> + where + S: FromModifiedUtf8<'de> + Hash + Ord, + { + let mut compound = Compound::new(); + + loop { + let tag = self.read_tag()?; + if tag == Tag::End { + return Ok(compound); + } + + compound.insert(self.read_string::()?, self.read_value::(tag)?); + } + } + + fn read_int_array(&mut self) -> Result> { + let len = self.read_int()?; + + if len.is_negative() { + return Err(Error::new_owned(format!( + "negative int array length of {len}", + ))); + } + + if len as u64 * mem::size_of::() as u64 > self.slice.len() as u64 { + return Err(Error::new_owned(format!( + "int array of length {len} exceeds remainder of input" + ))); + } + + let mut array = Vec::with_capacity(len as usize); + for _ in 0..len { + array.push(self.read_int()?); + } + + Ok(array) + } + + fn read_long_array(&mut self) -> Result> { + let len = self.read_int()?; + + if len.is_negative() { + return Err(Error::new_owned(format!( + "negative long array length of {len}", + ))); + } + + if len as u64 * mem::size_of::() as u64 > self.slice.len() as u64 { + return Err(Error::new_owned(format!( + "long array of length {len} exceeds remainder of input" + ))); + } + + let mut array = Vec::with_capacity(len as usize); + for _ in 0..len { + array.push(self.read_long()?); + } + + Ok(array) + } +} + +#[derive(Copy, Clone, Debug)] +pub struct FromModifiedUtf8Error; + +impl fmt::Display for FromModifiedUtf8Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str("could not decode modified UTF-8 data") + } +} + +impl std::error::Error for FromModifiedUtf8Error {} + +/// A string type which can be decoded from Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8). +pub trait FromModifiedUtf8<'de>: Sized { + fn from_modified_utf8( + modified_utf8: &'de [u8], + ) -> std::result::Result; +} + +impl<'de> FromModifiedUtf8<'de> for Cow<'de, str> { + fn from_modified_utf8( + modified_utf8: &'de [u8], + ) -> std::result::Result { + cesu8::from_java_cesu8(modified_utf8).map_err(move |_| FromModifiedUtf8Error) + } +} + +impl<'de> FromModifiedUtf8<'de> for String { + fn from_modified_utf8( + modified_utf8: &'de [u8], + ) -> std::result::Result { + match cesu8::from_java_cesu8(modified_utf8) { + Ok(str) => Ok(str.into_owned()), + Err(_) => Err(FromModifiedUtf8Error), + } + } +} + +#[cfg(feature = "java_string")] +impl<'de> FromModifiedUtf8<'de> for Cow<'de, java_string::JavaStr> { + fn from_modified_utf8( + modified_utf8: &'de [u8], + ) -> std::result::Result { + java_string::JavaStr::from_modified_utf8(modified_utf8).map_err(|_| FromModifiedUtf8Error) + } +} + +#[cfg(feature = "java_string")] +impl<'de> FromModifiedUtf8<'de> for java_string::JavaString { + fn from_modified_utf8( + modified_utf8: &'de [u8], + ) -> std::result::Result { + match java_string::JavaStr::from_modified_utf8(modified_utf8) { + Ok(str) => Ok(str.into_owned()), + Err(_) => Err(FromModifiedUtf8Error), + } + } +} diff --git a/vendor/valence/crates/valence_nbt/src/binary/encode.rs b/vendor/valence/crates/valence_nbt/src/binary/encode.rs new file mode 100644 index 00000000..dbbc61c2 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary/encode.rs @@ -0,0 +1,391 @@ +use std::borrow::Cow; +use std::hash::Hash; +use std::io::Write; + +use byteorder::{BigEndian, WriteBytesExt}; + +use super::{Error, Result, modified_utf8}; +use crate::conv::i8_slice_as_u8_slice; +use crate::tag::Tag; +use crate::{Compound, List, Value}; + +/// Encodes uncompressed NBT binary data to the provided writer. +/// +/// Only compounds are permitted at the top level. This is why the function +/// accepts a [`Compound`] reference rather than a [`Value`]. +/// +/// Additionally, the root compound can be given a name. Typically the empty +/// string `""` is used. +pub fn to_binary(comp: &Compound, writer: W, root_name: &R) -> Result<()> +where + W: Write, + S: ToModifiedUtf8 + Hash + Ord, + R: ToModifiedUtf8 + ?Sized, +{ + let mut state = EncodeState { writer }; + + state.write_tag(Tag::Compound)?; + state.write_string(root_name)?; + state.write_compound(comp)?; + + Ok(()) +} + +/// Returns the number of bytes that will be written when +/// [`to_binary`] is called with this compound and root name. +/// +/// If `to_binary` results in `Ok`, the exact number of bytes +/// reported by this function will have been written. If the result is +/// `Err`, then the reported count will be greater than or equal to the +/// number of bytes that have actually been written. +pub fn written_size(comp: &Compound, root_name: &R) -> usize +where + S: ToModifiedUtf8 + Hash + Ord, + R: ToModifiedUtf8 + ?Sized, +{ + fn value_size(val: &Value) -> usize + where + S: ToModifiedUtf8 + Hash + Ord, + { + match val { + Value::Byte(_) => 1, + Value::Short(_) => 2, + Value::Int(_) => 4, + Value::Long(_) => 8, + Value::Float(_) => 4, + Value::Double(_) => 8, + Value::ByteArray(v) => 4 + v.len(), + Value::String(v) => string_size(v), + Value::List(v) => list_size(v), + Value::Compound(v) => compound_size(v), + Value::IntArray(v) => 4 + v.len() * 4, + Value::LongArray(v) => 4 + v.len() * 8, + } + } + + fn list_size(l: &List) -> usize + where + S: ToModifiedUtf8 + Hash + Ord, + { + let elems_size = match l { + List::End => 0, + List::Byte(v) => v.len(), + List::Short(v) => v.len() * 2, + List::Int(v) => v.len() * 4, + List::Long(v) => v.len() * 8, + List::Float(v) => v.len() * 4, + List::Double(v) => v.len() * 8, + List::ByteArray(v) => v.iter().map(|b| 4 + b.len()).sum(), + List::String(v) => v.iter().map(|s| string_size(s)).sum(), + List::List(v) => v.iter().map(list_size).sum(), + List::Compound(v) => v.iter().map(compound_size).sum(), + List::IntArray(v) => v.iter().map(|i| 4 + i.len() * 4).sum(), + List::LongArray(v) => v.iter().map(|l| 4 + l.len() * 8).sum(), + }; + + 1 + 4 + elems_size + } + + fn string_size(s: &S) -> usize { + 2 + s.modified_uf8_len() + } + + fn compound_size(c: &Compound) -> usize + where + S: ToModifiedUtf8 + Hash + Ord, + { + c.iter() + .map(|(k, v)| 1 + string_size(k) + value_size(v)) + .sum::() + + 1 + } + + 1 + string_size(root_name) + compound_size(comp) +} + +struct EncodeState { + writer: W, +} + +impl EncodeState { + fn write_tag(&mut self, tag: Tag) -> Result<()> { + Ok(self.writer.write_u8(tag as u8)?) + } + + fn write_value(&mut self, v: &Value) -> Result<()> + where + S: ToModifiedUtf8 + Hash + Ord, + { + match v { + Value::Byte(v) => self.write_byte(*v), + Value::Short(v) => self.write_short(*v), + Value::Int(v) => self.write_int(*v), + Value::Long(v) => self.write_long(*v), + Value::Float(v) => self.write_float(*v), + Value::Double(v) => self.write_double(*v), + Value::ByteArray(v) => self.write_byte_array(v), + Value::String(v) => self.write_string(v), + Value::List(v) => self.write_any_list(v), + Value::Compound(v) => self.write_compound(v), + Value::IntArray(v) => self.write_int_array(v), + Value::LongArray(v) => self.write_long_array(v), + } + } + + fn write_byte(&mut self, byte: i8) -> Result<()> { + Ok(self.writer.write_i8(byte)?) + } + + fn write_short(&mut self, short: i16) -> Result<()> { + Ok(self.writer.write_i16::(short)?) + } + + fn write_int(&mut self, int: i32) -> Result<()> { + Ok(self.writer.write_i32::(int)?) + } + + fn write_long(&mut self, long: i64) -> Result<()> { + Ok(self.writer.write_i64::(long)?) + } + + fn write_float(&mut self, float: f32) -> Result<()> { + Ok(self.writer.write_f32::(float)?) + } + + fn write_double(&mut self, double: f64) -> Result<()> { + Ok(self.writer.write_f64::(double)?) + } + + fn write_byte_array(&mut self, bytes: &[i8]) -> Result<()> { + match bytes.len().try_into() { + Ok(len) => self.write_int(len)?, + Err(_) => { + return Err(Error::new_owned(format!( + "byte array of length {} exceeds maximum of i32::MAX", + bytes.len(), + ))); + } + } + + Ok(self.writer.write_all(i8_slice_as_u8_slice(bytes))?) + } + + fn write_string(&mut self, s: &S) -> Result<()> { + let len = s.modified_uf8_len(); + + match len.try_into() { + Ok(n) => self.writer.write_u16::(n)?, + Err(_) => { + return Err(Error::new_owned(format!( + "string of length {len} exceeds maximum of u16::MAX" + ))); + } + } + + s.to_modified_utf8(len, &mut self.writer)?; + + Ok(()) + } + + fn write_any_list(&mut self, list: &List) -> Result<()> + where + S: ToModifiedUtf8 + Hash + Ord, + { + match list { + List::End => { + self.write_tag(Tag::End)?; + // Length + self.writer.write_i32::(0)?; + Ok(()) + } + List::Byte(v) => { + self.write_tag(Tag::Byte)?; + + match v.len().try_into() { + Ok(len) => self.write_int(len)?, + Err(_) => { + return Err(Error::new_owned(format!( + "byte list of length {} exceeds maximum of i32::MAX", + v.len(), + ))); + } + } + + Ok(self.writer.write_all(i8_slice_as_u8_slice(v))?) + } + List::Short(sl) => self.write_list(sl, Tag::Short, |st, v| st.write_short(*v)), + List::Int(il) => self.write_list(il, Tag::Int, |st, v| st.write_int(*v)), + List::Long(ll) => self.write_list(ll, Tag::Long, |st, v| st.write_long(*v)), + List::Float(fl) => self.write_list(fl, Tag::Float, |st, v| st.write_float(*v)), + List::Double(dl) => self.write_list(dl, Tag::Double, |st, v| st.write_double(*v)), + List::ByteArray(v) => { + self.write_list(v, Tag::ByteArray, |st, v| st.write_byte_array(v)) + } + List::String(v) => self.write_list(v, Tag::String, |st, v| st.write_string(v)), + List::List(v) => self.write_list(v, Tag::List, |st, v| st.write_any_list(v)), + List::Compound(v) => self.write_list(v, Tag::Compound, |st, v| st.write_compound(v)), + List::IntArray(v) => self.write_list(v, Tag::IntArray, |st, v| st.write_int_array(v)), + List::LongArray(v) => { + self.write_list(v, Tag::LongArray, |st, v| st.write_long_array(v)) + } + } + } + + fn write_list(&mut self, list: &[T], elem_type: Tag, mut write_elem: F) -> Result<()> + where + F: FnMut(&mut Self, &T) -> Result<()>, + { + self.write_tag(elem_type)?; + + match list.len().try_into() { + Ok(len) => self.writer.write_i32::(len)?, + Err(_) => { + return Err(Error::new_owned(format!( + "{} list of length {} exceeds maximum of i32::MAX", + list.len(), + elem_type.name() + ))); + } + } + + for elem in list { + write_elem(self, elem)?; + } + + Ok(()) + } + + fn write_compound(&mut self, c: &Compound) -> Result<()> + where + S: ToModifiedUtf8 + Hash + Ord, + { + for (k, v) in c.iter() { + self.write_tag(v.tag())?; + self.write_string(k)?; + self.write_value(v)?; + } + self.write_tag(Tag::End)?; + + Ok(()) + } + + fn write_int_array(&mut self, ia: &[i32]) -> Result<()> { + match ia.len().try_into() { + Ok(len) => self.write_int(len)?, + Err(_) => { + return Err(Error::new_owned(format!( + "int array of length {} exceeds maximum of i32::MAX", + ia.len(), + ))); + } + } + + for i in ia { + self.write_int(*i)?; + } + + Ok(()) + } + + fn write_long_array(&mut self, la: &[i64]) -> Result<()> { + match la.len().try_into() { + Ok(len) => self.write_int(len)?, + Err(_) => { + return Err(Error::new_owned(format!( + "long array of length {} exceeds maximum of i32::MAX", + la.len(), + ))); + } + } + + for l in la { + self.write_long(*l)?; + } + + Ok(()) + } +} + +/// A string type which can be encoded into Java's [modified UTF-8](https://docs.oracle.com/javase/8/docs/api/java/io/DataInput.html#modified-utf-8). +pub trait ToModifiedUtf8 { + fn modified_uf8_len(&self) -> usize; + fn to_modified_utf8(&self, encoded_len: usize, writer: W) -> std::io::Result<()>; +} + +impl ToModifiedUtf8 for str { + fn modified_uf8_len(&self) -> usize { + modified_utf8::encoded_len(self.as_bytes()) + } + + fn to_modified_utf8(&self, encoded_len: usize, mut writer: W) -> std::io::Result<()> { + // Conversion to modified UTF-8 always increases the size of the string. + // If the new len is equal to the original len, we know it doesn't need + // to be re-encoded. + if self.len() == encoded_len { + writer.write_all(self.as_bytes()) + } else { + modified_utf8::write_modified_utf8(writer, self) + } + } +} + +impl ToModifiedUtf8 for Cow<'_, str> { + #[inline] + fn modified_uf8_len(&self) -> usize { + str::modified_uf8_len(self) + } + + fn to_modified_utf8(&self, encoded_len: usize, writer: W) -> std::io::Result<()> { + str::to_modified_utf8(self, encoded_len, writer) + } +} + +impl ToModifiedUtf8 for String { + #[inline] + fn modified_uf8_len(&self) -> usize { + str::modified_uf8_len(self) + } + + fn to_modified_utf8(&self, encoded_len: usize, writer: W) -> std::io::Result<()> { + str::to_modified_utf8(self, encoded_len, writer) + } +} + +#[cfg(feature = "java_string")] +impl ToModifiedUtf8 for java_string::JavaStr { + fn modified_uf8_len(&self) -> usize { + modified_utf8::encoded_len(self.as_bytes()) + } + + fn to_modified_utf8( + &self, + _encoded_len: usize, + mut writer: W, + ) -> std::io::Result<()> { + writer.write_all(&self.to_modified_utf8()) + } +} + +#[cfg(feature = "java_string")] +impl ToModifiedUtf8 for Cow<'_, java_string::JavaStr> { + #[inline] + fn modified_uf8_len(&self) -> usize { + java_string::JavaStr::modified_uf8_len(self) + } + + fn to_modified_utf8(&self, encoded_len: usize, writer: W) -> std::io::Result<()> { + ::to_modified_utf8(self, encoded_len, writer) + } +} + +#[cfg(feature = "java_string")] +impl ToModifiedUtf8 for java_string::JavaString { + #[inline] + fn modified_uf8_len(&self) -> usize { + java_string::JavaStr::modified_uf8_len(self) + } + + fn to_modified_utf8(&self, encoded_len: usize, writer: W) -> std::io::Result<()> { + ::to_modified_utf8(self, encoded_len, writer) + } +} diff --git a/vendor/valence/crates/valence_nbt/src/binary/error.rs b/vendor/valence/crates/valence_nbt/src/binary/error.rs new file mode 100644 index 00000000..8c5c4efa --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary/error.rs @@ -0,0 +1,61 @@ +use std::error::Error as StdError; +use std::fmt::{Display, Formatter}; +use std::io; + +pub type Result = std::result::Result; + +/// Errors that can occur when encoding or decoding binary NBT. +#[derive(Debug)] +pub struct Error { + /// Box this to keep the size of `Result` small. + cause: Box, +} + +#[derive(Debug)] +enum Cause { + Io(io::Error), + Owned(Box), + Static(&'static str), +} + +impl Error { + pub(crate) fn new_owned(msg: impl Into>) -> Self { + Self { + cause: Box::new(Cause::Owned(msg.into())), + } + } + + pub(crate) fn new_static(msg: &'static str) -> Self { + Self { + cause: Box::new(Cause::Static(msg)), + } + } +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match &*self.cause { + Cause::Io(e) => e.fmt(f), + Cause::Owned(msg) => write!(f, "{msg}"), + Cause::Static(msg) => write!(f, "{msg}"), + } + } +} + +impl StdError for Error { + fn source(&self) -> Option<&(dyn StdError + 'static)> { + match &*self.cause { + Cause::Io(e) => Some(e), + Cause::Owned(_) => None, + Cause::Static(_) => None, + } + } +} + +impl From for Error { + fn from(e: io::Error) -> Self { + Self { + cause: Box::new(Cause::Io(e)), + } + } +} diff --git a/vendor/valence/crates/valence_nbt/src/binary/modified_utf8.rs b/vendor/valence/crates/valence_nbt/src/binary/modified_utf8.rs new file mode 100644 index 00000000..491745de --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary/modified_utf8.rs @@ -0,0 +1,127 @@ +//! Utilities for working with Java's "Modified UTF-8" character encoding. +//! +//! For more information, refer to [Wikipedia]. +//! +//! [Wikipedia]: https://en.wikipedia.org/wiki/UTF-8#Modified_UTF-8 + +use std::io; +use std::io::Write; +use std::str::from_utf8_unchecked; + +use byteorder::{BigEndian, WriteBytesExt}; + +pub(crate) fn write_modified_utf8(mut writer: impl Write, text: &str) -> io::Result<()> { + let bytes = text.as_bytes(); + let mut i = 0; + + while i < bytes.len() { + match bytes[i] { + 0 => { + writer.write_u16::(0xc080)?; + i += 1; + } + b @ 1..=127 => { + writer.write_u8(b)?; + i += 1; + } + b => { + let w = utf8_char_width(b); + debug_assert!(w <= 4); + debug_assert!(i + w <= bytes.len()); + + if w != 4 { + writer.write_all(&bytes[i..i + w])?; + } else { + let s = unsafe { from_utf8_unchecked(&bytes[i..i + w]) }; + let c = s.chars().next().unwrap() as u32 - 0x10000; + + let s0 = ((c >> 10) as u16) | 0xd800; + let s1 = ((c & 0x3ff) as u16) | 0xdc00; + + writer.write_all(encode_surrogate(s0).as_slice())?; + writer.write_all(encode_surrogate(s1).as_slice())?; + } + i += w; + } + } + } + + Ok(()) +} + +const fn utf8_char_width(first_byte: u8) -> usize { + const UTF8_CHAR_WIDTH: [u8; 256] = [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + ]; + + UTF8_CHAR_WIDTH[first_byte as usize] as _ +} + +fn encode_surrogate(surrogate: u16) -> [u8; 3] { + debug_assert!((0xd800..=0xdfff).contains(&surrogate)); + + const TAG_CONT_U8: u8 = 0b1000_0000u8; + [ + 0b11100000 | ((surrogate & 0b11110000_00000000) >> 12) as u8, + TAG_CONT_U8 | ((surrogate & 0b00001111_11000000) >> 6) as u8, + TAG_CONT_U8 | (surrogate & 0b00000000_00111111) as u8, + ] +} + +pub(crate) fn encoded_len(bytes: &[u8]) -> usize { + let mut n = 0; + let mut i = 0; + + while i < bytes.len() { + match bytes[i] { + // Fast path for ASCII here makes a huge difference in benchmarks. + 1..=127 => { + n += 1; + i += 1; + } + 0 => { + n += 2; + i += 1; + } + b => { + let w = utf8_char_width(b); + + if w == 4 { + n += 6; + } else { + n += w; + } + + i += w; + } + } + } + + n +} + +#[cfg(test)] +#[test] +fn equivalence() { + fn check(s: &str) { + let mut ours = vec![]; + + let theirs = cesu8::to_java_cesu8(s); + write_modified_utf8(&mut ours, s).unwrap(); + + assert_eq!(theirs, ours); + assert_eq!(theirs.len(), encoded_len(s.as_bytes())); + } + + check("Mary had a little lamb\0"); + check("🤡💩👻💀☠👽👾🤖🎃😺😸😹😻😼😽🙀😿😾"); + check("ÅÆÇÈØõ÷£¥ý"); +} diff --git a/vendor/valence/crates/valence_nbt/src/binary/tests.rs b/vendor/valence/crates/valence_nbt/src/binary/tests.rs new file mode 100644 index 00000000..98494d0a --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/binary/tests.rs @@ -0,0 +1,131 @@ +use crate::binary::written_size; +use crate::tag::Tag; +use crate::{Compound, List, Value, compound, from_binary, to_binary}; + +const ROOT_NAME: &str = "The root name‽"; + +#[test] +fn round_trip() { + let mut buf = vec![]; + + let compound = example_compound(); + + to_binary(&compound, &mut buf, ROOT_NAME).unwrap(); + + println!("{buf:?}"); + + let (decoded, root_name) = crate::from_binary(&mut buf.as_slice()).unwrap(); + + assert_eq!(root_name, ROOT_NAME); + assert_eq!(compound, decoded); +} + +#[test] +fn check_min_sizes() { + fn check(min_val: Value, expected_size: usize) { + /// TAG_Compound + root name + field tag + field name + TAG_End + const COMPOUND_OVERHEAD: usize = 1 + 2 + 1 + 2 + 1; + + let dbg = format!("{min_val:?}"); + let mut buf = vec![]; + + to_binary(&compound!("" => min_val), &mut buf, "").unwrap(); + + assert_eq!( + expected_size, + buf.len() - COMPOUND_OVERHEAD, + "size mismatch for {dbg}" + ); + } + + check(Value::Byte(0), 1); + check(Value::Short(0), 2); + check(Value::Int(0), 4); + check(Value::Long(0), 8); + check(Value::Float(0.0), 4); + check(Value::Double(0.0), 8); + check(Value::ByteArray([].into()), 4); + check(Value::String("".into()), 2); + check(Value::List(Vec::::new().into()), 5); + check(Value::Compound(compound!()), 1); + check(Value::IntArray([].into()), 4); + check(Value::LongArray([].into()), 4); +} + +#[test] +fn deeply_nested_compound_decode() { + let mut buf = vec![Tag::Compound as u8, 0, 0]; // Root compound + let n = 10_000; + + for _ in 0..n { + buf.extend([Tag::Compound as u8, 0, 0]); + } + + buf.extend((0..n).map(|_| Tag::End as u8)); + + buf.push(Tag::End as u8); // End root compound + + // Should not overflow the stack + let _ = from_binary::(&mut buf.as_slice()); +} + +#[test] +fn deeply_nested_list_decode() { + // Root compound with one field. + let mut buf = vec![Tag::Compound as u8, 0, 0, Tag::List as u8, 0, 0]; + let n = 10_000; + + for _ in 0..n - 1 { + buf.extend([Tag::List as u8, 0, 0, 0, 1]); // List of list + } + + // Last list is an empty list of bytes. + buf.extend([Tag::Byte as u8, 0, 0, 0, 0]); + + buf.push(Tag::End as u8); // End root compound + + // Should not overflow the stack + let _ = from_binary::(&mut buf.as_slice()); +} + +#[test] +fn correct_length() { + let c = example_compound(); + + let mut buf = vec![]; + to_binary(&c, &mut buf, "abc").unwrap(); + + assert_eq!(written_size(&c, "abc"), buf.len()); +} + +fn example_compound() -> Compound { + fn inner() -> Compound { + compound! { + "int" => i32::MIN, + "long" => i64::MAX, + "float" => 1e10_f32, + "double" => f64::INFINITY, + } + } + + compound! { + "byte" => 123_i8, + "list_of_int" => List::Int(vec![3, -7, 5]), + "list_of_string" => List::String(vec![ + "foo".to_owned(), + "bar".to_owned(), + "baz".to_owned() + ]), + "list_of_end" => List::End, + "string" => "aé日", + "compound" => inner(), + "list_of_compound" => List::Compound(vec![ + inner(), + inner(), + inner(), + ]), + "int_array" => vec![5, -9, i32::MIN, 0, i32::MAX], + "byte_array" => vec![0_i8, 2, 3], + "long_array" => vec![123_i64, 456, 789], + } +} diff --git a/vendor/valence/crates/valence_nbt/src/compound.rs b/vendor/valence/crates/valence_nbt/src/compound.rs new file mode 100644 index 00000000..61cff4c5 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/compound.rs @@ -0,0 +1,688 @@ +use std::borrow::{Borrow, Cow}; +use std::fmt; +use std::hash::Hash; +use std::iter::FusedIterator; +use std::ops::{Index, IndexMut}; + +use crate::Value; + +/// A map type with [`String`] keys and [`Value`] values. +#[derive(Clone, Default)] +pub struct Compound { + map: Map, +} + +#[cfg(not(feature = "preserve_order"))] +type Map = std::collections::BTreeMap>; + +#[cfg(feature = "preserve_order")] +type Map = indexmap::IndexMap>; + +impl fmt::Debug for Compound { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.map.fmt(f) + } +} + +impl PartialEq for Compound +where + S: Ord + Hash, +{ + fn eq(&self, other: &Self) -> bool { + self.map == other.map + } +} + +#[cfg(feature = "serde")] +impl serde::Serialize for Compound +where + Str: Ord + Hash + serde::Serialize, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + self.map.serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de, S> serde::Deserialize<'de> for Compound +where + S: Ord + Hash + serde::Deserialize<'de>, +{ + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + Map::::deserialize(deserializer).map(|map| Self { map }) + } + + fn deserialize_in_place(deserializer: D, place: &mut Self) -> Result<(), D::Error> + where + D: serde::Deserializer<'de>, + { + Map::::deserialize_in_place(deserializer, &mut place.map) + } +} + +impl Compound { + pub fn new() -> Self { + Self { map: Map::new() } + } + + pub fn with_capacity(cap: usize) -> Self { + Self { + #[cfg(not(feature = "preserve_order"))] + map: { + // BTreeMap does not have with_capacity. + let _ = cap; + Map::new() + }, + #[cfg(feature = "preserve_order")] + map: Map::with_capacity(cap), + } + } + + pub fn clear(&mut self) { + self.map.clear(); + } +} + +impl Compound +where + S: Ord + Hash, +{ + pub fn get(&self, k: &Q) -> Option<&Value> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.get(k.as_borrowed()) + } + + pub fn contains_key(&self, k: &Q) -> bool + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.contains_key(k.as_borrowed()) + } + + pub fn get_mut(&mut self, k: &Q) -> Option<&mut Value> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.get_mut(k.as_borrowed()) + } + + pub fn get_key_value(&self, k: &Q) -> Option<(&S, &Value)> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.get_key_value(k.as_borrowed()) + } + + pub fn insert(&mut self, k: K, v: V) -> Option> + where + K: Into, + V: Into>, + { + self.map.insert(k.into(), v.into()) + } + + pub fn remove(&mut self, k: &Q) -> Option> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + #[cfg(feature = "preserve_order")] + return self.swap_remove(k); + #[cfg(not(feature = "preserve_order"))] + return self.map.remove(k.as_borrowed()); + } + + #[cfg(feature = "preserve_order")] + pub fn swap_remove(&mut self, k: &Q) -> Option> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.swap_remove(k.as_borrowed()) + } + + #[cfg(feature = "preserve_order")] + pub fn shift_remove(&mut self, k: &Q) -> Option> + where + Q: ?Sized + AsBorrowed, + >::Borrowed: Hash + Ord, + S: Borrow<>::Borrowed>, + { + self.map.shift_remove(k.as_borrowed()) + } + + pub fn remove_entry(&mut self, k: &Q) -> Option<(S, Value)> + where + S: Borrow, + Q: ?Sized + Ord + Hash, + { + #[cfg(feature = "preserve_order")] + return self.swap_remove_entry(k); + #[cfg(not(feature = "preserve_order"))] + return self.map.remove_entry(k); + } + + #[cfg(feature = "preserve_order")] + pub fn swap_remove_entry(&mut self, k: &Q) -> Option<(S, Value)> + where + S: Borrow, + Q: ?Sized + Ord + Hash, + { + self.map.swap_remove_entry(k) + } + + #[cfg(feature = "preserve_order")] + pub fn shift_remove_entry(&mut self, k: &Q) -> Option<(S, Value)> + where + S: Borrow, + Q: ?Sized + Ord + Hash, + { + self.map.shift_remove_entry(k) + } + + pub fn append(&mut self, other: &mut Self) { + #[cfg(not(feature = "preserve_order"))] + self.map.append(&mut other.map); + + #[cfg(feature = "preserve_order")] + for (k, v) in std::mem::take(&mut other.map) { + self.map.insert(k, v); + } + } + + pub fn entry(&mut self, k: K) -> Entry<'_, S> + where + K: Into, + { + #[cfg(not(feature = "preserve_order"))] + use std::collections::btree_map::Entry as EntryImpl; + + #[cfg(feature = "preserve_order")] + use indexmap::map::Entry as EntryImpl; + + match self.map.entry(k.into()) { + EntryImpl::Vacant(ve) => Entry::Vacant(VacantEntry { ve }), + EntryImpl::Occupied(oe) => Entry::Occupied(OccupiedEntry { oe }), + } + } + + pub fn len(&self) -> usize { + self.map.len() + } + + pub fn is_empty(&self) -> bool { + self.map.is_empty() + } + + pub fn iter(&self) -> Iter<'_, S> { + Iter { + iter: self.map.iter(), + } + } + + pub fn iter_mut(&mut self) -> IterMut<'_, S> { + IterMut { + iter: self.map.iter_mut(), + } + } + + pub fn keys(&self) -> Keys<'_, S> { + Keys { + iter: self.map.keys(), + } + } + + pub fn values(&self) -> Values<'_, S> { + Values { + iter: self.map.values(), + } + } + + pub fn values_mut(&mut self) -> ValuesMut<'_, S> { + ValuesMut { + iter: self.map.values_mut(), + } + } + + pub fn retain(&mut self, f: F) + where + F: FnMut(&S, &mut Value) -> bool, + { + self.map.retain(f) + } + + /// Inserts all items from `other` into `self` recursively. + /// + /// # Example + /// + /// ``` + /// use valence_nbt::compound; + /// + /// let mut this = compound! { + /// "foo" => 10, + /// "bar" => compound! { + /// "baz" => 20, + /// } + /// }; + /// + /// let other = compound! { + /// "foo" => 15, + /// "bar" => compound! { + /// "quux" => "hello", + /// } + /// }; + /// + /// this.merge(other); + /// + /// assert_eq!( + /// this, + /// compound! { + /// "foo" => 15, + /// "bar" => compound! { + /// "baz" => 20, + /// "quux" => "hello", + /// } + /// } + /// ); + /// ``` + pub fn merge(&mut self, other: Compound) { + for (k, v) in other { + match (self.entry(k), v) { + (Entry::Occupied(mut oe), Value::Compound(other)) => { + if let Value::Compound(this) = oe.get_mut() { + // Insert compound recursively. + this.merge(other); + } + } + (Entry::Occupied(mut oe), value) => { + oe.insert(value); + } + (Entry::Vacant(ve), value) => { + ve.insert(value); + } + } + } + } +} + +/// Trait that can be used as a key to query a compound. Basically something +/// that can be converted to a type `B` such that `S: Borrow`. +pub trait AsBorrowed { + type Borrowed: ?Sized; + + fn as_borrowed(&self) -> &Self::Borrowed; +} + +impl AsBorrowed for Q +where + String: Borrow, +{ + type Borrowed = Q; + + #[inline] + fn as_borrowed(&self) -> &Q { + self + } +} + +impl<'a, Q: ?Sized> AsBorrowed> for Q +where + Cow<'a, str>: Borrow, +{ + type Borrowed = Q; + + #[inline] + fn as_borrowed(&self) -> &Q { + self + } +} + +#[cfg(feature = "java_string")] +impl AsBorrowed for Q +where + for<'a> &'a Q: Into<&'a java_string::JavaStr>, +{ + type Borrowed = java_string::JavaStr; + + fn as_borrowed(&self) -> &Self::Borrowed { + self.into() + } +} + +#[cfg(feature = "java_string")] +impl AsBorrowed> for Q +where + for<'a> &'a Q: Into<&'a java_string::JavaStr>, +{ + type Borrowed = java_string::JavaStr; + + fn as_borrowed(&self) -> &Self::Borrowed { + self.into() + } +} + +impl Extend<(S, Value)> for Compound +where + S: Ord + Hash, +{ + fn extend(&mut self, iter: T) + where + T: IntoIterator)>, + { + self.map.extend(iter) + } +} + +impl FromIterator<(S, Value)> for Compound +where + S: Ord + Hash, +{ + fn from_iter(iter: T) -> Self + where + T: IntoIterator)>, + { + Self { + map: Map::from_iter(iter), + } + } +} + +pub enum Entry<'a, S = String> { + Vacant(VacantEntry<'a, S>), + Occupied(OccupiedEntry<'a, S>), +} + +impl<'a, S> Entry<'a, S> +where + S: Hash + Ord, +{ + pub fn key(&self) -> &S { + match self { + Entry::Vacant(ve) => ve.key(), + Entry::Occupied(oe) => oe.key(), + } + } + + pub fn or_insert(self, default: impl Into>) -> &'a mut Value { + match self { + Entry::Vacant(ve) => ve.insert(default), + Entry::Occupied(oe) => oe.into_mut(), + } + } + + pub fn or_insert_with(self, default: F) -> &'a mut Value + where + F: FnOnce() -> V, + V: Into>, + { + match self { + Entry::Vacant(ve) => ve.insert(default()), + Entry::Occupied(oe) => oe.into_mut(), + } + } + + pub fn and_modify(self, f: F) -> Self + where + F: FnOnce(&mut Value), + { + match self { + Entry::Vacant(ve) => Entry::Vacant(ve), + Entry::Occupied(mut oe) => { + f(oe.get_mut()); + Entry::Occupied(oe) + } + } + } +} + +pub struct VacantEntry<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + ve: std::collections::btree_map::VacantEntry<'a, S, Value>, + #[cfg(feature = "preserve_order")] + ve: indexmap::map::VacantEntry<'a, S, Value>, +} + +impl<'a, S> VacantEntry<'a, S> +where + S: Ord + Hash, +{ + pub fn key(&self) -> &S { + self.ve.key() + } + + pub fn insert(self, v: impl Into>) -> &'a mut Value { + self.ve.insert(v.into()) + } +} + +pub struct OccupiedEntry<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + oe: std::collections::btree_map::OccupiedEntry<'a, S, Value>, + #[cfg(feature = "preserve_order")] + oe: indexmap::map::OccupiedEntry<'a, S, Value>, +} + +impl<'a, S> OccupiedEntry<'a, S> +where + S: Hash + Ord, +{ + pub fn key(&self) -> &S { + self.oe.key() + } + + pub fn get(&self) -> &Value { + self.oe.get() + } + + pub fn get_mut(&mut self) -> &mut Value { + self.oe.get_mut() + } + + pub fn into_mut(self) -> &'a mut Value { + self.oe.into_mut() + } + + pub fn insert(&mut self, v: impl Into>) -> Value { + self.oe.insert(v.into()) + } + + pub fn remove(self) -> Value { + #[cfg(feature = "preserve_order")] + return self.swap_remove(); + #[cfg(not(feature = "preserve_order"))] + return self.oe.remove(); + } + + #[cfg(feature = "preserve_order")] + pub fn swap_remove(self) -> Value { + self.oe.swap_remove() + } + + #[cfg(feature = "preserve_order")] + pub fn shift_remove(self) -> Value { + self.oe.shift_remove() + } +} + +impl Index<&'_ Q> for Compound +where + S: Borrow + Ord + Hash, + Q: ?Sized + Ord + Hash, +{ + type Output = Value; + + fn index(&self, index: &Q) -> &Self::Output { + self.map.index(index) + } +} + +impl IndexMut<&'_ Q> for Compound +where + S: Borrow + Hash + Ord, + Q: ?Sized + Ord + Hash, +{ + fn index_mut(&mut self, index: &Q) -> &mut Self::Output { + self.map.get_mut(index).expect("no entry found for key") + } +} + +macro_rules! impl_iterator_traits { + (($name:ident $($generics:tt)*) => $item:ty) => { + impl $($generics)* Iterator for $name $($generics)* { + type Item = $item; + #[inline] + fn next(&mut self) -> Option { + self.iter.next() + } + #[inline] + fn size_hint(&self) -> (usize, Option) { + self.iter.size_hint() + } + } + + #[cfg(feature = "preserve_order")] + impl $($generics)* DoubleEndedIterator for $name $($generics)* { + #[inline] + fn next_back(&mut self) -> Option { + self.iter.next_back() + } + } + + impl $($generics)* ExactSizeIterator for $name $($generics)* { + #[inline] + fn len(&self) -> usize { + self.iter.len() + } + } + + impl $($generics)* FusedIterator for $name $($generics)* {} + } +} + +impl<'a, S> IntoIterator for &'a Compound { + type Item = (&'a S, &'a Value); + type IntoIter = Iter<'a, S>; + + fn into_iter(self) -> Self::IntoIter { + Iter { + iter: self.map.iter(), + } + } +} + +#[derive(Clone)] +pub struct Iter<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::Iter<'a, S, Value>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::Iter<'a, S, Value>, +} + +impl_iterator_traits!((Iter<'a, S>) => (&'a S, &'a Value)); + +impl<'a, S> IntoIterator for &'a mut Compound { + type Item = (&'a S, &'a mut Value); + type IntoIter = IterMut<'a, S>; + + fn into_iter(self) -> Self::IntoIter { + IterMut { + iter: self.map.iter_mut(), + } + } +} + +pub struct IterMut<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::IterMut<'a, S, Value>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::IterMut<'a, S, Value>, +} + +impl_iterator_traits!((IterMut<'a, S>) => (&'a S, &'a mut Value)); + +impl IntoIterator for Compound { + type Item = (S, Value); + type IntoIter = IntoIter; + + fn into_iter(self) -> Self::IntoIter { + IntoIter { + iter: self.map.into_iter(), + } + } +} + +pub struct IntoIter { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::IntoIter>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::IntoIter>, +} + +impl_iterator_traits!((IntoIter) => (S, Value)); + +#[derive(Clone)] +pub struct Keys<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::Keys<'a, S, Value>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::Keys<'a, S, Value>, +} + +impl_iterator_traits!((Keys<'a, S>) => &'a S); + +#[derive(Clone)] +pub struct Values<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::Values<'a, S, Value>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::Values<'a, S, Value>, +} + +impl_iterator_traits!((Values<'a, S>) => &'a Value); + +pub struct ValuesMut<'a, S = String> { + #[cfg(not(feature = "preserve_order"))] + iter: std::collections::btree_map::ValuesMut<'a, S, Value>, + #[cfg(feature = "preserve_order")] + iter: indexmap::map::ValuesMut<'a, S, Value>, +} + +impl_iterator_traits!((ValuesMut<'a, S>) => &'a mut Value); + +#[cfg(test)] +mod tests { + #[cfg(feature = "preserve_order")] + #[test] + fn compound_preserves_order() { + use super::*; + + let letters = ["g", "b", "d", "e", "h", "z", "m", "a", "q"]; + + let mut c = Compound::::new(); + for l in letters { + c.insert(l, 0_i8); + } + + for (k, l) in c.keys().zip(letters) { + assert_eq!(k, l); + } + } +} diff --git a/vendor/valence/crates/valence_nbt/src/conv.rs b/vendor/valence/crates/valence_nbt/src/conv.rs new file mode 100644 index 00000000..9ff0bb4a --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/conv.rs @@ -0,0 +1,52 @@ +//! Zero-cost conversion functions for `valence_nbt`. +//! +//! While working with [`Value`], it is often necessary to convert between +//! collections of signed and unsigned integer types due to API +//! differences. For instance, you may be given a `&[i8]` from +//! [`Value::ByteArray`], but functions like [`Write::write_all`] expect to +//! receive a `&[u8]`. +//! +//! This module provides functions to perform conversions between these types +//! with zero-cost and no `unsafe` code on your part. +//! +//! [`Value`]: crate::Value +//! [`Value::ByteArray`]: crate::Value::ByteArray +//! [`Write::write_all`]: std::io::Write::write_all + +use std::mem::ManuallyDrop; + +/// Converts a `Vec` into a `Vec` without cloning. +#[inline] +pub fn u8_vec_into_i8_vec(vec: Vec) -> Vec { + // SAFETY: Layouts of u8 and i8 are the same and we're being careful not to drop + // the original vec after calling Vec::from_raw_parts. + unsafe { + let mut vec = ManuallyDrop::new(vec); + Vec::from_raw_parts(vec.as_mut_ptr() as *mut i8, vec.len(), vec.capacity()) + } +} + +/// Converts a `Vec` into a `Vec` without cloning. +#[inline] +pub fn i8_vec_into_u8_vec(vec: Vec) -> Vec { + // SAFETY: Layouts of u8 and i8 are the same and we're being careful not to drop + // the original vec after calling Vec::from_raw_parts. + unsafe { + let mut vec = ManuallyDrop::new(vec); + Vec::from_raw_parts(vec.as_mut_ptr() as *mut u8, vec.len(), vec.capacity()) + } +} + +/// Converts a `&[u8]` into a `&[i8]`. +#[inline] +pub fn u8_slice_as_i8_slice(slice: &[u8]) -> &[i8] { + // SAFETY: i8 has the same layout as u8. + unsafe { std::slice::from_raw_parts(slice.as_ptr() as *const i8, slice.len()) } +} + +/// Converts a `&[i8]` into a `&[u8]`. +#[inline] +pub fn i8_slice_as_u8_slice(slice: &[i8]) -> &[u8] { + // SAFETY: i8 has the same layout as u8. + unsafe { std::slice::from_raw_parts(slice.as_ptr() as *const u8, slice.len()) } +} diff --git a/vendor/valence/crates/valence_nbt/src/lib.rs b/vendor/valence/crates/valence_nbt/src/lib.rs new file mode 100644 index 00000000..85e72bdb --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/lib.rs @@ -0,0 +1,110 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +#[cfg(feature = "binary")] +pub use binary::{from_binary, to_binary}; +pub use compound::Compound; +pub use list::List; +pub use tag::Tag; +pub use value::Value; + +#[cfg(feature = "binary")] +pub mod binary; +pub mod compound; +pub mod conv; +pub mod list; +#[cfg(feature = "serde")] +pub mod serde; +#[cfg(feature = "snbt")] +pub mod snbt; +mod tag; +pub mod value; + +/// A convenience macro for constructing [`Compound`]s. +/// +/// Key expressions must implement `Into` while value expressions must +/// implement `Into`. +/// +/// # Examples +/// +/// ``` +/// use valence_nbt::{List, compound}; +/// +/// let c = compound! { +/// "byte" => 123_i8, +/// "list_of_int" => List::Int(vec![3, -7, 5]), +/// "list_of_string" => List::String(vec![ +/// "foo".to_owned(), +/// "bar".to_owned(), +/// "baz".to_owned() +/// ]), +/// "string" => "aé日", +/// "compound" => compound! { +/// "foo" => 1, +/// "bar" => 2, +/// "baz" => 3, +/// }, +/// "int_array" => vec![5, -9, i32::MIN, 0, i32::MAX], +/// "byte_array" => vec![0_i8, 2, 3], +/// "long_array" => vec![123_i64, 456, 789], +/// }; +/// +/// println!("{c:?}"); +/// ``` +/// +/// It is also possible to specify a custom string type like this: +/// ``` +/// # use std::borrow::Cow; +/// +/// use valence_nbt::compound; +/// +/// let c = compound! { > +/// "foo" => 123_i8, +/// }; +/// +/// println!("{c:?}"); +/// ``` +#[macro_export] +macro_rules! compound { + (<$string_type:ty> $($key:expr => $value:expr),* $(,)?) => { + <$crate::Compound<$string_type> as ::std::iter::FromIterator<($string_type, $crate::Value<$string_type>)>>::from_iter([ + $( + ( + ::std::convert::Into::<$string_type>::into($key), + ::std::convert::Into::<$crate::Value<$string_type>>::into($value) + ), + )* + ]) + }; + + ($($key:expr => $value:expr),* $(,)?) => { + compound!(<::std::string::String> $($key => $value),*) + }; +} + +/// A convenience macro for constructing [`Compound`]`<`[`JavaString`]`>`s +/// +/// [`JavaString`]: java_string::JavaString +#[cfg(feature = "java_string")] +#[macro_export] +macro_rules! jcompound { + ($($key:expr => $value:expr),* $(,)?) => { + compound!(<::java_string::JavaString> $($key => $value),*) + } +} diff --git a/vendor/valence/crates/valence_nbt/src/list.rs b/vendor/valence/crates/valence_nbt/src/list.rs new file mode 100644 index 00000000..4be08872 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/list.rs @@ -0,0 +1,975 @@ +use std::borrow::Cow; +use std::hash::Hash; +use std::iter::FusedIterator; + +use crate::value::{ValueMut, ValueRef}; +use crate::{Compound, Tag, Value}; + +/// An NBT list value. +/// +/// NBT lists are homogeneous, meaning each list element must be of the same +/// type. This is opposed to a format like JSON where lists can be +/// heterogeneous. Here is a JSON list that would be illegal in NBT: +/// +/// ```json +/// [42, "hello", {}] +/// ``` +/// +/// Every possible element type has its own variant in this enum. As a result, +/// heterogeneous lists are unrepresentable. +#[derive(Clone, Default, Debug)] +pub enum List { + /// The list with the element type of `TAG_End` and length of zero. + #[default] + End, + Byte(Vec), + Short(Vec), + Int(Vec), + Long(Vec), + Float(Vec), + Double(Vec), + ByteArray(Vec>), + String(Vec), + List(Vec>), + Compound(Vec>), + IntArray(Vec>), + LongArray(Vec>), +} + +impl PartialEq for List +where + S: Ord + Hash, +{ + fn eq(&self, other: &Self) -> bool { + match self { + List::End => matches!(other, List::End), + List::Byte(list) => matches!(other, List::Byte(other_list) if list == other_list), + List::Short(list) => matches!(other, List::Short(other_list) if list == other_list), + List::Int(list) => matches!(other, List::Int(other_list) if list == other_list), + List::Long(list) => matches!(other, List::Long(other_list) if list == other_list), + List::Float(list) => matches!(other, List::Float(other_list) if list == other_list), + List::Double(list) => matches!(other, List::Double(other_list) if list == other_list), + List::ByteArray(list) => { + matches!(other, List::ByteArray(other_list) if list == other_list) + } + List::String(list) => matches!(other, List::String(other_list) if list == other_list), + List::List(list) => matches!(other, List::List(other_list) if list == other_list), + List::Compound(list) => { + matches!(other, List::Compound(other_list) if list == other_list) + } + List::IntArray(list) => { + matches!(other, List::IntArray(other_list) if list == other_list) + } + List::LongArray(list) => { + matches!(other, List::LongArray(other_list) if list == other_list) + } + } + } +} + +impl List { + /// Constructs a new empty NBT list, with the element type of `TAG_End`. + pub fn new() -> Self { + Self::End + } + + /// Returns the length of this list. + pub fn len(&self) -> usize { + match self { + List::End => 0, + List::Byte(l) => l.len(), + List::Short(l) => l.len(), + List::Int(l) => l.len(), + List::Long(l) => l.len(), + List::Float(l) => l.len(), + List::Double(l) => l.len(), + List::ByteArray(l) => l.len(), + List::String(l) => l.len(), + List::List(l) => l.len(), + List::Compound(l) => l.len(), + List::IntArray(l) => l.len(), + List::LongArray(l) => l.len(), + } + } + + /// Returns `true` if this list has no elements. `false` otherwise. + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + + /// Returns the element type of this list. + pub fn element_tag(&self) -> Tag { + match self { + List::End => Tag::End, + List::Byte(_) => Tag::Byte, + List::Short(_) => Tag::Short, + List::Int(_) => Tag::Int, + List::Long(_) => Tag::Long, + List::Float(_) => Tag::Float, + List::Double(_) => Tag::Double, + List::ByteArray(_) => Tag::ByteArray, + List::String(_) => Tag::String, + List::List(_) => Tag::List, + List::Compound(_) => Tag::Compound, + List::IntArray(_) => Tag::IntArray, + List::LongArray(_) => Tag::LongArray, + } + } + + /// Gets a reference to the value at the given index in this list, or `None` + /// if the index is out of bounds. + pub fn get(&self, index: usize) -> Option> { + match self { + List::End => None, + List::Byte(list) => list.get(index).map(ValueRef::Byte), + List::Short(list) => list.get(index).map(ValueRef::Short), + List::Int(list) => list.get(index).map(ValueRef::Int), + List::Long(list) => list.get(index).map(ValueRef::Long), + List::Float(list) => list.get(index).map(ValueRef::Float), + List::Double(list) => list.get(index).map(ValueRef::Double), + List::ByteArray(list) => list.get(index).map(|arr| ValueRef::ByteArray(&arr[..])), + List::String(list) => list.get(index).map(ValueRef::String), + List::List(list) => list.get(index).map(ValueRef::List), + List::Compound(list) => list.get(index).map(ValueRef::Compound), + List::IntArray(list) => list.get(index).map(|arr| ValueRef::IntArray(&arr[..])), + List::LongArray(list) => list.get(index).map(|arr| ValueRef::LongArray(&arr[..])), + } + } + + /// Gets a mutable reference to the value at the given index in this list, + /// or `None` if the index is out of bounds. + pub fn get_mut(&mut self, index: usize) -> Option> { + match self { + List::End => None, + List::Byte(list) => list.get_mut(index).map(ValueMut::Byte), + List::Short(list) => list.get_mut(index).map(ValueMut::Short), + List::Int(list) => list.get_mut(index).map(ValueMut::Int), + List::Long(list) => list.get_mut(index).map(ValueMut::Long), + List::Float(list) => list.get_mut(index).map(ValueMut::Float), + List::Double(list) => list.get_mut(index).map(ValueMut::Double), + List::ByteArray(list) => list.get_mut(index).map(ValueMut::ByteArray), + List::String(list) => list.get_mut(index).map(ValueMut::String), + List::List(list) => list.get_mut(index).map(ValueMut::List), + List::Compound(list) => list.get_mut(index).map(ValueMut::Compound), + List::IntArray(list) => list.get_mut(index).map(ValueMut::IntArray), + List::LongArray(list) => list.get_mut(index).map(ValueMut::LongArray), + } + } + + /// Attempts to add the given value to the end of this list, failing if + /// adding the value would result in the list not being heterogeneous (have + /// multiple types inside it). Returns `true` if the value was added, + /// `false` otherwise. + #[must_use] + pub fn try_push(&mut self, value: impl Into>) -> bool { + let value = value.into(); + match self { + List::End => { + *self = List::from(value); + true + } + List::Byte(list) => { + if let Value::Byte(value) = value { + list.push(value); + true + } else { + false + } + } + List::Short(list) => { + if let Value::Short(value) = value { + list.push(value); + true + } else { + false + } + } + List::Int(list) => { + if let Value::Int(value) = value { + list.push(value); + true + } else { + false + } + } + List::Long(list) => { + if let Value::Long(value) = value { + list.push(value); + true + } else { + false + } + } + List::Float(list) => { + if let Value::Float(value) = value { + list.push(value); + true + } else { + false + } + } + List::Double(list) => { + if let Value::Double(value) = value { + list.push(value); + true + } else { + false + } + } + List::ByteArray(list) => { + if let Value::ByteArray(value) = value { + list.push(value); + true + } else { + false + } + } + List::String(list) => { + if let Value::String(value) = value { + list.push(value); + true + } else { + false + } + } + List::List(list) => { + if let Value::List(value) = value { + list.push(value); + true + } else { + false + } + } + List::Compound(list) => { + if let Value::Compound(value) = value { + list.push(value); + true + } else { + false + } + } + List::IntArray(list) => { + if let Value::IntArray(value) = value { + list.push(value); + true + } else { + false + } + } + List::LongArray(list) => { + if let Value::LongArray(value) = value { + list.push(value); + true + } else { + false + } + } + } + } + + /// Attempts to insert the given value at the given index in this list, + /// failing if adding the value would result in the list not being + /// heterogeneous (have multiple types inside it). Returns `true` if the + /// value was added, `false` otherwise. + /// + /// # Panics + /// + /// Panics if the index is greater than the length of the list. + #[must_use] + pub fn try_insert(&mut self, index: usize, value: impl Into>) -> bool { + let value = value.into(); + + #[cold] + #[inline(never)] + fn assert_failed(index: usize, len: usize) -> ! { + panic!("insertion index (is {index}) should be <= len (is {len})"); + } + + match self { + List::End => { + if index > 0 { + assert_failed(index, 0); + } + *self = List::from(value); + true + } + List::Byte(list) => { + if let Value::Byte(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Short(list) => { + if let Value::Short(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Int(list) => { + if let Value::Int(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Long(list) => { + if let Value::Long(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Float(list) => { + if let Value::Float(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Double(list) => { + if let Value::Double(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::ByteArray(list) => { + if let Value::ByteArray(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::String(list) => { + if let Value::String(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::List(list) => { + if let Value::List(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::Compound(list) => { + if let Value::Compound(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::IntArray(list) => { + if let Value::IntArray(value) = value { + list.insert(index, value); + true + } else { + false + } + } + List::LongArray(list) => { + if let Value::LongArray(value) = value { + list.insert(index, value); + true + } else { + false + } + } + } + } + + /// Removes the element at the given index in the list, and returns the + /// value removed. + /// + /// # Panics + /// + /// Panics if `index` is out of bounds. + #[track_caller] + pub fn remove(&mut self, index: usize) -> Value { + #[cold] + #[inline(never)] + #[track_caller] + fn assert_failed(index: usize, len: usize) -> ! { + panic!("removal index (is {index}) should be < len (is {len})"); + } + + let removed = match self { + List::End => assert_failed(index, 0), + List::Byte(list) => Value::Byte(list.remove(index)), + List::Short(list) => Value::Short(list.remove(index)), + List::Int(list) => Value::Int(list.remove(index)), + List::Long(list) => Value::Long(list.remove(index)), + List::Float(list) => Value::Float(list.remove(index)), + List::Double(list) => Value::Double(list.remove(index)), + List::ByteArray(list) => Value::ByteArray(list.remove(index)), + List::String(list) => Value::String(list.remove(index)), + List::List(list) => Value::List(list.remove(index)), + List::Compound(list) => Value::Compound(list.remove(index)), + List::IntArray(list) => Value::IntArray(list.remove(index)), + List::LongArray(list) => Value::LongArray(list.remove(index)), + }; + + if self.is_empty() { + *self = List::End; + } + + removed + } + + /// Returns only the elements specified by the predicate, passing a mutable + /// reference to it. + /// + /// In other words, removes all elements `e` such that `f(ValueMut(&mut e))` + /// returns `false`. This method operates in place, visiting each element + /// exactly once in the original order, and preserves the order of the + /// retained elements. + pub fn retain(&mut self, mut f: F) + where + F: FnMut(ValueMut) -> bool, + { + match self { + List::End => {} + List::Byte(list) => list.retain_mut(|v| f(ValueMut::Byte(v))), + List::Short(list) => list.retain_mut(|v| f(ValueMut::Short(v))), + List::Int(list) => list.retain_mut(|v| f(ValueMut::Int(v))), + List::Long(list) => list.retain_mut(|v| f(ValueMut::Long(v))), + List::Float(list) => list.retain_mut(|v| f(ValueMut::Float(v))), + List::Double(list) => list.retain_mut(|v| f(ValueMut::Double(v))), + List::ByteArray(list) => list.retain_mut(|v| f(ValueMut::ByteArray(v))), + List::String(list) => list.retain_mut(|v| f(ValueMut::String(v))), + List::List(list) => list.retain_mut(|v| f(ValueMut::List(v))), + List::Compound(list) => list.retain_mut(|v| f(ValueMut::Compound(v))), + List::IntArray(list) => list.retain_mut(|v| f(ValueMut::IntArray(v))), + List::LongArray(list) => list.retain_mut(|v| f(ValueMut::LongArray(v))), + } + + if self.is_empty() { + *self = List::End; + } + } + + /// Returns an iterator over this list. This iterator yields [`ValueRef`]s. + pub fn iter(&self) -> Iter<'_, S> { + Iter { + inner: match self { + List::End => IterInner::End, + List::Byte(list) => IterInner::Byte(list.iter()), + List::Short(list) => IterInner::Short(list.iter()), + List::Int(list) => IterInner::Int(list.iter()), + List::Long(list) => IterInner::Long(list.iter()), + List::Float(list) => IterInner::Float(list.iter()), + List::Double(list) => IterInner::Double(list.iter()), + List::ByteArray(list) => IterInner::ByteArray(list.iter()), + List::String(list) => IterInner::String(list.iter()), + List::List(list) => IterInner::List(list.iter()), + List::Compound(list) => IterInner::Compound(list.iter()), + List::IntArray(list) => IterInner::IntArray(list.iter()), + List::LongArray(list) => IterInner::LongArray(list.iter()), + }, + } + } + + /// Returns a mutable iterator over this list. This iterator yields + /// [`ValueMut`]s. + pub fn iter_mut(&mut self) -> IterMut<'_, S> { + IterMut { + inner: match self { + List::End => IterMutInner::End, + List::Byte(list) => IterMutInner::Byte(list.iter_mut()), + List::Short(list) => IterMutInner::Short(list.iter_mut()), + List::Int(list) => IterMutInner::Int(list.iter_mut()), + List::Long(list) => IterMutInner::Long(list.iter_mut()), + List::Float(list) => IterMutInner::Float(list.iter_mut()), + List::Double(list) => IterMutInner::Double(list.iter_mut()), + List::ByteArray(list) => IterMutInner::ByteArray(list.iter_mut()), + List::String(list) => IterMutInner::String(list.iter_mut()), + List::List(list) => IterMutInner::List(list.iter_mut()), + List::Compound(list) => IterMutInner::Compound(list.iter_mut()), + List::IntArray(list) => IterMutInner::IntArray(list.iter_mut()), + List::LongArray(list) => IterMutInner::LongArray(list.iter_mut()), + }, + } + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Byte(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Short(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Int(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Long(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Float(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::Double(v) + } +} + +impl From>> for List { + fn from(v: Vec>) -> Self { + List::ByteArray(v) + } +} + +impl From> for List { + fn from(v: Vec) -> Self { + List::String(v) + } +} + +impl<'a> From>> for List> { + fn from(v: Vec>) -> Self { + List::String(v) + } +} + +#[cfg(feature = "java_string")] +impl From> for List { + fn from(v: Vec) -> Self { + List::String(v) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From>> for List> { + fn from(v: Vec>) -> Self { + List::String(v) + } +} + +impl From>> for List { + fn from(v: Vec>) -> Self { + List::List(v) + } +} + +impl From>> for List { + fn from(v: Vec>) -> Self { + List::Compound(v) + } +} + +impl From>> for List { + fn from(v: Vec>) -> Self { + List::IntArray(v) + } +} + +impl From>> for List { + fn from(v: Vec>) -> Self { + List::LongArray(v) + } +} + +/// Converts a value to a singleton list. +impl From> for List { + fn from(value: Value) -> Self { + match value { + Value::Byte(v) => List::Byte(vec![v]), + Value::Short(v) => List::Short(vec![v]), + Value::Int(v) => List::Int(vec![v]), + Value::Long(v) => List::Long(vec![v]), + Value::Float(v) => List::Float(vec![v]), + Value::Double(v) => List::Double(vec![v]), + Value::ByteArray(v) => List::ByteArray(vec![v]), + Value::String(v) => List::String(vec![v]), + Value::List(v) => List::List(vec![v]), + Value::Compound(v) => List::Compound(vec![v]), + Value::IntArray(v) => List::IntArray(vec![v]), + Value::LongArray(v) => List::LongArray(vec![v]), + } + } +} + +impl IntoIterator for List { + type Item = Value; + type IntoIter = IntoIter; + + fn into_iter(self) -> Self::IntoIter { + IntoIter { + inner: match self { + List::End => IntoIterInner::End, + List::Byte(list) => IntoIterInner::Byte(list.into_iter()), + List::Short(list) => IntoIterInner::Short(list.into_iter()), + List::Int(list) => IntoIterInner::Int(list.into_iter()), + List::Long(list) => IntoIterInner::Long(list.into_iter()), + List::Float(list) => IntoIterInner::Float(list.into_iter()), + List::Double(list) => IntoIterInner::Double(list.into_iter()), + List::ByteArray(list) => IntoIterInner::ByteArray(list.into_iter()), + List::String(list) => IntoIterInner::String(list.into_iter()), + List::List(list) => IntoIterInner::List(list.into_iter()), + List::Compound(list) => IntoIterInner::Compound(list.into_iter()), + List::IntArray(list) => IntoIterInner::IntArray(list.into_iter()), + List::LongArray(list) => IntoIterInner::LongArray(list.into_iter()), + }, + } + } +} + +impl<'a, S> IntoIterator for &'a List { + type Item = ValueRef<'a, S>; + type IntoIter = Iter<'a, S>; + + fn into_iter(self) -> Self::IntoIter { + self.iter() + } +} + +impl<'a, S> IntoIterator for &'a mut List { + type Item = ValueMut<'a, S>; + type IntoIter = IterMut<'a, S>; + + fn into_iter(self) -> Self::IntoIter { + self.iter_mut() + } +} + +/// The owned iterator type for [`List`]. +pub struct IntoIter { + inner: IntoIterInner, +} + +enum IntoIterInner { + End, + Byte(std::vec::IntoIter), + Short(std::vec::IntoIter), + Int(std::vec::IntoIter), + Long(std::vec::IntoIter), + Float(std::vec::IntoIter), + Double(std::vec::IntoIter), + ByteArray(std::vec::IntoIter>), + String(std::vec::IntoIter), + List(std::vec::IntoIter>), + Compound(std::vec::IntoIter>), + IntArray(std::vec::IntoIter>), + LongArray(std::vec::IntoIter>), +} + +impl Iterator for IntoIter { + type Item = Value; + + fn next(&mut self) -> Option { + match self.inner { + IntoIterInner::End => None, + IntoIterInner::Byte(ref mut i) => i.next().map(Value::Byte), + IntoIterInner::Short(ref mut i) => i.next().map(Value::Short), + IntoIterInner::Int(ref mut i) => i.next().map(Value::Int), + IntoIterInner::Long(ref mut i) => i.next().map(Value::Long), + IntoIterInner::Float(ref mut i) => i.next().map(Value::Float), + IntoIterInner::Double(ref mut i) => i.next().map(Value::Double), + IntoIterInner::ByteArray(ref mut i) => i.next().map(Value::ByteArray), + IntoIterInner::String(ref mut i) => i.next().map(Value::String), + IntoIterInner::List(ref mut i) => i.next().map(Value::List), + IntoIterInner::Compound(ref mut i) => i.next().map(Value::Compound), + IntoIterInner::IntArray(ref mut i) => i.next().map(Value::IntArray), + IntoIterInner::LongArray(ref mut i) => i.next().map(Value::LongArray), + } + } + + fn size_hint(&self) -> (usize, Option) { + match self.inner { + IntoIterInner::End => (0, Some(0)), + IntoIterInner::Byte(ref i) => i.size_hint(), + IntoIterInner::Short(ref i) => i.size_hint(), + IntoIterInner::Int(ref i) => i.size_hint(), + IntoIterInner::Long(ref i) => i.size_hint(), + IntoIterInner::Float(ref i) => i.size_hint(), + IntoIterInner::Double(ref i) => i.size_hint(), + IntoIterInner::ByteArray(ref i) => i.size_hint(), + IntoIterInner::String(ref i) => i.size_hint(), + IntoIterInner::List(ref i) => i.size_hint(), + IntoIterInner::Compound(ref i) => i.size_hint(), + IntoIterInner::IntArray(ref i) => i.size_hint(), + IntoIterInner::LongArray(ref i) => i.size_hint(), + } + } +} + +impl DoubleEndedIterator for IntoIter { + fn next_back(&mut self) -> Option { + match self.inner { + IntoIterInner::End => None, + IntoIterInner::Byte(ref mut i) => i.next_back().map(Value::Byte), + IntoIterInner::Short(ref mut i) => i.next_back().map(Value::Short), + IntoIterInner::Int(ref mut i) => i.next_back().map(Value::Int), + IntoIterInner::Long(ref mut i) => i.next_back().map(Value::Long), + IntoIterInner::Float(ref mut i) => i.next_back().map(Value::Float), + IntoIterInner::Double(ref mut i) => i.next_back().map(Value::Double), + IntoIterInner::ByteArray(ref mut i) => i.next_back().map(Value::ByteArray), + IntoIterInner::String(ref mut i) => i.next_back().map(Value::String), + IntoIterInner::List(ref mut i) => i.next_back().map(Value::List), + IntoIterInner::Compound(ref mut i) => i.next_back().map(Value::Compound), + IntoIterInner::IntArray(ref mut i) => i.next_back().map(Value::IntArray), + IntoIterInner::LongArray(ref mut i) => i.next_back().map(Value::LongArray), + } + } +} + +impl ExactSizeIterator for IntoIter { + fn len(&self) -> usize { + match self.inner { + IntoIterInner::End => 0, + IntoIterInner::Byte(ref i) => i.len(), + IntoIterInner::Short(ref i) => i.len(), + IntoIterInner::Int(ref i) => i.len(), + IntoIterInner::Long(ref i) => i.len(), + IntoIterInner::Float(ref i) => i.len(), + IntoIterInner::Double(ref i) => i.len(), + IntoIterInner::ByteArray(ref i) => i.len(), + IntoIterInner::String(ref i) => i.len(), + IntoIterInner::List(ref i) => i.len(), + IntoIterInner::Compound(ref i) => i.len(), + IntoIterInner::IntArray(ref i) => i.len(), + IntoIterInner::LongArray(ref i) => i.len(), + } + } +} + +impl FusedIterator for IntoIter {} + +/// The borrowing iterator type for [`List`]. +pub struct Iter<'a, S = String> { + inner: IterInner<'a, S>, +} + +enum IterInner<'a, S> { + End, + Byte(std::slice::Iter<'a, i8>), + Short(std::slice::Iter<'a, i16>), + Int(std::slice::Iter<'a, i32>), + Long(std::slice::Iter<'a, i64>), + Float(std::slice::Iter<'a, f32>), + Double(std::slice::Iter<'a, f64>), + ByteArray(std::slice::Iter<'a, Vec>), + String(std::slice::Iter<'a, S>), + List(std::slice::Iter<'a, List>), + Compound(std::slice::Iter<'a, Compound>), + IntArray(std::slice::Iter<'a, Vec>), + LongArray(std::slice::Iter<'a, Vec>), +} + +impl<'a, S> Iterator for Iter<'a, S> { + type Item = ValueRef<'a, S>; + + fn next(&mut self) -> Option { + match self.inner { + IterInner::End => None, + IterInner::Byte(ref mut i) => i.next().map(ValueRef::Byte), + IterInner::Short(ref mut i) => i.next().map(ValueRef::Short), + IterInner::Int(ref mut i) => i.next().map(ValueRef::Int), + IterInner::Long(ref mut i) => i.next().map(ValueRef::Long), + IterInner::Float(ref mut i) => i.next().map(ValueRef::Float), + IterInner::Double(ref mut i) => i.next().map(ValueRef::Double), + IterInner::ByteArray(ref mut i) => i.next().map(|arr| ValueRef::ByteArray(&arr[..])), + IterInner::String(ref mut i) => i.next().map(ValueRef::String), + IterInner::List(ref mut i) => i.next().map(ValueRef::List), + IterInner::Compound(ref mut i) => i.next().map(ValueRef::Compound), + IterInner::IntArray(ref mut i) => i.next().map(|arr| ValueRef::IntArray(&arr[..])), + IterInner::LongArray(ref mut i) => i.next().map(|arr| ValueRef::LongArray(&arr[..])), + } + } + + fn size_hint(&self) -> (usize, Option) { + match self.inner { + IterInner::End => (0, Some(0)), + IterInner::Byte(ref i) => i.size_hint(), + IterInner::Short(ref i) => i.size_hint(), + IterInner::Int(ref i) => i.size_hint(), + IterInner::Long(ref i) => i.size_hint(), + IterInner::Float(ref i) => i.size_hint(), + IterInner::Double(ref i) => i.size_hint(), + IterInner::ByteArray(ref i) => i.size_hint(), + IterInner::String(ref i) => i.size_hint(), + IterInner::List(ref i) => i.size_hint(), + IterInner::Compound(ref i) => i.size_hint(), + IterInner::IntArray(ref i) => i.size_hint(), + IterInner::LongArray(ref i) => i.size_hint(), + } + } +} + +impl DoubleEndedIterator for Iter<'_, S> { + fn next_back(&mut self) -> Option { + match self.inner { + IterInner::End => None, + IterInner::Byte(ref mut i) => i.next_back().map(ValueRef::Byte), + IterInner::Short(ref mut i) => i.next_back().map(ValueRef::Short), + IterInner::Int(ref mut i) => i.next_back().map(ValueRef::Int), + IterInner::Long(ref mut i) => i.next_back().map(ValueRef::Long), + IterInner::Float(ref mut i) => i.next_back().map(ValueRef::Float), + IterInner::Double(ref mut i) => i.next_back().map(ValueRef::Double), + IterInner::ByteArray(ref mut i) => { + i.next_back().map(|arr| ValueRef::ByteArray(&arr[..])) + } + IterInner::String(ref mut i) => i.next_back().map(ValueRef::String), + IterInner::List(ref mut i) => i.next_back().map(ValueRef::List), + IterInner::Compound(ref mut i) => i.next_back().map(ValueRef::Compound), + IterInner::IntArray(ref mut i) => i.next_back().map(|arr| ValueRef::IntArray(&arr[..])), + IterInner::LongArray(ref mut i) => { + i.next_back().map(|arr| ValueRef::LongArray(&arr[..])) + } + } + } +} + +impl ExactSizeIterator for Iter<'_, S> { + fn len(&self) -> usize { + match self.inner { + IterInner::End => 0, + IterInner::Byte(ref i) => i.len(), + IterInner::Short(ref i) => i.len(), + IterInner::Int(ref i) => i.len(), + IterInner::Long(ref i) => i.len(), + IterInner::Float(ref i) => i.len(), + IterInner::Double(ref i) => i.len(), + IterInner::ByteArray(ref i) => i.len(), + IterInner::String(ref i) => i.len(), + IterInner::List(ref i) => i.len(), + IterInner::Compound(ref i) => i.len(), + IterInner::IntArray(ref i) => i.len(), + IterInner::LongArray(ref i) => i.len(), + } + } +} + +impl FusedIterator for Iter<'_, S> {} + +/// The mutable borrowing iterator type for [`List`]. +pub struct IterMut<'a, S = String> { + inner: IterMutInner<'a, S>, +} + +enum IterMutInner<'a, S> { + End, + Byte(std::slice::IterMut<'a, i8>), + Short(std::slice::IterMut<'a, i16>), + Int(std::slice::IterMut<'a, i32>), + Long(std::slice::IterMut<'a, i64>), + Float(std::slice::IterMut<'a, f32>), + Double(std::slice::IterMut<'a, f64>), + ByteArray(std::slice::IterMut<'a, Vec>), + String(std::slice::IterMut<'a, S>), + List(std::slice::IterMut<'a, List>), + Compound(std::slice::IterMut<'a, Compound>), + IntArray(std::slice::IterMut<'a, Vec>), + LongArray(std::slice::IterMut<'a, Vec>), +} + +impl<'a, S> Iterator for IterMut<'a, S> { + type Item = ValueMut<'a, S>; + + fn next(&mut self) -> Option { + match self.inner { + IterMutInner::End => None, + IterMutInner::Byte(ref mut i) => i.next().map(ValueMut::Byte), + IterMutInner::Short(ref mut i) => i.next().map(ValueMut::Short), + IterMutInner::Int(ref mut i) => i.next().map(ValueMut::Int), + IterMutInner::Long(ref mut i) => i.next().map(ValueMut::Long), + IterMutInner::Float(ref mut i) => i.next().map(ValueMut::Float), + IterMutInner::Double(ref mut i) => i.next().map(ValueMut::Double), + IterMutInner::ByteArray(ref mut i) => i.next().map(ValueMut::ByteArray), + IterMutInner::String(ref mut i) => i.next().map(ValueMut::String), + IterMutInner::List(ref mut i) => i.next().map(ValueMut::List), + IterMutInner::Compound(ref mut i) => i.next().map(ValueMut::Compound), + IterMutInner::IntArray(ref mut i) => i.next().map(ValueMut::IntArray), + IterMutInner::LongArray(ref mut i) => i.next().map(ValueMut::LongArray), + } + } + + fn size_hint(&self) -> (usize, Option) { + match self.inner { + IterMutInner::End => (0, Some(0)), + IterMutInner::Byte(ref i) => i.size_hint(), + IterMutInner::Short(ref i) => i.size_hint(), + IterMutInner::Int(ref i) => i.size_hint(), + IterMutInner::Long(ref i) => i.size_hint(), + IterMutInner::Float(ref i) => i.size_hint(), + IterMutInner::Double(ref i) => i.size_hint(), + IterMutInner::ByteArray(ref i) => i.size_hint(), + IterMutInner::String(ref i) => i.size_hint(), + IterMutInner::List(ref i) => i.size_hint(), + IterMutInner::Compound(ref i) => i.size_hint(), + IterMutInner::IntArray(ref i) => i.size_hint(), + IterMutInner::LongArray(ref i) => i.size_hint(), + } + } +} + +impl DoubleEndedIterator for IterMut<'_, S> { + fn next_back(&mut self) -> Option { + match self.inner { + IterMutInner::End => None, + IterMutInner::Byte(ref mut i) => i.next_back().map(ValueMut::Byte), + IterMutInner::Short(ref mut i) => i.next_back().map(ValueMut::Short), + IterMutInner::Int(ref mut i) => i.next_back().map(ValueMut::Int), + IterMutInner::Long(ref mut i) => i.next_back().map(ValueMut::Long), + IterMutInner::Float(ref mut i) => i.next_back().map(ValueMut::Float), + IterMutInner::Double(ref mut i) => i.next_back().map(ValueMut::Double), + IterMutInner::ByteArray(ref mut i) => i.next_back().map(ValueMut::ByteArray), + IterMutInner::String(ref mut i) => i.next_back().map(ValueMut::String), + IterMutInner::List(ref mut i) => i.next_back().map(ValueMut::List), + IterMutInner::Compound(ref mut i) => i.next_back().map(ValueMut::Compound), + IterMutInner::IntArray(ref mut i) => i.next_back().map(ValueMut::IntArray), + IterMutInner::LongArray(ref mut i) => i.next_back().map(ValueMut::LongArray), + } + } +} + +impl ExactSizeIterator for IterMut<'_, S> { + fn len(&self) -> usize { + match self.inner { + IterMutInner::End => 0, + IterMutInner::Byte(ref i) => i.len(), + IterMutInner::Short(ref i) => i.len(), + IterMutInner::Int(ref i) => i.len(), + IterMutInner::Long(ref i) => i.len(), + IterMutInner::Float(ref i) => i.len(), + IterMutInner::Double(ref i) => i.len(), + IterMutInner::ByteArray(ref i) => i.len(), + IterMutInner::String(ref i) => i.len(), + IterMutInner::List(ref i) => i.len(), + IterMutInner::Compound(ref i) => i.len(), + IterMutInner::IntArray(ref i) => i.len(), + IterMutInner::LongArray(ref i) => i.len(), + } + } +} + +impl FusedIterator for IterMut<'_, S> {} diff --git a/vendor/valence/crates/valence_nbt/src/serde.rs b/vendor/valence/crates/valence_nbt/src/serde.rs new file mode 100644 index 00000000..de4994d6 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/serde.rs @@ -0,0 +1,38 @@ +use std::fmt; + +pub use ser::*; +use thiserror::Error; + +mod de; +mod ser; +#[cfg(test)] +mod tests; + +/// Errors that can occur while serializing or deserializing. +#[derive(Clone, Error, Debug)] +#[error("{0}")] +pub struct Error(Box); + +impl Error { + fn new(s: impl Into>) -> Self { + Self(s.into()) + } +} + +impl serde::de::Error for Error { + fn custom(msg: T) -> Self + where + T: fmt::Display, + { + Self::new(format!("{msg}")) + } +} + +impl serde::ser::Error for Error { + fn custom(msg: T) -> Self + where + T: fmt::Display, + { + Self::new(format!("{msg}")) + } +} diff --git a/vendor/valence/crates/valence_nbt/src/serde/de.rs b/vendor/valence/crates/valence_nbt/src/serde/de.rs new file mode 100644 index 00000000..1f35eab4 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/serde/de.rs @@ -0,0 +1,393 @@ +use std::fmt; +use std::hash::Hash; +use std::marker::PhantomData; + +use serde::de::value::{ + MapAccessDeserializer, MapDeserializer, SeqAccessDeserializer, StrDeserializer, + StringDeserializer, +}; +use serde::de::{self, IntoDeserializer, SeqAccess, Visitor}; +use serde::{Deserialize, Deserializer, forward_to_deserialize_any}; + +use super::Error; +use crate::conv::{i8_vec_into_u8_vec, u8_slice_as_i8_slice, u8_vec_into_i8_vec}; +use crate::{Compound, List, Value}; + +impl<'de, S> Deserialize<'de> for Value +where + S: Deserialize<'de> + Ord + Hash, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct ValueVisitor(PhantomData); + + impl<'de, S> Visitor<'de> for ValueVisitor + where + S: Deserialize<'de> + Ord + Hash, + { + type Value = Value; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + write!(formatter, "a valid NBT type") + } + + fn visit_bool(self, v: bool) -> Result + where + E: de::Error, + { + Ok(Value::Byte(v as _)) + } + + fn visit_i8(self, v: i8) -> Result + where + E: de::Error, + { + Ok(Value::Byte(v)) + } + + fn visit_i16(self, v: i16) -> Result + where + E: de::Error, + { + Ok(Value::Short(v)) + } + + fn visit_i32(self, v: i32) -> Result + where + E: de::Error, + { + Ok(Value::Int(v)) + } + + fn visit_i64(self, v: i64) -> Result + where + E: de::Error, + { + Ok(Value::Long(v)) + } + + fn visit_u8(self, v: u8) -> Result + where + E: de::Error, + { + Ok(Value::Byte(v as _)) + } + + fn visit_u16(self, v: u16) -> Result + where + E: de::Error, + { + Ok(Value::Short(v as _)) + } + + fn visit_u32(self, v: u32) -> Result + where + E: de::Error, + { + Ok(Value::Int(v as _)) + } + + fn visit_u64(self, v: u64) -> Result + where + E: de::Error, + { + Ok(Value::Long(v as _)) + } + + fn visit_f32(self, v: f32) -> Result + where + E: de::Error, + { + Ok(Value::Float(v)) + } + + fn visit_f64(self, v: f64) -> Result + where + E: de::Error, + { + Ok(Value::Double(v)) + } + + fn visit_str(self, v: &str) -> Result + where + E: de::Error, + { + S::deserialize(StrDeserializer::new(v)).map(Value::String) + } + + fn visit_string(self, v: String) -> Result + where + E: de::Error, + { + S::deserialize(StringDeserializer::new(v)).map(Value::String) + } + + fn visit_bytes(self, v: &[u8]) -> Result + where + E: de::Error, + { + Ok(Value::ByteArray(u8_slice_as_i8_slice(v).into())) + } + + fn visit_byte_buf(self, v: Vec) -> Result + where + E: de::Error, + { + Ok(Value::ByteArray(u8_vec_into_i8_vec(v))) + } + + fn visit_seq(self, seq: A) -> Result + where + A: de::SeqAccess<'de>, + { + Ok(List::deserialize(SeqAccessDeserializer::new(seq))?.into()) + } + + fn visit_map(self, map: A) -> Result + where + A: de::MapAccess<'de>, + { + Ok(Compound::deserialize(MapAccessDeserializer::new(map))?.into()) + } + } + + deserializer.deserialize_any(ValueVisitor::(PhantomData)) + } +} + +impl<'de, S> Deserialize<'de> for List +where + S: Deserialize<'de> + Ord + Hash, +{ + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct ListVisitor(PhantomData); + + impl<'de, S> Visitor<'de> for ListVisitor + where + S: Deserialize<'de> + Ord + Hash, + { + type Value = List; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + write!(formatter, "a sequence or bytes") + } + + fn visit_seq(self, mut seq: A) -> Result + where + A: de::SeqAccess<'de>, + { + match seq.next_element::>()? { + Some(v) => match v { + Value::Byte(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Short(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Int(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Long(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Float(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Double(v) => deserialize_seq_remainder(v, seq, From::from), + Value::ByteArray(v) => deserialize_seq_remainder(v, seq, From::from), + Value::String(v) => deserialize_seq_remainder(v, seq, List::String), + Value::List(v) => deserialize_seq_remainder(v, seq, From::from), + Value::Compound(v) => deserialize_seq_remainder(v, seq, From::from), + Value::IntArray(v) => deserialize_seq_remainder(v, seq, From::from), + Value::LongArray(v) => deserialize_seq_remainder(v, seq, From::from), + }, + None => Ok(List::End), + } + } + + fn visit_byte_buf(self, v: Vec) -> Result + where + E: de::Error, + { + Ok(List::Byte(u8_vec_into_i8_vec(v))) + } + + fn visit_bytes(self, v: &[u8]) -> Result + where + E: de::Error, + { + Ok(List::Byte(u8_slice_as_i8_slice(v).into())) + } + } + + deserializer.deserialize_seq(ListVisitor::(PhantomData)) + } +} + +/// Deserializes the remainder of a sequence after having +/// determined the type of the first element. +fn deserialize_seq_remainder<'de, T, A, S, C>( + first: T, + mut seq: A, + conv: C, +) -> Result, A::Error> +where + T: Deserialize<'de>, + A: de::SeqAccess<'de>, + C: FnOnce(Vec) -> List, +{ + let mut vec = match seq.size_hint() { + Some(n) => Vec::with_capacity(n + 1), + None => Vec::new(), + }; + + vec.push(first); + + while let Some(v) = seq.next_element()? { + vec.push(v); + } + + Ok(conv(vec)) +} + +impl<'de> Deserializer<'de> for Compound { + type Error = Error; + + fn deserialize_any(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + visitor.visit_map(MapDeserializer::new(self.into_iter())) + } + + forward_to_deserialize_any! { + bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string + bytes byte_buf option unit unit_struct newtype_struct seq tuple + tuple_struct map struct enum identifier ignored_any + } +} + +impl<'de> IntoDeserializer<'de, Error> for Compound { + type Deserializer = Self; + + fn into_deserializer(self) -> Self::Deserializer { + self + } +} + +impl<'de> Deserializer<'de> for Value { + type Error = Error; + + fn deserialize_any(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + match self { + Value::Byte(v) => visitor.visit_i8(v), + Value::Short(v) => visitor.visit_i16(v), + Value::Int(v) => visitor.visit_i32(v), + Value::Long(v) => visitor.visit_i64(v), + Value::Float(v) => visitor.visit_f32(v), + Value::Double(v) => visitor.visit_f64(v), + Value::ByteArray(v) => visitor.visit_byte_buf(i8_vec_into_u8_vec(v)), + Value::String(v) => visitor.visit_string(v), + Value::List(v) => v.deserialize_any(visitor), + Value::Compound(v) => v.into_deserializer().deserialize_any(visitor), + Value::IntArray(v) => v.into_deserializer().deserialize_any(visitor), + Value::LongArray(v) => v.into_deserializer().deserialize_any(visitor), + } + } + + fn deserialize_bool(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + match self { + Value::Byte(b) => visitor.visit_bool(b != 0), + _ => self.deserialize_any(visitor), + } + } + + fn deserialize_option(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + visitor.visit_some(self) + } + + fn deserialize_enum( + self, + _name: &'static str, + _variants: &'static [&'static str], + visitor: V, + ) -> Result + where + V: Visitor<'de>, + { + match self { + Value::String(s) => visitor.visit_enum(s.into_deserializer()), // Unit variant. + other => other.deserialize_any(visitor), + } + } + + forward_to_deserialize_any! { + i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string + bytes byte_buf unit unit_struct newtype_struct seq tuple + tuple_struct map struct identifier ignored_any + } +} + +impl<'de> IntoDeserializer<'de, Error> for Value { + type Deserializer = Self; + + fn into_deserializer(self) -> Self::Deserializer { + self + } +} + +impl<'de> Deserializer<'de> for List { + type Error = Error; + + fn deserialize_any(self, visitor: V) -> Result + where + V: Visitor<'de>, + { + struct EndSeqAccess; + + impl<'de> SeqAccess<'de> for EndSeqAccess { + type Error = Error; + + fn next_element_seed(&mut self, _seed: T) -> Result, Self::Error> + where + T: de::DeserializeSeed<'de>, + { + Ok(None) + } + } + + match self { + List::End => visitor.visit_seq(EndSeqAccess), + List::Byte(v) => visitor.visit_byte_buf(i8_vec_into_u8_vec(v)), + List::Short(v) => v.into_deserializer().deserialize_any(visitor), + List::Int(v) => v.into_deserializer().deserialize_any(visitor), + List::Long(v) => v.into_deserializer().deserialize_any(visitor), + List::Float(v) => v.into_deserializer().deserialize_any(visitor), + List::Double(v) => v.into_deserializer().deserialize_any(visitor), + List::ByteArray(v) => v.into_deserializer().deserialize_any(visitor), + List::String(v) => v.into_deserializer().deserialize_any(visitor), + List::List(v) => v.into_deserializer().deserialize_any(visitor), + List::Compound(v) => v.into_deserializer().deserialize_any(visitor), + List::IntArray(v) => v.into_deserializer().deserialize_any(visitor), + List::LongArray(v) => v.into_deserializer().deserialize_any(visitor), + } + } + + forward_to_deserialize_any! { + bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string + bytes byte_buf option unit unit_struct newtype_struct seq tuple + tuple_struct map struct enum identifier ignored_any + } +} + +impl<'de> IntoDeserializer<'de, Error> for List { + type Deserializer = Self; + + fn into_deserializer(self) -> Self::Deserializer { + self + } +} diff --git a/vendor/valence/crates/valence_nbt/src/serde/ser.rs b/vendor/valence/crates/valence_nbt/src/serde/ser.rs new file mode 100644 index 00000000..d568fd0d --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/serde/ser.rs @@ -0,0 +1,623 @@ +use std::hash::Hash; +use std::marker::PhantomData; + +use serde::ser::{Impossible, SerializeMap, SerializeSeq, SerializeStruct}; +use serde::{Serialize, Serializer}; + +use super::Error; +use crate::conv::{i8_slice_as_u8_slice, u8_vec_into_i8_vec}; +use crate::{Compound, List, Value}; + +impl Serialize for Value +where + Str: Serialize + Ord + Hash, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + Value::Byte(v) => serializer.serialize_i8(*v), + Value::Short(v) => serializer.serialize_i16(*v), + Value::Int(v) => serializer.serialize_i32(*v), + Value::Long(v) => serializer.serialize_i64(*v), + Value::Float(v) => serializer.serialize_f32(*v), + Value::Double(v) => serializer.serialize_f64(*v), + Value::ByteArray(v) => serializer.serialize_bytes(i8_slice_as_u8_slice(v)), + Value::String(v) => v.serialize(serializer), + Value::List(v) => v.serialize(serializer), + Value::Compound(v) => v.serialize(serializer), + Value::IntArray(v) => v.serialize(serializer), + Value::LongArray(v) => v.serialize(serializer), + } + } +} + +impl Serialize for List +where + Str: Serialize + Ord + Hash, +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer, + { + match self { + List::End => serializer.serialize_seq(Some(0))?.end(), + List::Byte(v) => v.serialize(serializer), + List::Short(v) => v.serialize(serializer), + List::Int(v) => v.serialize(serializer), + List::Long(v) => v.serialize(serializer), + List::Float(v) => v.serialize(serializer), + List::Double(v) => v.serialize(serializer), + List::ByteArray(v) => v.serialize(serializer), + List::String(v) => v.serialize(serializer), + List::List(v) => v.serialize(serializer), + List::Compound(v) => v.serialize(serializer), + List::IntArray(v) => v.serialize(serializer), + List::LongArray(v) => v.serialize(serializer), + } + } +} + +macro_rules! unsupported { + ($lit:literal) => { + Err(Error::new(concat!("unsupported type: ", $lit))) + }; +} + +/// [`Serializer`] whose output is [`Compound`]. +pub struct CompoundSerializer; + +impl Serializer for CompoundSerializer { + type Ok = Compound; + + type Error = Error; + + type SerializeSeq = Impossible; + + type SerializeTuple = Impossible; + + type SerializeTupleStruct = Impossible; + + type SerializeTupleVariant = Impossible; + + type SerializeMap = GenericSerializeMap; + + type SerializeStruct = GenericSerializeStruct; + + type SerializeStructVariant = Impossible; + + fn serialize_bool(self, _v: bool) -> Result { + unsupported!("bool") + } + + fn serialize_i8(self, _v: i8) -> Result { + unsupported!("i8") + } + + fn serialize_i16(self, _v: i16) -> Result { + unsupported!("i16") + } + + fn serialize_i32(self, _v: i32) -> Result { + unsupported!("i32") + } + + fn serialize_i64(self, _v: i64) -> Result { + unsupported!("i64") + } + + fn serialize_u8(self, _v: u8) -> Result { + unsupported!("u8") + } + + fn serialize_u16(self, _v: u16) -> Result { + unsupported!("u16") + } + + fn serialize_u32(self, _v: u32) -> Result { + unsupported!("u32") + } + + fn serialize_u64(self, _v: u64) -> Result { + unsupported!("u64") + } + + fn serialize_f32(self, _v: f32) -> Result { + unsupported!("f32") + } + + fn serialize_f64(self, _v: f64) -> Result { + unsupported!("f64") + } + + fn serialize_char(self, _v: char) -> Result { + unsupported!("char") + } + + fn serialize_str(self, _v: &str) -> Result { + unsupported!("str") + } + + fn serialize_bytes(self, _v: &[u8]) -> Result { + unsupported!("bytes") + } + + fn serialize_none(self) -> Result { + unsupported!("none") + } + + fn serialize_some(self, _value: &T) -> Result + where + T: ?Sized + Serialize, + { + unsupported!("some") + } + + fn serialize_unit(self) -> Result { + unsupported!("unit") + } + + fn serialize_unit_struct(self, _name: &'static str) -> Result { + unsupported!("unit struct") + } + + fn serialize_unit_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + ) -> Result { + unsupported!("unit variant") + } + + fn serialize_newtype_struct( + self, + _name: &'static str, + _value: &T, + ) -> Result + where + T: ?Sized + Serialize, + { + unsupported!("newtype struct") + } + + fn serialize_newtype_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _value: &T, + ) -> Result + where + T: ?Sized + Serialize, + { + unsupported!("newtype variant") + } + + fn serialize_seq(self, _len: Option) -> Result { + unsupported!("seq") + } + + fn serialize_tuple(self, _len: usize) -> Result { + unsupported!("tuple") + } + + fn serialize_tuple_struct( + self, + _name: &'static str, + _len: usize, + ) -> Result { + unsupported!("tuple struct") + } + + fn serialize_tuple_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unsupported!("tuple variant") + } + + fn serialize_map(self, len: Option) -> Result { + Ok(GenericSerializeMap::new(len)) + } + + fn serialize_struct( + self, + _name: &'static str, + len: usize, + ) -> Result { + Ok(GenericSerializeStruct::new(len)) + } + + fn serialize_struct_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unsupported!("struct variant") + } +} + +/// [`Serializer`] whose output is [`Value`]. +struct ValueSerializer; + +impl Serializer for ValueSerializer { + type Ok = Value; + + type Error = Error; + + type SerializeSeq = ValueSerializeSeq; + + type SerializeTuple = Impossible; + + type SerializeTupleStruct = Impossible; + + type SerializeTupleVariant = Impossible; + + type SerializeMap = GenericSerializeMap; + + type SerializeStruct = GenericSerializeStruct; + + type SerializeStructVariant = Impossible; + + fn serialize_bool(self, v: bool) -> Result { + Ok(Value::Byte(v as _)) + } + + fn serialize_i8(self, v: i8) -> Result { + Ok(Value::Byte(v)) + } + + fn serialize_i16(self, v: i16) -> Result { + Ok(Value::Short(v)) + } + + fn serialize_i32(self, v: i32) -> Result { + Ok(Value::Int(v)) + } + + fn serialize_i64(self, v: i64) -> Result { + Ok(Value::Long(v)) + } + + fn serialize_u8(self, v: u8) -> Result { + Ok(Value::Byte(v as _)) + } + + fn serialize_u16(self, v: u16) -> Result { + Ok(Value::Short(v as _)) + } + + fn serialize_u32(self, v: u32) -> Result { + Ok(Value::Int(v as _)) + } + + fn serialize_u64(self, v: u64) -> Result { + Ok(Value::Long(v as _)) + } + + fn serialize_f32(self, v: f32) -> Result { + Ok(Value::Float(v)) + } + + fn serialize_f64(self, v: f64) -> Result { + Ok(Value::Double(v)) + } + + fn serialize_char(self, v: char) -> Result { + Ok(Value::String(v.into())) + } + + fn serialize_str(self, v: &str) -> Result { + Ok(Value::String(v.into())) + } + + fn serialize_bytes(self, v: &[u8]) -> Result { + Ok(Value::ByteArray(u8_vec_into_i8_vec(v.into()))) + } + + fn serialize_none(self) -> Result { + unsupported!("none") + } + + fn serialize_some(self, value: &T) -> Result + where + T: ?Sized + Serialize, + { + value.serialize(self) + } + + fn serialize_unit(self) -> Result { + unsupported!("unit") + } + + fn serialize_unit_struct(self, _name: &'static str) -> Result { + self.serialize_unit() + } + + fn serialize_unit_variant( + self, + _name: &'static str, + _variant_index: u32, + variant: &'static str, + ) -> Result { + Ok(Value::String(variant.into())) + } + + fn serialize_newtype_struct( + self, + _name: &'static str, + value: &T, + ) -> Result + where + T: ?Sized + Serialize, + { + value.serialize(self) + } + + fn serialize_newtype_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _value: &T, + ) -> Result + where + T: ?Sized + Serialize, + { + unsupported!("newtype variant") + } + + fn serialize_seq(self, len: Option) -> Result { + Ok(ValueSerializeSeq::End { + len: len.unwrap_or(0), + }) + } + + fn serialize_tuple(self, _len: usize) -> Result { + unsupported!("tuple") + } + + fn serialize_tuple_struct( + self, + _name: &'static str, + _len: usize, + ) -> Result { + unsupported!("tuple struct") + } + + fn serialize_tuple_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unsupported!("tuple variant") + } + + fn serialize_map(self, len: Option) -> Result { + Ok(GenericSerializeMap::new(len)) + } + + fn serialize_struct( + self, + _name: &'static str, + len: usize, + ) -> Result { + Ok(GenericSerializeStruct::new(len)) + } + + fn serialize_struct_variant( + self, + _name: &'static str, + _variant_index: u32, + _variant: &'static str, + _len: usize, + ) -> Result { + unsupported!("struct variant") + } +} + +enum ValueSerializeSeq { + End { len: usize }, + Byte(Vec), + Short(Vec), + Int(Vec), + Long(Vec), + Float(Vec), + Double(Vec), + ByteArray(Vec>), + String(Vec), + List(Vec), + Compound(Vec), + IntArray(Vec>), + LongArray(Vec>), +} + +impl SerializeSeq for ValueSerializeSeq { + type Ok = Value; + + type Error = Error; + + fn serialize_element(&mut self, value: &T) -> Result<(), Self::Error> + where + T: ?Sized + Serialize, + { + macro_rules! serialize_variant { + ($variant:ident, $vec:ident, $elem:ident) => {{ + match $elem.serialize(ValueSerializer)? { + Value::$variant(val) => { + $vec.push(val); + Ok(()) + } + _ => Err(Error::new(concat!( + "heterogeneous NBT list (expected `", + stringify!($variant), + "` element)" + ))), + } + }}; + } + + match self { + Self::End { len } => { + fn vec(elem: T, len: usize) -> Vec { + let mut vec = Vec::with_capacity(len); + vec.push(elem); + vec + } + + // Set the first element of the list. + *self = match value.serialize(ValueSerializer)? { + Value::Byte(v) => Self::Byte(vec(v, *len)), + Value::Short(v) => Self::Short(vec(v, *len)), + Value::Int(v) => Self::Int(vec(v, *len)), + Value::Long(v) => Self::Long(vec(v, *len)), + Value::Float(v) => Self::Float(vec(v, *len)), + Value::Double(v) => Self::Double(vec(v, *len)), + Value::ByteArray(v) => Self::ByteArray(vec(v, *len)), + Value::String(v) => Self::String(vec(v, *len)), + Value::List(v) => Self::List(vec(v, *len)), + Value::Compound(v) => Self::Compound(vec(v, *len)), + Value::IntArray(v) => Self::IntArray(vec(v, *len)), + Value::LongArray(v) => Self::LongArray(vec(v, *len)), + }; + Ok(()) + } + Self::Byte(v) => serialize_variant!(Byte, v, value), + Self::Short(v) => serialize_variant!(Short, v, value), + Self::Int(v) => serialize_variant!(Int, v, value), + Self::Long(v) => serialize_variant!(Long, v, value), + Self::Float(v) => serialize_variant!(Float, v, value), + Self::Double(v) => serialize_variant!(Double, v, value), + Self::ByteArray(v) => serialize_variant!(ByteArray, v, value), + Self::String(v) => serialize_variant!(String, v, value), + Self::List(v) => serialize_variant!(List, v, value), + Self::Compound(v) => serialize_variant!(Compound, v, value), + Self::IntArray(v) => serialize_variant!(IntArray, v, value), + Self::LongArray(v) => serialize_variant!(LongArray, v, value), + } + } + + fn end(self) -> Result { + Ok(match self { + Self::End { .. } => List::End.into(), + Self::Byte(v) => v.into(), + Self::Short(v) => List::Short(v).into(), + Self::Int(v) => v.into(), + Self::Long(v) => List::Long(v).into(), + Self::Float(v) => List::Float(v).into(), + Self::Double(v) => List::Double(v).into(), + Self::ByteArray(v) => List::ByteArray(v).into(), + Self::String(v) => List::String(v).into(), + Self::List(v) => List::List(v).into(), + Self::Compound(v) => List::Compound(v).into(), + Self::IntArray(v) => List::IntArray(v).into(), + Self::LongArray(v) => List::LongArray(v).into(), + }) + } +} + +#[doc(hidden)] +pub struct GenericSerializeMap { + /// Temp storage for `serialize_key`. + key: Option, + res: Compound, + _marker: PhantomData, +} + +impl GenericSerializeMap { + pub fn new(len: Option) -> Self { + Self { + key: None, + res: Compound::with_capacity(len.unwrap_or(0)), + _marker: PhantomData, + } + } +} + +impl SerializeMap for GenericSerializeMap +where + Compound: Into, +{ + type Ok = Ok; + + type Error = Error; + + fn serialize_key(&mut self, key: &T) -> Result<(), Self::Error> + where + T: ?Sized + Serialize, + { + debug_assert!( + self.key.is_none(), + "call to `serialize_key` must be followed by `serialize_value`" + ); + + match key.serialize(ValueSerializer)? { + Value::String(s) => { + self.key = Some(s); + Ok(()) + } + _ => Err(Error::new("invalid map key type (expected string)")), + } + } + + fn serialize_value(&mut self, value: &T) -> Result<(), Self::Error> + where + T: ?Sized + Serialize, + { + let key = self + .key + .take() + .expect("missing previous call to `serialize_key`"); + self.res.insert(key, value.serialize(ValueSerializer)?); + Ok(()) + } + + fn end(self) -> Result { + Ok(self.res.into()) + } +} + +#[doc(hidden)] +pub struct GenericSerializeStruct { + c: Compound, + _marker: PhantomData, +} + +impl GenericSerializeStruct { + fn new(len: usize) -> Self { + Self { + c: Compound::with_capacity(len), + _marker: PhantomData, + } + } +} + +impl SerializeStruct for GenericSerializeStruct +where + Compound: Into, +{ + type Ok = Ok; + + type Error = Error; + + fn serialize_field(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error> + where + T: ?Sized + Serialize, + { + self.c.insert(key, value.serialize(ValueSerializer)?); + Ok(()) + } + + fn end(self) -> Result { + Ok(self.c.into()) + } +} diff --git a/vendor/valence/crates/valence_nbt/src/serde/tests.rs b/vendor/valence/crates/valence_nbt/src/serde/tests.rs new file mode 100644 index 00000000..177ad725 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/serde/tests.rs @@ -0,0 +1,109 @@ +use pretty_assertions::assert_eq; +use serde::{Deserialize, Serialize}; +use serde_json::json; + +use super::*; +use crate::{Compound, List, compound}; + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +struct Struct { + foo: i32, + bar: StructInner, + baz: String, + quux: Vec, + blah: EnumInner, +} + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +struct StructInner { + a: bool, + b: i64, + c: Vec>, + d: Vec, +} + +#[derive(Serialize, Deserialize, PartialEq, Debug)] +enum EnumInner { + A, + B, + C, +} + +fn make_struct() -> Struct { + Struct { + foo: i32::MIN, + bar: StructInner { + a: true, + b: 123456789, + c: vec![vec![1, 2, 3], vec![4, 5, 6]], + d: vec![], + }, + baz: "🤨".into(), + quux: vec![std::f32::consts::PI, f32::MAX, f32::MIN], + blah: EnumInner::B, + } +} + +fn make_compound() -> Compound { + compound! { + "foo" => i32::MIN, + "bar" => compound! { + "a" => true, + "b" => 123456789_i64, + "c" => List::IntArray(vec![vec![1, 2, 3], vec![4, 5, 6]]), + "d" => List::End, + }, + "baz" => "🤨", + "quux" => List::Float(vec![ + std::f32::consts::PI, + f32::MAX, + f32::MIN, + ]), + "blah" => "B" + } +} + +fn make_json() -> serde_json::Value { + json!({ + "foo": i32::MIN, + "bar": { + "a": true, + "b": 123456789_i64, + "c": [[1, 2, 3], [4, 5, 6]], + "d": [] + }, + "baz": "🤨", + "quux": [ + std::f32::consts::PI, + f32::MAX, + f32::MIN, + ], + "blah": "B" + }) +} + +#[test] +fn struct_to_compound() { + let c = make_struct().serialize(CompoundSerializer).unwrap(); + + assert_eq!(c, make_compound()); +} + +#[test] +fn compound_to_struct() { + let s = Struct::deserialize(make_compound()).unwrap(); + + assert_eq!(s, make_struct()); +} + +#[test] +fn compound_to_json() { + let mut j = serde_json::to_value(make_compound()).unwrap(); + + // Bools map to bytes in NBT, but the result should be the same otherwise. + let p = j.pointer_mut("/bar/a").unwrap(); + assert_eq!(*p, serde_json::Value::from(1)); + *p = true.into(); + + assert_eq!(j, make_json()); +} diff --git a/vendor/valence/crates/valence_nbt/src/snbt.rs b/vendor/valence/crates/valence_nbt/src/snbt.rs new file mode 100644 index 00000000..7a589eb9 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/snbt.rs @@ -0,0 +1,726 @@ +use std::error::Error; +use std::fmt::{Display, Formatter}; +use std::iter::Peekable; +use std::str::Chars; + +use crate::{Compound, List, Value}; + +const STRING_MAX_LEN: usize = 32767; +/// Maximum recursion depth to prevent overflowing the call stack. +const MAX_DEPTH: usize = 512; + +#[derive(Debug, Clone, PartialEq, Eq, Copy)] +pub enum SnbtErrorKind { + ReachEndOfStream, + InvalidEscapeSequence, + EmptyKeyInCompound, + ExpectColon, + ExpectValue, + ExpectComma, + WrongTypeInArray, + DifferentTypesInList, + LongString, + TrailingData, + DepthLimitExceeded, +} + +impl Display for SnbtErrorKind { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + use SnbtErrorKind::*; + match self { + ReachEndOfStream => write!(f, "reach end of stream"), + InvalidEscapeSequence => write!(f, "invalid escape sequence"), + EmptyKeyInCompound => write!(f, "empty key in compound"), + ExpectColon => write!(f, "expect colon"), + ExpectValue => write!(f, "expect value"), + ExpectComma => write!(f, "expect comma"), + WrongTypeInArray => write!(f, "wrong type in array"), + DifferentTypesInList => write!(f, "different types in list"), + LongString => write!(f, "long string"), + TrailingData => write!(f, "extra data after end"), + DepthLimitExceeded => write!(f, "depth limit exceeded"), + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Copy)] +pub struct SnbtError { + pub error_type: SnbtErrorKind, + pub line: usize, + pub column: usize, +} + +impl SnbtError { + pub fn new(error_type: SnbtErrorKind, line: usize, column: usize) -> Self { + Self { + error_type, + line, + column, + } + } +} + +impl Display for SnbtError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "@ {},{}: {}", self.line, self.column, self.error_type) + } +} + +impl Error for SnbtError {} + +type Result = std::result::Result; + +pub struct SnbtReader<'a> { + line: usize, + column: usize, + index: usize, + depth: usize, + iter: Peekable>, + pushed_back: Option, +} + +impl<'a> SnbtReader<'a> { + pub fn new(input: &'a str) -> Self { + Self { + line: 1, + column: 1, + index: 0, + depth: 0, + iter: input.chars().peekable(), + pushed_back: None, + } + } + + fn check_depth(&mut self, f: impl FnOnce(&mut Self) -> Result) -> Result { + if self.depth >= MAX_DEPTH { + Err(self.make_error(SnbtErrorKind::DepthLimitExceeded)) + } else { + self.depth += 1; + let res = f(self); + self.depth -= 1; + res + } + } + + fn make_error(&self, error_type: SnbtErrorKind) -> SnbtError { + SnbtError::new(error_type, self.line, self.column) + } + + fn peek(&mut self) -> Result { + if let Some(c) = self.pushed_back { + Ok(c) + } else { + self.iter + .peek() + .copied() + .ok_or_else(|| self.make_error(SnbtErrorKind::ReachEndOfStream)) + } + } + + fn next(&mut self) { + if self.pushed_back.is_some() { + self.pushed_back = None; + return; + } + + let result = self.iter.next(); + + if let Some(c) = result { + if c == '\n' { + self.line += 1; + self.column = 1; + } else { + self.column += 1; + } + self.index += c.len_utf8(); + } + } + + /// Push back a char, only one char can be pushed back + fn push_back(&mut self, c: char) { + if c == '\n' { + self.line -= 1; + self.column = 1; + } else { + self.column -= 1; + } + + self.index -= c.len_utf8(); + + match self.pushed_back { + Some(_) => panic!("Can't push back two chars"), + None => self.pushed_back = Some(c), + }; + } + + fn skip_whitespace(&mut self) { + loop { + match self.peek() { + Ok(c) if c.is_whitespace() => self.next(), + _ => break, + }; + } + } + + fn read_string(&mut self) -> Result { + let first = self.peek()?; + + let str = match first { + '\"' | '\'' => self.read_quoted_string(), + _ => self.read_unquoted_string(), + }?; + + if str.len() > STRING_MAX_LEN { + return Err(self.make_error(SnbtErrorKind::LongString)); + } + + Ok(str) + } + + fn read_unquoted_string(&mut self) -> Result { + let mut result = String::new(); + + loop { + let input = self.peek(); + match input { + Ok('a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '-' | '+' | '.') => { + result.push(input?); + self.next(); + } + _ => break, + } + } + + Ok(result) + } + + fn read_quoted_string(&mut self) -> Result { + let quote = self.peek()?; + self.next(); + + let mut result = String::new(); + loop { + let input = self.peek(); + match input { + Ok(c) if c == quote => { + self.next(); + break; + } + Ok('\\') => { + self.next(); + + let escape = self.peek()?; + if escape == quote || escape == '\\' { + result.push(escape); + } else { + return Err(self.make_error(SnbtErrorKind::InvalidEscapeSequence)); + } + + self.next(); + } + Ok(c) => { + result.push(c); + self.next(); + } + Err(e) => return Err(e), + } + } + if result.len() > STRING_MAX_LEN { + return Err(self.make_error(SnbtErrorKind::LongString)); + } + Ok(result) + } + + fn parse_compound(&mut self) -> Result { + self.next(); + self.skip_whitespace(); + + let mut cpd = Compound::new(); + while self.peek()? != '}' { + let key = self.read_string()?; + + self.skip_whitespace(); + + if key.is_empty() { + return Err(self.make_error(SnbtErrorKind::EmptyKeyInCompound)); + } + + if self.peek()? != ':' { + return Err(self.make_error(SnbtErrorKind::ExpectColon)); + } + + self.next(); + self.skip_whitespace(); + + let value = self.parse_element()?; + + self.skip_whitespace(); + if self.peek()? == ',' { + self.next(); + self.skip_whitespace(); + } else if self.peek()? != '}' { + return Err(self.make_error(SnbtErrorKind::ExpectComma)); + } + + cpd.insert(key, value); + } + self.next(); + Ok(cpd) + } + + fn continue_parse_list(&mut self) -> Result { + self.skip_whitespace(); + + let mut list = List::End; + + while self.peek()? != ']' { + let value = self.parse_element()?; + self.skip_whitespace(); + + match (&mut list, value) { + (list @ List::End, value) => *list = value.into(), + (List::Byte(l), Value::Byte(v)) => l.push(v), + (List::Short(l), Value::Short(v)) => l.push(v), + (List::Int(l), Value::Int(v)) => l.push(v), + (List::Long(l), Value::Long(v)) => l.push(v), + (List::Float(l), Value::Float(v)) => l.push(v), + (List::Double(l), Value::Double(v)) => l.push(v), + (List::ByteArray(l), Value::ByteArray(v)) => l.push(v), + (List::String(l), Value::String(v)) => l.push(v), + (List::List(l), Value::List(v)) => l.push(v), + (List::Compound(l), Value::Compound(v)) => l.push(v), + (List::IntArray(l), Value::IntArray(v)) => l.push(v), + (List::LongArray(l), Value::LongArray(v)) => l.push(v), + _ => return Err(self.make_error(SnbtErrorKind::DifferentTypesInList)), + } + + if self.peek()? == ',' { + self.next(); + self.skip_whitespace(); + } else if self.peek()? != ']' { + return Err(self.make_error(SnbtErrorKind::ExpectComma)); + } + } + self.next(); + + Ok(list) + } + + fn parse_list_like(&mut self) -> Result { + self.next(); + + let type_char = self.peek()?; + + let mut values = match type_char { + 'B' => Value::ByteArray(vec![]), + 'I' => Value::IntArray(vec![]), + 'L' => Value::LongArray(vec![]), + _ => return self.check_depth(|v| Ok(v.continue_parse_list()?.into())), + }; + + self.next(); + + if self.peek()? != ';' { + self.push_back(type_char); + return self.check_depth(|v| Ok(v.continue_parse_list()?.into())); + } + + self.next(); + self.skip_whitespace(); + + while self.peek()? != ']' { + let value = self.parse_element()?; + + match (&mut values, value) { + (Value::ByteArray(l), Value::Byte(v)) => l.push(v), + (Value::IntArray(l), Value::Int(v)) => l.push(v), + (Value::LongArray(l), Value::Long(v)) => l.push(v), + _ => return Err(self.make_error(SnbtErrorKind::WrongTypeInArray)), + } + + self.skip_whitespace(); + if self.peek()? == ',' { + self.next(); + self.skip_whitespace(); + } else if self.peek()? != ']' { + return Err(self.make_error(SnbtErrorKind::ExpectComma)); + } + } + + self.next(); + + Ok(values) + } + + fn parse_primitive(&mut self) -> Result { + macro_rules! try_ret { + // Try possible solution until one works + ($v:expr) => {{ + match $v { + Ok(v) => return Ok(v.into()), + Err(_) => (), + } + }}; + } + + let target = self.read_unquoted_string()?; + + match target + .bytes() + .last() + .ok_or_else(|| self.make_error(SnbtErrorKind::ExpectValue))? + { + b'b' | b'B' => try_ret!(target[..target.len() - 1].parse::()), + b's' | b'S' => try_ret!(target[..target.len() - 1].parse::()), + b'l' | b'L' => try_ret!(target[..target.len() - 1].parse::()), + b'f' | b'F' => try_ret!(target[..target.len() - 1].parse::()), + b'd' | b'D' => try_ret!(target[..target.len() - 1].parse::()), + _ => (), + } + + match target.as_str() { + "true" => return Ok(Value::Byte(1)), + "false" => return Ok(Value::Byte(0)), + _ => { + try_ret!(target.parse::()); + try_ret!(target.parse::()); + } + }; + + if target.len() > STRING_MAX_LEN { + return Err(self.make_error(SnbtErrorKind::LongString)); + } + + Ok(Value::String(target)) + } + + /// Read the next element in the SNBT string. + /// [`SnbtErrorKind::TrailingData`] cannot be returned because it is not + /// considered to be an error. + pub fn parse_element(&mut self) -> Result { + self.skip_whitespace(); + + match self.peek()? { + '{' => self.check_depth(|v| Ok(v.parse_compound()?.into())), + '[' => self.parse_list_like(), + '"' | '\'' => self.read_quoted_string().map(|s| s.into()), + _ => self.parse_primitive(), + } + } + + pub fn read(&mut self) -> Result { + let value = self.parse_element()?; + + self.skip_whitespace(); + if self.peek().is_ok() { + return Err(self.make_error(SnbtErrorKind::TrailingData)); + } + + Ok(value) + } + + /// Get the number of bytes read. + /// It's useful when you want to read a SNBT string from an command argument + /// since there may be trailing data. + pub fn bytes_read(&self) -> usize { + self.index + } +} +/// Parse a string in SNBT format into a `Value`. +/// Assert that the string has no trailing data. +/// SNBT is quite similar to JSON, but with some differences. +/// See [the wiki](https://minecraft.wiki/w/NBT_format#SNBT_format) for more information. +/// +/// # Example +/// +/// ``` +/// use valence_nbt::Value; +/// use valence_nbt::snbt::from_snbt_str; +/// +/// let value = from_snbt_str("1f").unwrap(); +/// assert_eq!(value, Value::Float(1.0)); +/// ``` +pub fn from_snbt_str(snbt: &str) -> Result { + SnbtReader::new(snbt).read() +} + +pub struct SnbtWriter<'a> { + output: &'a mut String, +} + +impl<'a> SnbtWriter<'a> { + pub fn new(output: &'a mut String) -> Self { + Self { output } + } + + fn write_string(&mut self, s: &str) { + let mut need_quote = false; + for c in s.chars() { + if !matches!(c, 'a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '-' | '+' | '.') { + need_quote = true; + break; + } + } + + if need_quote { + self.output.push('"'); + for c in s.chars() { + match c { + '"' => self.output.push_str("\\\""), + '\\' => self.output.push_str("\\\\"), + _ => self.output.push(c), + } + } + self.output.push('"'); + } else { + self.output.push_str(s); + } + } + + fn write_primitive_array<'b>( + &mut self, + prefix: &str, + iter: impl Iterator + 'b + Copy)>, + ) { + self.output.push('['); + self.output.push_str(prefix); + + let mut first = true; + + for v in iter { + if !first { + self.output.push(','); + } + first = false; + + self.write_element(&(*v).into()); + } + + self.output.push(']'); + } + + fn write_primitive(&mut self, postfix: &str, value: impl ToString) { + self.output.push_str(&value.to_string()); + self.output.push_str(postfix); + } + + fn write_list(&mut self, list: &List) { + macro_rules! variant_impl { + ($v:expr, $handle:expr) => {{ + self.output.push('['); + + let mut first = true; + for v in $v.iter() { + if !first { + self.output.push(','); + } + first = false; + $handle(v); + } + + self.output.push(']'); + }}; + } + #[allow(clippy::redundant_closure_call)] + match list { + List::Byte(v) => variant_impl!(v, |v| self.write_primitive("b", v)), + List::Short(v) => variant_impl!(v, |v| self.write_primitive("s", v)), + List::Int(v) => variant_impl!(v, |v| self.write_primitive("", v)), + List::Long(v) => variant_impl!(v, |v| self.write_primitive("l", v)), + List::Float(v) => variant_impl!(v, |v| self.write_primitive("f", v)), + List::Double(v) => variant_impl!(v, |v| self.write_primitive("d", v)), + List::ByteArray(v) => { + variant_impl!(v, |v: &Vec| self.write_primitive_array("B", v.iter())) + } + List::IntArray(v) => { + variant_impl!(v, |v: &Vec| self.write_primitive_array("", v.iter())) + } + List::LongArray(v) => { + variant_impl!(v, |v: &Vec| self.write_primitive_array("L", v.iter())) + } + List::String(v) => variant_impl!(v, |v| self.write_string(v)), + List::List(v) => variant_impl!(v, |v| self.write_list(v)), + List::Compound(v) => variant_impl!(v, |v| self.write_compound(v)), + List::End => self.output.push_str("[]"), + } + } + + fn write_compound(&mut self, compound: &Compound) { + self.output.push('{'); + + let mut first = true; + for (k, v) in compound.iter() { + if !first { + self.output.push(','); + } + + first = false; + + self.write_string(k); + self.output.push(':'); + self.write_element(v); + } + + self.output.push('}'); + } + + /// Write a value to the output. + pub fn write_element(&mut self, value: &Value) { + use Value::*; + match value { + Byte(v) => self.write_primitive("b", v), + Short(v) => self.write_primitive("s", v), + Int(v) => self.write_primitive("", v), + Long(v) => self.write_primitive("l", v), + Float(v) => self.write_primitive("f", v), + Double(v) => self.write_primitive("d", v), + ByteArray(v) => self.write_primitive_array("B;", v.iter()), + IntArray(v) => self.write_primitive_array("I;", v.iter()), + LongArray(v) => self.write_primitive_array("L;", v.iter()), + String(v) => self.write_string(v), + List(v) => self.write_list(v), + Compound(v) => self.write_compound(v), + } + } +} + +/// Convert a value to a string in SNBT format. +pub fn to_snbt_string(value: &Value) -> String { + let mut output = String::new(); + let mut writer = SnbtWriter::new(&mut output); + + writer.write_element(value); + + output +} + +impl Display for SnbtWriter<'_> { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.output) + } +} + +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_parse() { + let str = r#" + { + foo: 1, + 'bar': 1.0, + "baz": 1.0f, + "hello'": "hello world", + "world": "hello\"world", + 1.5f: 1.5d, + 3b: 2f, + bool: false, + more: { + iarr: [I; 1, 2, 3], + larr: [L; 1L, 2L, 3L], + }, + empty: [Bibabo ], + } + "#; + + let value = from_snbt_str(str).unwrap(); + let Value::Compound(cpd) = &value else { + unreachable!() + }; + + assert_eq!(*cpd.get("foo").unwrap(), 1_i32.into()); + assert_eq!(*cpd.get("bar").unwrap(), 1_f64.into()); + assert_eq!(*cpd.get("baz").unwrap(), 1_f32.into()); + assert_eq!(*cpd.get("hello'").unwrap(), "hello world".into()); + assert_eq!(*cpd.get("world").unwrap(), "hello\"world".into()); + assert_eq!(*cpd.get("1.5f").unwrap(), 1.5_f64.into()); + assert_eq!(*cpd.get("3b").unwrap(), 2_f32.into()); + assert_eq!(*cpd.get("bool").unwrap(), 0_i8.into()); + + let Some(Value::Compound(more)) = cpd.get("more") else { + unreachable!() + }; + + assert_eq!(*more.get("iarr").unwrap(), vec![1, 2, 3].into()); + + assert_eq!(*more.get("larr").unwrap(), vec![1_i64, 2, 3].into()); + + let Value::List(List::String(list)) = cpd.get("empty").unwrap() else { + unreachable!() + }; + + assert_eq!(list[0], "Bibabo"); + + assert_eq!( + from_snbt_str("\"\\n\"").unwrap_err().error_type, + SnbtErrorKind::InvalidEscapeSequence + ); + + assert_eq!( + from_snbt_str("[L; 1]").unwrap_err().error_type, + SnbtErrorKind::WrongTypeInArray + ); + + assert_eq!( + from_snbt_str("[L; 1L, 2L, 3L").unwrap_err().error_type, + SnbtErrorKind::ReachEndOfStream + ); + + assert_eq!( + from_snbt_str("[L; 1L, 2L, 3L,]dewdwe") + .unwrap_err() + .error_type, + SnbtErrorKind::TrailingData + ); + + assert_eq!( + from_snbt_str("{ foo: }").unwrap_err().error_type, + SnbtErrorKind::ExpectValue + ); + + assert_eq!( + from_snbt_str("{ {}, }").unwrap_err().error_type, + SnbtErrorKind::EmptyKeyInCompound + ); + + assert_eq!( + from_snbt_str("{ foo 1 }").unwrap_err().error_type, + SnbtErrorKind::ExpectColon + ); + + assert_eq!( + from_snbt_str("{ foo: 1 bar: 2 }").unwrap_err().error_type, + SnbtErrorKind::ExpectComma + ); + + assert_eq!( + from_snbt_str("[{}, []]").unwrap_err().error_type, + SnbtErrorKind::DifferentTypesInList + ); + + assert_eq!( + from_snbt_str(&String::from_utf8(vec![b'e'; 32768]).unwrap()) + .unwrap_err() + .error_type, + SnbtErrorKind::LongString + ); + + assert_eq!( + from_snbt_str( + &String::from_utf8([[b'['; MAX_DEPTH + 1], [b']'; MAX_DEPTH + 1]].concat()) + .unwrap() + ) + .unwrap_err() + .error_type, + SnbtErrorKind::DepthLimitExceeded + ); + + #[cfg(feature = "preserve_order")] + assert_eq!( + to_snbt_string(&value), + r#"{foo:1,bar:1d,baz:1f,"hello'":"hello world",world:"hello\"world",1.5f:1.5d,3b:2f,bool:0b,more:{iarr:[I;1,2,3],larr:[L;1l,2l,3l]},empty:[Bibabo]}"# + ); + } +} diff --git a/vendor/valence/crates/valence_nbt/src/tag.rs b/vendor/valence/crates/valence_nbt/src/tag.rs new file mode 100644 index 00000000..4bc9e263 --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/tag.rs @@ -0,0 +1,18 @@ +/// One of the possible NBT data types. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub enum Tag { + // Variant order is significant! + End, + Byte, + Short, + Int, + Long, + Float, + Double, + ByteArray, + String, + List, + Compound, + IntArray, + LongArray, +} diff --git a/vendor/valence/crates/valence_nbt/src/value.rs b/vendor/valence/crates/valence_nbt/src/value.rs new file mode 100644 index 00000000..333d487e --- /dev/null +++ b/vendor/valence/crates/valence_nbt/src/value.rs @@ -0,0 +1,624 @@ +use std::borrow::Cow; +use std::hash::Hash; + +use crate::tag::Tag; +use crate::{Compound, List}; + +/// Represents an arbitrary NBT value. +#[derive(Clone, Debug)] +pub enum Value { + Byte(i8), + Short(i16), + Int(i32), + Long(i64), + Float(f32), + Double(f64), + ByteArray(Vec), + String(S), + List(List), + Compound(Compound), + IntArray(Vec), + LongArray(Vec), +} + +/// Represents a reference to an arbitrary NBT value, where the tag is not part +/// of the reference. +#[derive(Copy, Clone, Debug)] +pub enum ValueRef<'a, S = String> { + Byte(&'a i8), + Short(&'a i16), + Int(&'a i32), + Long(&'a i64), + Float(&'a f32), + Double(&'a f64), + ByteArray(&'a [i8]), + String(&'a S), + List(&'a List), + Compound(&'a Compound), + IntArray(&'a [i32]), + LongArray(&'a [i64]), +} + +/// Represents a mutable reference to an arbitrary NBT value, where the tag is +/// not part of the reference. +#[derive(Debug)] +pub enum ValueMut<'a, S = String> { + Byte(&'a mut i8), + Short(&'a mut i16), + Int(&'a mut i32), + Long(&'a mut i64), + Float(&'a mut f32), + Double(&'a mut f64), + ByteArray(&'a mut Vec), + String(&'a mut S), + List(&'a mut List), + Compound(&'a mut Compound), + IntArray(&'a mut Vec), + LongArray(&'a mut Vec), +} + +macro_rules! impl_value { + ($name:ident, $($lifetime:lifetime)?, ($($deref:tt)*), $($reference:tt)*) => { + macro_rules! as_number { + ($method_name:ident, $ty:ty, $($deref)*) => { + #[doc = concat!("If this value is a number, returns the `", stringify!($ty), "` representation of this value.")] + pub fn $method_name(&self) -> Option<$ty> { + #[allow(trivial_numeric_casts)] + match self { + Self::Byte(v) => Some($($deref)* v as $ty), + Self::Short(v) => Some($($deref)* v as $ty), + Self::Int(v) => Some($($deref)* v as $ty), + Self::Long(v) => Some($($deref)* v as $ty), + Self::Float(v) => Some(v.floor() as $ty), + Self::Double(v) => Some(v.floor() as $ty), + _ => None, + } + } + } + } + + macro_rules! as_number_float { + ($method_name:ident, $ty:ty, $($deref)*) => { + #[doc = concat!("If this value is a number, returns the `", stringify!($ty), "` representation of this value.")] + pub fn $method_name(&self) -> Option<$ty> { + #[allow(trivial_numeric_casts)] + match self { + Self::Byte(v) => Some($($deref)* v as $ty), + Self::Short(v) => Some($($deref)* v as $ty), + Self::Int(v) => Some($($deref)* v as $ty), + Self::Long(v) => Some($($deref)* v as $ty), + Self::Float(v) => Some($($deref)* v as $ty), + Self::Double(v) => Some($($deref)* v as $ty), + _ => None, + } + } + } + } + + impl <$($lifetime,)? S> $name<$($lifetime,)? S> { + /// Returns the type of this value. + pub fn tag(&self) -> Tag { + match self { + Self::Byte(_) => Tag::Byte, + Self::Short(_) => Tag::Short, + Self::Int(_) => Tag::Int, + Self::Long(_) => Tag::Long, + Self::Float(_) => Tag::Float, + Self::Double(_) => Tag::Double, + Self::ByteArray(_) => Tag::ByteArray, + Self::String(_) => Tag::String, + Self::List(_) => Tag::List, + Self::Compound(_) => Tag::Compound, + Self::IntArray(_) => Tag::IntArray, + Self::LongArray(_) => Tag::LongArray, + } + } + + /// Returns whether this value is a number, i.e. a byte, short, int, long, float or double. + pub fn is_number(&self) -> bool { + match self { + Self::Byte(_) | Self::Short(_) | Self::Int(_) | Self::Long(_) | Self::Float(_) | Self::Double(_) => true, + _ => false, + } + } + + as_number!(as_i8, i8, $($deref)*); + as_number!(as_i16, i16, $($deref)*); + as_number!(as_i32, i32, $($deref)*); + as_number!(as_i64, i64, $($deref)*); + as_number_float!(as_f32, f32, $($deref)*); + as_number_float!(as_f64, f64, $($deref)*); + + /// If this value is a number, returns the `bool` representation of this value. + pub fn as_bool(&self) -> Option { + self.as_i8().map(|v| v != 0) + } + } + + impl <$($lifetime,)? S> From<$($reference)* i8> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* i8) -> Self { + Self::Byte(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* i16> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* i16) -> Self { + Self::Short(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* i32> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* i32) -> Self { + Self::Int(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* i64> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* i64) -> Self { + Self::Long(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* f32> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* f32) -> Self { + Self::Float(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* f64> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* f64) -> Self { + Self::Double(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* List> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* List) -> Self { + Self::List(v) + } + } + + impl <$($lifetime,)? S> From<$($reference)* Compound> for $name<$($lifetime,)? S> { + fn from(v: $($reference)* Compound) -> Self { + Self::Compound(v) + } + } + + impl <$($lifetime,)? S> PartialEq for $name<$($lifetime,)? S> where S: Ord + Hash { + fn eq(&self, other: &Self) -> bool { + match self { + Self::Byte(v) => matches!(other, Self::Byte(other_v) if v == other_v), + Self::Short(v) => matches!(other, Self::Short(other_v) if v == other_v), + Self::Int(v) => matches!(other, Self::Int(other_v) if v == other_v), + Self::Long(v) => matches!(other, Self::Long(other_v) if v == other_v), + Self::Float(v) => matches!(other, Self::Float(other_v) if v == other_v), + Self::Double(v) => matches!(other, Self::Double(other_v) if v == other_v), + Self::ByteArray(v) => matches!(other, Self::ByteArray(other_v) if v == other_v), + Self::String(v) => matches!(other, Self::String(other_v) if v == other_v), + Self::List(v) => matches!(other, Self::List(other_v) if v == other_v), + Self::Compound(v) => matches!(other, Self::Compound(other_v) if v == other_v), + Self::IntArray(v) => matches!(other, Self::IntArray(other_v) if v == other_v), + Self::LongArray(v) => matches!(other, Self::LongArray(other_v) if v == other_v), + } + } + } + } +} + +impl_value!(Value,,(*),); +impl_value!(ValueRef, 'a, (**), &'a); +impl_value!(ValueMut, 'a, (**), &'a mut); + +impl Value { + /// Converts a reference to a value to a [`ValueRef`]. + pub fn as_value_ref(&self) -> ValueRef<'_, S> { + match self { + Value::Byte(v) => ValueRef::Byte(v), + Value::Short(v) => ValueRef::Short(v), + Value::Int(v) => ValueRef::Int(v), + Value::Long(v) => ValueRef::Long(v), + Value::Float(v) => ValueRef::Float(v), + Value::Double(v) => ValueRef::Double(v), + Value::ByteArray(v) => ValueRef::ByteArray(&v[..]), + Value::String(v) => ValueRef::String(v), + Value::List(v) => ValueRef::List(v), + Value::Compound(v) => ValueRef::Compound(v), + Value::IntArray(v) => ValueRef::IntArray(&v[..]), + Value::LongArray(v) => ValueRef::LongArray(&v[..]), + } + } + + /// Converts a mutable reference to a value to a [`ValueMut`]. + pub fn as_value_mut(&mut self) -> ValueMut<'_, S> { + match self { + Value::Byte(v) => ValueMut::Byte(v), + Value::Short(v) => ValueMut::Short(v), + Value::Int(v) => ValueMut::Int(v), + Value::Long(v) => ValueMut::Long(v), + Value::Float(v) => ValueMut::Float(v), + Value::Double(v) => ValueMut::Double(v), + Value::ByteArray(v) => ValueMut::ByteArray(v), + Value::String(v) => ValueMut::String(v), + Value::List(v) => ValueMut::List(v), + Value::Compound(v) => ValueMut::Compound(v), + Value::IntArray(v) => ValueMut::IntArray(v), + Value::LongArray(v) => ValueMut::LongArray(v), + } + } +} + +impl ValueRef<'_, S> +where + S: Clone, +{ + /// Clones this value reference to a new owned [`Value`]. + pub fn to_value(&self) -> Value { + match *self { + ValueRef::Byte(v) => Value::Byte(*v), + ValueRef::Short(v) => Value::Short(*v), + ValueRef::Int(v) => Value::Int(*v), + ValueRef::Long(v) => Value::Long(*v), + ValueRef::Float(v) => Value::Float(*v), + ValueRef::Double(v) => Value::Double(*v), + ValueRef::ByteArray(v) => Value::ByteArray(v.to_vec()), + ValueRef::String(v) => Value::String(v.to_owned()), + ValueRef::List(v) => Value::List(v.clone()), + ValueRef::Compound(v) => Value::Compound(v.clone()), + ValueRef::IntArray(v) => Value::IntArray(v.to_vec()), + ValueRef::LongArray(v) => Value::LongArray(v.to_vec()), + } + } +} + +impl ValueMut<'_, S> +where + S: Clone, +{ + /// Clones this mutable value reference to a new owned [`Value`]. + pub fn to_value(&self) -> Value { + match self { + ValueMut::Byte(v) => Value::Byte(**v), + ValueMut::Short(v) => Value::Short(**v), + ValueMut::Int(v) => Value::Int(**v), + ValueMut::Long(v) => Value::Long(**v), + ValueMut::Float(v) => Value::Float(**v), + ValueMut::Double(v) => Value::Double(**v), + ValueMut::ByteArray(v) => Value::ByteArray((*v).clone()), + ValueMut::String(v) => Value::String((*v).clone()), + ValueMut::List(v) => Value::List((*v).clone()), + ValueMut::Compound(v) => Value::Compound((*v).clone()), + ValueMut::IntArray(v) => Value::IntArray((*v).clone()), + ValueMut::LongArray(v) => Value::LongArray((*v).clone()), + } + } +} + +impl<'a, S> ValueMut<'a, S> { + /// Downgrades this mutable value reference into an immutable [`ValueRef`]. + pub fn into_value_ref(self) -> ValueRef<'a, S> { + match self { + ValueMut::Byte(v) => ValueRef::Byte(v), + ValueMut::Short(v) => ValueRef::Short(v), + ValueMut::Int(v) => ValueRef::Int(v), + ValueMut::Long(v) => ValueRef::Long(v), + ValueMut::Float(v) => ValueRef::Float(v), + ValueMut::Double(v) => ValueRef::Double(v), + ValueMut::ByteArray(v) => ValueRef::ByteArray(&v[..]), + ValueMut::String(v) => ValueRef::String(v), + ValueMut::List(v) => ValueRef::List(v), + ValueMut::Compound(v) => ValueRef::Compound(v), + ValueMut::IntArray(v) => ValueRef::IntArray(&v[..]), + ValueMut::LongArray(v) => ValueRef::LongArray(&v[..]), + } + } +} + +/// Bools are usually represented as `0` or `1` bytes in NBT. +impl From for Value { + fn from(b: bool) -> Self { + Value::Byte(b as _) + } +} + +impl From> for Value { + fn from(v: Vec) -> Self { + Self::ByteArray(v) + } +} + +impl From for Value { + fn from(v: String) -> Self { + Self::String(v) + } +} + +impl From<&String> for Value { + fn from(value: &String) -> Self { + Self::String(value.clone()) + } +} + +impl<'a> From<&'a str> for Value { + fn from(v: &'a str) -> Self { + Self::String(v.to_owned()) + } +} + +impl<'a> From> for Value { + fn from(v: Cow<'a, str>) -> Self { + Self::String(v.into_owned()) + } +} + +impl From for Value> { + fn from(v: String) -> Self { + Self::String(Cow::Owned(v)) + } +} + +impl<'a> From<&'a String> for Value> { + fn from(v: &'a String) -> Self { + Self::String(Cow::Borrowed(v)) + } +} + +impl<'a> From<&'a str> for Value> { + fn from(v: &'a str) -> Self { + Self::String(Cow::Borrowed(v)) + } +} + +impl<'a> From> for Value> { + fn from(v: Cow<'a, str>) -> Self { + Self::String(v) + } +} + +#[cfg(feature = "java_string")] +impl From for Value { + fn from(v: java_string::JavaString) -> Self { + Self::String(v) + } +} + +#[cfg(feature = "java_string")] +impl From<&java_string::JavaString> for Value { + fn from(v: &java_string::JavaString) -> Self { + Self::String(v.clone()) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a java_string::JavaStr> for Value { + fn from(v: &'a java_string::JavaStr) -> Self { + Self::String(v.to_owned()) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From> for Value { + fn from(v: Cow<'a, java_string::JavaStr>) -> Self { + Self::String(v.into_owned()) + } +} + +#[cfg(feature = "java_string")] +impl From for Value { + fn from(v: String) -> Self { + Self::String(java_string::JavaString::from(v)) + } +} + +#[cfg(feature = "java_string")] +impl From<&String> for Value { + fn from(v: &String) -> Self { + Self::String(java_string::JavaString::from(v)) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a str> for Value { + fn from(v: &'a str) -> Self { + Self::String(java_string::JavaString::from(v)) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From> for Value { + fn from(v: Cow<'a, str>) -> Self { + Self::String(java_string::JavaString::from(v)) + } +} + +#[cfg(feature = "java_string")] +impl From for Value> { + fn from(v: java_string::JavaString) -> Self { + Self::String(Cow::Owned(v)) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a java_string::JavaString> for Value> { + fn from(v: &'a java_string::JavaString) -> Self { + Self::String(Cow::Borrowed(v)) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a java_string::JavaStr> for Value> { + fn from(v: &'a java_string::JavaStr) -> Self { + Self::String(Cow::Borrowed(v)) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From> for Value> { + fn from(v: Cow<'a, java_string::JavaStr>) -> Self { + Self::String(v) + } +} + +#[cfg(feature = "java_string")] +impl From for Value> { + fn from(v: String) -> Self { + Self::String(Cow::Owned(java_string::JavaString::from(v))) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a String> for Value> { + fn from(v: &'a String) -> Self { + Self::String(Cow::Borrowed(java_string::JavaStr::from_str(v))) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From<&'a str> for Value> { + fn from(v: &'a str) -> Self { + Self::String(Cow::Borrowed(java_string::JavaStr::from_str(v))) + } +} + +#[cfg(feature = "java_string")] +impl<'a> From> for Value> { + fn from(v: Cow<'a, str>) -> Self { + Self::String(match v { + Cow::Borrowed(str) => Cow::Borrowed(java_string::JavaStr::from_str(str)), + Cow::Owned(str) => Cow::Owned(java_string::JavaString::from(str)), + }) + } +} + +impl From> for Value { + fn from(v: Vec) -> Self { + Self::IntArray(v) + } +} + +impl From> for Value { + fn from(v: Vec) -> Self { + Self::LongArray(v) + } +} + +impl From> for Value +where + S: Clone, +{ + fn from(v: ValueRef) -> Self { + v.to_value() + } +} + +impl From<&ValueRef<'_, S>> for Value +where + S: Clone, +{ + fn from(v: &ValueRef) -> Self { + v.to_value() + } +} + +impl From> for Value +where + S: Clone, +{ + fn from(v: ValueMut) -> Self { + v.to_value() + } +} + +impl From<&ValueMut<'_, S>> for Value +where + S: Clone, +{ + fn from(v: &ValueMut) -> Self { + v.to_value() + } +} + +#[cfg(feature = "uuid")] +impl From for Value { + fn from(value: uuid::Uuid) -> Self { + let (most, least) = value.as_u64_pair(); + + let first = (most >> 32) as i32; + let second = most as i32; + let third = (least >> 32) as i32; + let fourth = least as i32; + + Value::IntArray(vec![first, second, third, fourth]) + } +} + +#[cfg(feature = "valence_ident")] +impl From for Value { + fn from(value: valence_ident::Ident) -> Self { + Value::String(value.as_str().to_owned()) + } +} + +impl<'a> From<&'a [i8]> for ValueRef<'a> { + fn from(v: &'a [i8]) -> Self { + Self::ByteArray(v) + } +} + +impl<'a> From<&'a String> for ValueRef<'a, String> { + fn from(v: &'a String) -> ValueRef<'a> { + Self::String(v) + } +} + +impl<'a, S> From<&'a [i32]> for ValueRef<'a, S> { + fn from(v: &'a [i32]) -> Self { + Self::IntArray(v) + } +} + +impl<'a, S> From<&'a [i64]> for ValueRef<'a, S> { + fn from(v: &'a [i64]) -> Self { + Self::LongArray(v) + } +} + +impl<'a, S> From<&'a Value> for ValueRef<'a, S> { + fn from(v: &'a Value) -> Self { + v.as_value_ref() + } +} + +impl<'a, S> From> for ValueRef<'a, S> { + fn from(v: ValueMut<'a, S>) -> Self { + v.into_value_ref() + } +} + +impl<'a, S> From<&'a mut Vec> for ValueMut<'a, S> { + fn from(v: &'a mut Vec) -> Self { + Self::ByteArray(v) + } +} + +impl<'a> From<&'a mut String> for ValueMut<'a, String> { + fn from(v: &'a mut String) -> Self { + Self::String(v) + } +} + +impl<'a, S> From<&'a mut Vec> for ValueMut<'a, S> { + fn from(v: &'a mut Vec) -> Self { + Self::IntArray(v) + } +} + +impl<'a, S> From<&'a mut Vec> for ValueMut<'a, S> { + fn from(v: &'a mut Vec) -> Self { + Self::LongArray(v) + } +} + +impl<'a, S> From<&'a mut Value> for ValueMut<'a, S> { + fn from(v: &'a mut Value) -> Self { + v.as_value_mut() + } +} diff --git a/vendor/valence/crates/valence_network/Cargo.toml b/vendor/valence/crates/valence_network/Cargo.toml new file mode 100644 index 00000000..2e26dec8 --- /dev/null +++ b/vendor/valence/crates/valence_network/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "valence_network" +description = "Login and socket code for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +# TODO: make encryption and compression optional features. + +[dependencies] +anyhow.workspace = true +async-trait.workspace = true +base64.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +bytes.workspace = true +flume.workspace = true +hmac.workspace = true +num-bigint.workspace = true +rand.workspace = true +rsa-der.workspace = true +rsa.workspace = true +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +sha1.workspace = true +sha2.workspace = true +thiserror.workspace = true +tokio.workspace = true +tracing.workspace = true +uuid.workspace = true +valence_server.workspace = true +valence_lang.workspace = true +valence_protocol = { workspace = true, features = [ + "encryption", + "compression", +] } + +[dependencies.reqwest] +workspace = true +default-features = false +# Avoid OpenSSL dependency on Linux. +features = ["rustls-tls", "json"] diff --git a/vendor/valence/crates/valence_network/README.md b/vendor/valence/crates/valence_network/README.md new file mode 100644 index 00000000..d8f7ec04 --- /dev/null +++ b/vendor/valence/crates/valence_network/README.md @@ -0,0 +1,10 @@ +# valence_network + +The plugin responsible for accepting connections and spawning clients. + +This covers everything in the "handshaking", "status" and "login" stages of the protocol, before the main "play" stage begins. Support for proxies like [Velocity] and [BungeeCord] are implemented here. + +Valence users can choose not to include `valence_network` in their project. This could be useful for testing or using Valence as an integrated server in a client. + +[Velocity]: https://papermc.io/software/velocity +[BungeeCord]: https://github.com/SpigotMC/BungeeCord diff --git a/vendor/valence/crates/valence_network/src/byte_channel.rs b/vendor/valence/crates/valence_network/src/byte_channel.rs new file mode 100644 index 00000000..6fc0fcaa --- /dev/null +++ b/vendor/valence/crates/valence_network/src/byte_channel.rs @@ -0,0 +1,254 @@ +//! A channel specifically for sending/receiving batches of bytes. + +#![allow(dead_code)] + +use std::sync::{Arc, Mutex}; + +use bytes::BytesMut; +use thiserror::Error; +use tokio::sync::Notify; + +pub(crate) fn byte_channel(limit: usize) -> (ByteSender, ByteReceiver) { + let shared = Arc::new(Shared { + mtx: Mutex::new(Inner { + bytes: BytesMut::new(), + disconnected: false, + }), + notify: Notify::new(), + limit, + }); + + let sender = ByteSender { + shared: shared.clone(), + }; + + let receiver = ByteReceiver { shared }; + + (sender, receiver) +} + +pub(crate) struct ByteSender { + shared: Arc, +} + +pub(crate) struct ByteReceiver { + shared: Arc, +} + +struct Shared { + mtx: Mutex, + notify: Notify, + limit: usize, +} + +struct Inner { + bytes: BytesMut, + disconnected: bool, +} + +impl ByteSender { + pub(crate) fn take_capacity(&mut self, additional: usize) -> BytesMut { + let mut lck = self.shared.mtx.lock().unwrap(); + + lck.bytes.reserve(additional); + + let len = lck.bytes.len(); + lck.bytes.split_off(len) + } + + pub(crate) fn try_send(&mut self, mut bytes: BytesMut) -> Result<(), TrySendError> { + let mut lck = self.shared.mtx.lock().unwrap(); + + if lck.disconnected { + return Err(TrySendError::Disconnected(bytes)); + } + + if bytes.is_empty() { + return Ok(()); + } + + let available = self.shared.limit - lck.bytes.len(); + + if bytes.len() > available { + if available > 0 { + lck.bytes.unsplit(bytes.split_to(available)); + self.shared.notify.notify_waiters(); + } + + return Err(TrySendError::Full(bytes)); + } + + lck.bytes.unsplit(bytes); + self.shared.notify.notify_waiters(); + + Ok(()) + } + + pub(crate) async fn send_async(&mut self, mut bytes: BytesMut) -> Result<(), SendError> { + loop { + { + let mut lck = self.shared.mtx.lock().unwrap(); + + if lck.disconnected { + return Err(SendError(bytes)); + } + + if bytes.is_empty() { + return Ok(()); + } + + let available = self.shared.limit - lck.bytes.len(); + + if bytes.len() <= available { + lck.bytes.unsplit(bytes); + self.shared.notify.notify_waiters(); + return Ok(()); + } + + if available > 0 { + lck.bytes.unsplit(bytes.split_to(available)); + self.shared.notify.notify_waiters(); + } + } + + self.shared.notify.notified().await; + } + } + + pub(crate) fn is_disconnected(&self) -> bool { + self.shared.mtx.lock().unwrap().disconnected + } + + pub(crate) fn limit(&self) -> usize { + self.shared.limit + } +} + +/// Contains any excess bytes not sent. +#[derive(Clone, PartialEq, Eq, Debug, Error)] +pub(crate) enum TrySendError { + #[error("sender disconnected")] + Disconnected(BytesMut), + #[error("channel full (see `Config::outgoing_capacity`)")] + Full(BytesMut), +} + +#[derive(Clone, PartialEq, Eq, Debug, Error)] +#[error("sender disconnected")] +pub(crate) struct SendError(pub(crate) BytesMut); + +impl SendError { + pub(crate) fn into_inner(self) -> BytesMut { + self.0 + } +} + +impl ByteReceiver { + pub(crate) fn try_recv(&mut self) -> Result { + let mut lck = self.shared.mtx.lock().unwrap(); + + if !lck.bytes.is_empty() { + self.shared.notify.notify_waiters(); + return Ok(lck.bytes.split()); + } + + if lck.disconnected { + return Err(TryRecvError::Disconnected); + } + + Err(TryRecvError::Empty) + } + + pub(crate) async fn recv_async(&mut self) -> Result { + loop { + { + let mut lck = self.shared.mtx.lock().unwrap(); + + if !lck.bytes.is_empty() { + self.shared.notify.notify_waiters(); + return Ok(lck.bytes.split()); + } + + if lck.disconnected { + return Err(RecvError::Disconnected); + } + } + + self.shared.notify.notified().await; + } + } + + pub(crate) fn is_disconnected(&self) -> bool { + self.shared.mtx.lock().unwrap().disconnected + } + + pub(crate) fn limit(&self) -> usize { + self.shared.limit + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Error)] +pub(crate) enum TryRecvError { + #[error("empty channel")] + Empty, + #[error("receiver disconnected")] + Disconnected, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Error)] +pub(crate) enum RecvError { + #[error("receiver disconnected")] + Disconnected, +} + +impl Drop for ByteSender { + fn drop(&mut self) { + self.shared.mtx.lock().unwrap().disconnected = true; + } +} + +impl Drop for ByteReceiver { + fn drop(&mut self) { + self.shared.mtx.lock().unwrap().disconnected = true; + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn byte_channel_try() { + let (mut sender, mut receiver) = byte_channel(4); + + assert_eq!( + sender.try_send("hello".as_bytes().into()), + Err(TrySendError::Full("o".as_bytes().into())) + ); + + assert_eq!( + receiver.try_recv().unwrap(), + BytesMut::from("hell".as_bytes()) + ); + } + + #[tokio::test] + async fn byte_channel_async() { + let (mut sender, mut receiver) = byte_channel(4); + + let t = tokio::spawn(async move { + let bytes = receiver.recv_async().await.unwrap(); + assert_eq!(&bytes[..], b"hell"); + let bytes = receiver.recv_async().await.unwrap(); + assert_eq!(&bytes[..], b"o"); + + assert_eq!(receiver.try_recv(), Err(TryRecvError::Empty)); + }); + + sender.send_async("hello".as_bytes().into()).await.unwrap(); + + t.await.unwrap(); + + assert!(sender.is_disconnected()); + } +} diff --git a/vendor/valence/crates/valence_network/src/connect.rs b/vendor/valence/crates/valence_network/src/connect.rs new file mode 100644 index 00000000..027e1428 --- /dev/null +++ b/vendor/valence/crates/valence_network/src/connect.rs @@ -0,0 +1,568 @@ +//! Handles new connections to the server and the log-in process. + +use std::io; +use std::net::SocketAddr; +use std::time::Duration; + +use anyhow::{bail, ensure, Context}; +use base64::prelude::*; +use hmac::digest::Update; +use hmac::{Hmac, Mac}; +use num_bigint::BigInt; +use reqwest::StatusCode; +use rsa::Pkcs1v15Encrypt; +use serde::Deserialize; +use serde_json::{json, Value}; +use sha1::Sha1; +use sha2::{Digest, Sha256}; +use tokio::net::{TcpListener, TcpStream}; +use tracing::{error, info, trace, warn}; +use uuid::Uuid; +use valence_lang::keys; +use valence_protocol::profile::Property; +use valence_protocol::Decode; +use valence_server::client::Properties; +use valence_server::protocol::packets::handshaking::handshake_c2s::HandshakeNextState; +use valence_server::protocol::packets::handshaking::HandshakeC2s; +use valence_server::protocol::packets::login::{ + LoginCompressionS2c, LoginDisconnectS2c, LoginHelloC2s, LoginHelloS2c, LoginKeyC2s, + LoginQueryRequestS2c, LoginQueryResponseC2s, LoginSuccessS2c, +}; +use valence_server::protocol::packets::status::{ + QueryPingC2s, QueryPongS2c, QueryRequestC2s, QueryResponseS2c, +}; +use valence_server::protocol::{PacketDecoder, PacketEncoder, RawBytes, VarInt}; +use valence_server::text::{Color, IntoText}; +use valence_server::{ident, Text, MINECRAFT_VERSION, PROTOCOL_VERSION}; + +use crate::legacy_ping::try_handle_legacy_ping; +use crate::packet_io::PacketIo; +use crate::{CleanupOnDrop, ConnectionMode, NewClientInfo, ServerListPing, SharedNetworkState}; + +/// Accepts new connections to the server as they occur. +pub(super) async fn do_accept_loop(shared: SharedNetworkState) { + let listener = match TcpListener::bind(shared.0.address).await { + Ok(listener) => listener, + Err(e) => { + error!("failed to start TCP listener: {e}"); + return; + } + }; + + let timeout = Duration::from_secs(5); + + loop { + match shared.0.connection_sema.clone().acquire_owned().await { + Ok(permit) => match listener.accept().await { + Ok((stream, remote_addr)) => { + let shared = shared.clone(); + + tokio::spawn(async move { + if let Err(e) = tokio::time::timeout( + timeout, + handle_connection(shared, stream, remote_addr), + ) + .await + { + warn!("initial connection timed out: {e}"); + } + + drop(permit); + }); + } + Err(e) => { + error!("failed to accept incoming connection: {e}"); + } + }, + // Closed semaphore indicates server shutdown. + Err(_) => return, + } + } +} + +async fn handle_connection( + shared: SharedNetworkState, + mut stream: TcpStream, + remote_addr: SocketAddr, +) { + trace!("handling connection"); + + if let Err(e) = stream.set_nodelay(true) { + error!("failed to set TCP_NODELAY: {e}"); + } + + match try_handle_legacy_ping(&shared, &mut stream, remote_addr).await { + Ok(true) => return, // Legacy ping succeeded. + Ok(false) => {} // No legacy ping. + Err(e) if e.kind() == io::ErrorKind::UnexpectedEof => {} + Err(e) => { + warn!("legacy ping ended with error: {e:#}"); + } + } + + let io = PacketIo::new(stream, PacketEncoder::new(), PacketDecoder::new()); + + if let Err(e) = handle_handshake(shared, io, remote_addr).await { + // EOF can happen if the client disconnects while joining, which isn't + // very erroneous. + if let Some(e) = e.downcast_ref::() { + if e.kind() == io::ErrorKind::UnexpectedEof { + return; + } + } + warn!("connection ended with error: {e:#}"); + } +} + +/// Basic information about a client, provided at the beginning of the +/// connection +#[derive(Default, Debug)] +pub struct HandshakeData { + /// The protocol version of the client. + pub protocol_version: i32, + /// The address that the client used to connect. + pub server_address: String, + /// The port that the client used to connect. + pub server_port: u16, +} + +async fn handle_handshake( + shared: SharedNetworkState, + mut io: PacketIo, + remote_addr: SocketAddr, +) -> anyhow::Result<()> { + let handshake = io.recv_packet::().await?; + + let next_state = handshake.next_state; + + let handshake = HandshakeData { + protocol_version: handshake.protocol_version.0, + server_address: handshake.server_address.0.to_owned(), + server_port: handshake.server_port, + }; + + // TODO: this is borked. + ensure!( + shared.0.connection_mode == ConnectionMode::BungeeCord + || handshake.server_address.encode_utf16().count() <= 255, + "handshake server address is too long" + ); + + match next_state { + HandshakeNextState::Status => handle_status(shared, io, remote_addr, handshake) + .await + .context("handling status"), + HandshakeNextState::Login => { + match handle_login(&shared, &mut io, remote_addr, handshake) + .await + .context("handling login")? + { + Some((info, cleanup)) => { + let client = io.into_client_args( + info, + shared.0.incoming_byte_limit, + shared.0.outgoing_byte_limit, + cleanup, + ); + + let _ = shared.0.new_clients_send.send_async(client).await; + + Ok(()) + } + None => Ok(()), + } + } + } +} + +async fn handle_status( + shared: SharedNetworkState, + mut io: PacketIo, + remote_addr: SocketAddr, + handshake: HandshakeData, +) -> anyhow::Result<()> { + io.recv_packet::().await?; + + match shared + .0 + .callbacks + .inner + .server_list_ping(&shared, remote_addr, &handshake) + .await + { + ServerListPing::Respond { + online_players, + max_players, + player_sample, + mut description, + favicon_png, + version_name, + protocol, + } => { + // For pre-1.16 clients, replace all webcolors with their closest + // normal colors Because webcolor support was only + // added at 1.16. + if handshake.protocol_version < 735 { + fn fallback_webcolors(txt: &mut Text) { + if let Some(Color::Rgb(ref color)) = txt.color { + txt.color = Some(Color::Named(color.to_named_lossy())); + } + for child in &mut txt.extra { + fallback_webcolors(child); + } + } + + fallback_webcolors(&mut description); + } + + let mut json = json!({ + "version": { + "name": version_name, + "protocol": protocol, + }, + "players": { + "online": online_players, + "max": max_players, + "sample": player_sample, + }, + "description": description, + }); + + if !favicon_png.is_empty() { + let mut buf = "data:image/png;base64,".to_owned(); + BASE64_STANDARD.encode_string(favicon_png, &mut buf); + json["favicon"] = Value::String(buf); + } + + io.send_packet(&QueryResponseS2c { + json: &json.to_string(), + }) + .await?; + } + ServerListPing::Ignore => return Ok(()), + } + + let QueryPingC2s { payload } = io.recv_packet().await?; + + io.send_packet(&QueryPongS2c { payload }).await?; + + Ok(()) +} + +/// Handle the login process and return the new client's data if successful. +async fn handle_login( + shared: &SharedNetworkState, + io: &mut PacketIo, + remote_addr: SocketAddr, + handshake: HandshakeData, +) -> anyhow::Result> { + if handshake.protocol_version != PROTOCOL_VERSION { + io.send_packet(&LoginDisconnectS2c { + // TODO: use correct translation key. + reason: format!("Mismatched Minecraft version (server is on {MINECRAFT_VERSION})") + .color(Color::RED) + .into(), + }) + .await?; + + return Ok(None); + } + + let LoginHelloC2s { + username, + profile_id: _, // TODO + } = io.recv_packet().await?; + + let username = username.0.to_owned(); + + let info = match shared.connection_mode() { + ConnectionMode::Online { .. } => login_online(shared, io, remote_addr, username).await?, + ConnectionMode::Offline => login_offline(remote_addr, username)?, + ConnectionMode::BungeeCord => { + login_bungeecord(remote_addr, &handshake.server_address, username)? + } + ConnectionMode::Velocity { secret } => login_velocity(io, username, secret).await?, + }; + + if shared.0.threshold.0 > 0 { + io.send_packet(&LoginCompressionS2c { + threshold: shared.0.threshold.0.into(), + }) + .await?; + + io.set_compression(shared.0.threshold); + } + + let cleanup = match shared.0.callbacks.inner.login(shared, &info).await { + Ok(f) => CleanupOnDrop(Some(f)), + Err(reason) => { + info!("disconnect at login: \"{reason}\""); + io.send_packet(&LoginDisconnectS2c { + reason: reason.into(), + }) + .await?; + return Ok(None); + } + }; + + io.send_packet(&LoginSuccessS2c { + uuid: info.uuid, + username: info.username.as_str().into(), + properties: Default::default(), + }) + .await?; + + Ok(Some((info, cleanup))) +} + +/// Login procedure for online mode. +async fn login_online( + shared: &SharedNetworkState, + io: &mut PacketIo, + remote_addr: SocketAddr, + username: String, +) -> anyhow::Result { + let my_verify_token: [u8; 16] = rand::random(); + + io.send_packet(&LoginHelloS2c { + server_id: "".into(), // Always empty + public_key: &shared.0.public_key_der, + verify_token: &my_verify_token, + }) + .await?; + + let LoginKeyC2s { + shared_secret, + verify_token: encrypted_verify_token, + } = io.recv_packet().await?; + + let shared_secret = shared + .0 + .rsa_key + .decrypt(Pkcs1v15Encrypt, shared_secret) + .context("failed to decrypt shared secret")?; + + let verify_token = shared + .0 + .rsa_key + .decrypt(Pkcs1v15Encrypt, encrypted_verify_token) + .context("failed to decrypt verify token")?; + + ensure!( + my_verify_token.as_slice() == verify_token, + "verify tokens do not match" + ); + + let crypt_key: [u8; 16] = shared_secret + .as_slice() + .try_into() + .context("shared secret has the wrong length")?; + + io.enable_encryption(&crypt_key); + + let hash = Sha1::new() + .chain(&shared_secret) + .chain(&shared.0.public_key_der) + .finalize(); + + let url = shared + .0 + .callbacks + .inner + .session_server( + shared, + username.as_str(), + &auth_digest(&hash), + &remote_addr.ip(), + ) + .await; + + let resp = shared.0.http_client.get(url).send().await?; + + match resp.status() { + StatusCode::OK => {} + StatusCode::NO_CONTENT => { + let reason = Text::translate(keys::MULTIPLAYER_DISCONNECT_UNVERIFIED_USERNAME, []); + io.send_packet(&LoginDisconnectS2c { + reason: reason.into(), + }) + .await?; + bail!("session server could not verify username"); + } + status => { + bail!("session server GET request failed (status code {status})"); + } + } + + #[derive(Deserialize)] + struct GameProfile { + id: Uuid, + name: String, + properties: Vec, + } + + let profile: GameProfile = resp.json().await.context("parsing game profile")?; + + ensure!(profile.name == username, "usernames do not match"); + + Ok(NewClientInfo { + uuid: profile.id, + username, + ip: remote_addr.ip(), + properties: Properties(profile.properties), + }) +} + +fn auth_digest(bytes: &[u8]) -> String { + BigInt::from_signed_bytes_be(bytes).to_str_radix(16) +} + +fn offline_uuid(username: &str) -> anyhow::Result { + Uuid::from_slice(&Sha256::digest(username)[..16]).map_err(Into::into) +} + +/// Login procedure for offline mode. +fn login_offline(remote_addr: SocketAddr, username: String) -> anyhow::Result { + Ok(NewClientInfo { + // Derive the client's UUID from a hash of their username. + uuid: offline_uuid(username.as_str())?, + username, + properties: Default::default(), + ip: remote_addr.ip(), + }) +} + +/// Login procedure for BungeeCord. +fn login_bungeecord( + remote_addr: SocketAddr, + server_address: &str, + username: String, +) -> anyhow::Result { + // Get data from server_address field of the handshake + let data = server_address.split('\0').take(4).collect::>(); + + // Ip of player, only given if ip_forward on bungee is true + let ip = match data.get(1) { + Some(ip) => ip.parse()?, + None => remote_addr.ip(), + }; + + // Uuid of player, only given if ip_forward on bungee is true + let uuid = match data.get(2) { + Some(uuid) => uuid.parse()?, + None => offline_uuid(username.as_str())?, + }; + + // Read properties and get textures + // Properties of player's game profile, only given if ip_forward and online_mode + // on bungee both are true + let properties: Vec = match data.get(3) { + Some(properties) => serde_json::from_str(properties) + .context("failed to parse BungeeCord player properties")?, + None => vec![], + }; + + Ok(NewClientInfo { + uuid, + username, + properties: Properties(properties), + ip, + }) +} + +/// Login procedure for Velocity. +async fn login_velocity( + io: &mut PacketIo, + username: String, + velocity_secret: &str, +) -> anyhow::Result { + const VELOCITY_MIN_SUPPORTED_VERSION: u8 = 1; + const VELOCITY_MODERN_FORWARDING_WITH_KEY_V2: i32 = 3; + + let message_id: i32 = 0; // TODO: make this random? + + // Send Player Info Request into the Plugin Channel + io.send_packet(&LoginQueryRequestS2c { + message_id: VarInt(message_id), + channel: ident!("velocity:player_info").into(), + data: RawBytes(&[VELOCITY_MIN_SUPPORTED_VERSION]).into(), + }) + .await?; + + // Get Response + let plugin_response: LoginQueryResponseC2s = io.recv_packet().await?; + + ensure!( + plugin_response.message_id.0 == message_id, + "mismatched plugin response ID (got {}, expected {message_id})", + plugin_response.message_id.0, + ); + + let data = plugin_response + .data + .context("missing plugin response data")? + .0; + + ensure!(data.len() >= 32, "invalid plugin response data length"); + let (signature, mut data_without_signature) = data.split_at(32); + + // Verify signature + let mut mac = Hmac::::new_from_slice(velocity_secret.as_bytes())?; + Mac::update(&mut mac, data_without_signature); + mac.verify_slice(signature)?; + + // Check Velocity version + let version = VarInt::decode(&mut data_without_signature) + .context("failed to decode velocity version")? + .0; + + // Get client address + let remote_addr = String::decode(&mut data_without_signature)?.parse()?; + + // Get UUID + let uuid = Uuid::decode(&mut data_without_signature)?; + + // Get username and validate + ensure!( + username == <&str>::decode(&mut data_without_signature)?, + "mismatched usernames" + ); + + // Read game profile properties + let properties = Vec::::decode(&mut data_without_signature) + .context("decoding velocity game profile properties")?; + + if version >= VELOCITY_MODERN_FORWARDING_WITH_KEY_V2 { + // TODO + } + + Ok(NewClientInfo { + uuid, + username, + properties: Properties(properties), + ip: remote_addr, + }) +} + +#[cfg(test)] +mod tests { + use sha1::Digest; + + use super::*; + + #[test] + fn auth_digest_usernames() { + assert_eq!( + auth_digest(&Sha1::digest("Notch")), + "4ed1f46bbe04bc756bcb17c0c7ce3e4632f06a48" + ); + assert_eq!( + auth_digest(&Sha1::digest("jeb_")), + "-7c9d5b0044c130109a5d7b5fb5c317c02b4e28c1" + ); + assert_eq!( + auth_digest(&Sha1::digest("simon")), + "88e16a1019277b15d58faf0541e11910eb756f6" + ); + } +} diff --git a/vendor/valence/crates/valence_network/src/legacy_ping.rs b/vendor/valence/crates/valence_network/src/legacy_ping.rs new file mode 100644 index 00000000..151e63c5 --- /dev/null +++ b/vendor/valence/crates/valence_network/src/legacy_ping.rs @@ -0,0 +1,334 @@ +use std::io; +use std::net::SocketAddr; +use std::time::Duration; + +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::net::TcpStream; +use tokio::time::sleep; + +use crate::{ServerListLegacyPing, SharedNetworkState}; + +/// The payload of the legacy server list ping. +#[derive(PartialEq, Debug, Clone)] +pub enum ServerListLegacyPingPayload { + /// The 1.6 legacy ping format, which includes additional data. + Pre1_7 { + /// The protocol version of the client. + protocol: i32, + /// The hostname the client used to connect to the server. + hostname: String, + /// The port the client used to connect to the server. + port: u16, + }, + /// The 1.4-1.5 legacy ping format. + Pre1_6, + /// The Beta 1.8-1.3 legacy ping format. + Pre1_4, +} + +/// Response data of the legacy server list ping. +/// +/// # Example +/// +/// ``` +/// # use valence_network::ServerListLegacyPingResponse; +/// let mut response = +/// ServerListLegacyPingResponse::new(127, 0, 10).version("Valence 1.20.1".to_owned()); +/// +/// // This will make the description just repeat "hello" until the length limit +/// // (which depends on the other fields that we set above: protocol, version, +/// // online players, max players). +/// let max_description = response.max_description(); +/// response = response.description( +/// std::iter::repeat("hello ") +/// .flat_map(|s| s.chars()) +/// .take(max_description) +/// .collect(), +/// ); +/// ``` +#[derive(Clone, Default, Debug, PartialEq)] +pub struct ServerListLegacyPingResponse { + protocol: i32, + version: String, + online_players: i32, + max_players: i32, + description: String, +} + +#[derive(PartialEq, Debug)] +enum PingFormat { + Pre1_4, // Beta 1.8 to 1.3 + Pre1_6, // 1.4 to 1.5 + Pre1_7, // 1.6 +} + +/// Returns true if legacy ping detected and handled +pub(crate) async fn try_handle_legacy_ping( + shared: &SharedNetworkState, + stream: &mut TcpStream, + remote_addr: SocketAddr, +) -> io::Result { + let mut temp_buf = [0u8; 3]; + let mut n = stream.peek(&mut temp_buf).await?; + + if let [0xfe] | [0xfe, 0x01] = &temp_buf[..n] { + // This could mean one of following things: + // 1. The beginning of a normal handshake packet, not fully received yet though + // 2. The beginning of the 1.6 legacy ping, not fully received yet either + // 3. Pre-1.4 legacy ping (0xfe) or 1.4-1.5 legacy ping (0xfe 0x01), fully + // received + // + // So in the name of the Father, the Son, and the Holy Spirit, we pray, + // and wait for more data to arrive if it's 1 or 2, and if no + // data arrives for long enough, we can assume its 3. + // + // Downsides of this approach and where this could go wrong: + // 1. Short artificial delay for pre-1.4 and 1.4-1.5 legacy pings + // 2. If a normal handshake is encountered with the exact length of 0xfe 0x01 in + // VarInt format (extremely rare, the server address would have to be ~248 + // bytes long), and for some God-forsaken reason sent the first 2 bytes of + // the packet but not any more in this whole time, we would incorrectly + // assume that it's a legacy ping and send an incorrect response. + // 3. If it was a 1.6 legacy ping, but even after the delay we only received + // only 1 byte, then we would also send an incorrect response, thinking its a + // pre-1.4 ping. The client would still understand it though, it'd just think + // that the server is old (pre-1.4). + // + // In my opinion, 1 is insignificant, and 2/3 are so rare that they are + // effectively insignificant too. Network IO is just not that reliable + // at this level, the connection may be lost as well or something at this point. + sleep(Duration::from_millis(10)).await; + n = stream.peek(&mut temp_buf).await?; + } + + let format = match &temp_buf[..n] { + [0xfe] => PingFormat::Pre1_4, + [0xfe, 0x01] => PingFormat::Pre1_6, + [0xfe, 0x01, 0xfa] => PingFormat::Pre1_7, + _ => return Ok(false), // Not a legacy ping + }; + + let payload = match format { + PingFormat::Pre1_7 => read_payload(stream).await?, + PingFormat::Pre1_6 => ServerListLegacyPingPayload::Pre1_6, + PingFormat::Pre1_4 => ServerListLegacyPingPayload::Pre1_4, + }; + + if let ServerListLegacyPing::Respond(mut response) = shared + .0 + .callbacks + .inner + .server_list_legacy_ping(shared, remote_addr, payload) + .await + { + if format == PingFormat::Pre1_4 { + // remove formatting for pre-1.4 legacy pings + remove_formatting(&mut response.description); + } + + let separator = match format { + PingFormat::Pre1_4 => '§', + _ => '\0', + }; + + let mut buf = Vec::new(); + + // packet ID and length placeholder + buf.extend([0xff, 0x00, 0x00]); + + if format != PingFormat::Pre1_4 { + // some constant bytes lol + buf.extend("§1\0".encode_utf16().flat_map(|c| c.to_be_bytes())); + + // protocol and version + buf.extend( + format!( + "{protocol}{separator}{version}{separator}", + protocol = response.protocol, + version = response.version + ) + .encode_utf16() + .flat_map(|c| c.to_be_bytes()), + ); + } + + // Description + buf.extend( + response + .description + .encode_utf16() + .flat_map(|c| c.to_be_bytes()), + ); + + // Online and max players + buf.extend( + format!( + "{separator}{online_players}{separator}{max_players}", + online_players = response.online_players, + max_players = response.max_players + ) + .encode_utf16() + .flat_map(|c| c.to_be_bytes()), + ); + + // replace the length placeholder with the actual length + let chars = (buf.len() as u16 - 3) / 2; // -3 because of the packet prefix (id and length), and /2 because UTF16 + buf[1..3].copy_from_slice(chars.to_be_bytes().as_slice()); + + stream.write_all(&buf).await?; + } + + Ok(true) +} + +// Reads the payload of a 1.6 legacy ping +async fn read_payload(stream: &mut TcpStream) -> io::Result { + // consume the first 29 useless bytes of this amazing protocol + stream.read_exact(&mut [0u8; 29]).await?; + + let protocol = stream.read_u8().await? as i32; + let hostname_len = (stream.read_u16().await? as usize) * 2; + + if hostname_len > 512 { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "hostname too long", + )); + } + + let mut hostname = vec![0u8; hostname_len]; + stream.read_exact(&mut hostname).await?; + let hostname = String::from_utf16_lossy( + &hostname + .chunks(2) + .map(|pair| u16::from_be_bytes([pair[0], pair[1]])) + .collect::>(), + ); + + let port = stream.read_i32().await? as u16; + + Ok(ServerListLegacyPingPayload::Pre1_7 { + protocol, + hostname, + port, + }) +} + +impl ServerListLegacyPingResponse { + const MAX_VALID_LENGTH: usize = 248; + + // Length of all the fields combined in string form. Used for validating and + // comparing with MAX_VALID_LENGTH. + fn length(&self) -> usize { + let mut len = 0; + len += int_len(self.protocol); + len += int_len(self.online_players); + len += int_len(self.max_players); + len += self.version.encode_utf16().count(); + len += self.description.encode_utf16().count(); + + len + } + /// Constructs a new basic [`ServerListLegacyPingResponse`]. + /// + /// See [`description`][Self::description] and [`version`][Self::version]. + pub fn new(protocol: i32, online_players: i32, max_players: i32) -> Self { + Self { + protocol, + version: String::new(), + online_players, + max_players, + description: String::new(), + } + } + /// Sets the description of the server. + /// + /// If the resulting response packet is too long to be valid, the + /// description will be truncated. + /// + /// Use [`max_description`][Self::max_description] method to get the max + /// valid length for this specific packet with the already set fields + /// (version, protocol, online players, max_players). + /// + /// Also any null bytes will be removed. + pub fn description(mut self, description: String) -> Self { + self.description = description; + + self.description.retain(|c| c != '\0'); + + let overflow = self.length() as i32 - Self::MAX_VALID_LENGTH as i32; + if overflow > 0 { + let truncation_index = self + .description + .char_indices() + .nth(self.description.encode_utf16().count() - overflow as usize) + .unwrap() + .0; + self.description.truncate(truncation_index); + } + + self + } + /// Sets the version of the server. + /// + /// If the resulting response packet is too long to be valid, the + /// version will be truncated. + /// + /// Use [`max_version`][Self::max_version] method to get the max valid + /// length for this specific packet with the already set fields + /// (description, protocol, online players, max_players). + /// + /// Also any null bytes will be removed. + pub fn version(mut self, version: String) -> Self { + self.version = version; + + self.version.retain(|c| c != '\0'); + + let overflow = self.length() as i32 - Self::MAX_VALID_LENGTH as i32; + if overflow > 0 { + let truncation_index = self + .version + .char_indices() + .nth(self.version.encode_utf16().count() - overflow as usize) + .unwrap() + .0; + self.version.truncate(truncation_index); + } + + self + } + /// Returns the maximum number of characters (not bytes) that this packet's + /// description can have with all other fields set as they are. + pub fn max_description(&self) -> usize { + Self::MAX_VALID_LENGTH - (self.length() - self.description.encode_utf16().count()) + } + /// Returns the maximum number of characters (not bytes) that this packet's + /// version can have with all other fields set as they are. + pub fn max_version(&self) -> usize { + Self::MAX_VALID_LENGTH - (self.length() - self.version.encode_utf16().count()) + } +} + +// Returns the length of a string representation of a signed integer +fn int_len(num: i32) -> usize { + let num_abs = num.abs() as f64; + + if num < 0 { + (num_abs.log10() + 2.0) as usize // because minus sign + } else { + (num_abs.log10() + 1.0) as usize + } +} + +// Removes all `§` and their modifiers, if any +fn remove_formatting(string: &mut String) { + while let Some(pos) = string.find('§') { + // + 2 because we know that `§` is 2 bytes + if let Some(c) = string[(pos + 2)..].chars().next() { + // remove next char too if any + string.replace_range(pos..(pos + 2 + c.len_utf8()), ""); + } else { + string.remove(pos); + } + } +} diff --git a/vendor/valence/crates/valence_network/src/lib.rs b/vendor/valence/crates/valence_network/src/lib.rs new file mode 100644 index 00000000..916fea25 --- /dev/null +++ b/vendor/valence/crates/valence_network/src/lib.rs @@ -0,0 +1,693 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +mod byte_channel; +mod connect; +mod legacy_ping; +mod packet_io; + +use std::borrow::Cow; +use std::net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4}; +use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::Arc; +use std::time::Duration; + +use anyhow::Context; +pub use async_trait::async_trait; +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use connect::do_accept_loop; +pub use connect::HandshakeData; +use flume::{Receiver, Sender}; +pub use legacy_ping::{ServerListLegacyPingPayload, ServerListLegacyPingResponse}; +use rand::rngs::OsRng; +use rsa::traits::PublicKeyParts; +use rsa::RsaPrivateKey; +use serde::Serialize; +use tokio::net::UdpSocket; +use tokio::runtime::{Handle, Runtime}; +use tokio::sync::Semaphore; +use tokio::time; +use tracing::error; +use uuid::Uuid; +use valence_protocol::text::IntoText; +use valence_server::client::{ClientBundle, ClientBundleArgs, Properties, SpawnClientsSet}; +use valence_server::{CompressionThreshold, Server, Text, MINECRAFT_VERSION, PROTOCOL_VERSION}; + +pub struct NetworkPlugin; + +impl Plugin for NetworkPlugin { + fn build(&self, app: &mut App) { + if let Err(e) = build_plugin(app) { + error!("failed to build network plugin: {e:#}"); + } + } +} + +fn build_plugin(app: &mut App) -> anyhow::Result<()> { + let threshold = app + .world + .get_resource::() + .context("missing server resource")? + .compression_threshold(); + + let settings = app + .world + .get_resource_or_insert_with(NetworkSettings::default); + + let (new_clients_send, new_clients_recv) = flume::bounded(64); + + let rsa_key = RsaPrivateKey::new(&mut OsRng, 1024)?; + + let public_key_der = + rsa_der::public_key_to_der(&rsa_key.n().to_bytes_be(), &rsa_key.e().to_bytes_be()) + .into_boxed_slice(); + + let runtime = if settings.tokio_handle.is_none() { + Some(Runtime::new()?) + } else { + None + }; + + let tokio_handle = match &runtime { + Some(rt) => rt.handle().clone(), + None => settings.tokio_handle.clone().unwrap(), + }; + + let shared = SharedNetworkState(Arc::new(SharedNetworkStateInner { + callbacks: settings.callbacks.clone(), + address: settings.address, + incoming_byte_limit: settings.incoming_byte_limit, + outgoing_byte_limit: settings.outgoing_byte_limit, + connection_sema: Arc::new(Semaphore::new( + settings.max_connections.min(Semaphore::MAX_PERMITS), + )), + player_count: AtomicUsize::new(0), + max_players: settings.max_players, + connection_mode: settings.connection_mode.clone(), + threshold, + tokio_handle, + _tokio_runtime: runtime, + new_clients_send, + new_clients_recv, + rsa_key, + public_key_der, + http_client: reqwest::Client::new(), + })); + + app.insert_resource(shared.clone()); + + // System for starting the accept loop. + let start_accept_loop = move |shared: Res| { + let _guard = shared.0.tokio_handle.enter(); + + // Start accepting new connections. + tokio::spawn(do_accept_loop(shared.clone())); + }; + + let start_broadcast_to_lan_loop = move |shared: Res| { + let _guard = shared.0.tokio_handle.enter(); + + tokio::spawn(do_broadcast_to_lan_loop(shared.clone())); + }; + + // System for spawning new clients. + let spawn_new_clients = move |world: &mut World| { + for _ in 0..shared.0.new_clients_recv.len() { + match shared.0.new_clients_recv.try_recv() { + Ok(args) => world.spawn(ClientBundle::new(args)), + Err(_) => break, + }; + } + }; + + // Start accepting connections in `PostStartup` to allow user startup code to + // run first. + app.add_systems(PostStartup, start_accept_loop); + + // Start the loop that will broadcast messages for the LAN discovery list. + app.add_systems(PostStartup, start_broadcast_to_lan_loop); + + // Spawn new clients before the event loop starts. + app.add_systems(PreUpdate, spawn_new_clients.in_set(SpawnClientsSet)); + + Ok(()) +} + +#[derive(Resource, Clone)] +pub struct SharedNetworkState(Arc); + +impl SharedNetworkState { + pub fn connection_mode(&self) -> &ConnectionMode { + &self.0.connection_mode + } + + pub fn player_count(&self) -> &AtomicUsize { + &self.0.player_count + } + + pub fn max_players(&self) -> usize { + self.0.max_players + } +} +struct SharedNetworkStateInner { + callbacks: ErasedNetworkCallbacks, + address: SocketAddr, + incoming_byte_limit: usize, + outgoing_byte_limit: usize, + /// Limits the number of simultaneous connections to the server before the + /// play state. + connection_sema: Arc, + //// The number of clients in the play state, past the login state. + player_count: AtomicUsize, + max_players: usize, + connection_mode: ConnectionMode, + threshold: CompressionThreshold, + tokio_handle: Handle, + // Holding a runtime handle is not enough to keep tokio working. We need + // to store the runtime here so we don't drop it. + _tokio_runtime: Option, + /// Sender for new clients past the login stage. + new_clients_send: Sender, + /// Receiver for new clients past the login stage. + new_clients_recv: Receiver, + /// The RSA keypair used for encryption with clients. + rsa_key: RsaPrivateKey, + /// The public part of `rsa_key` encoded in DER, which is an ASN.1 format. + /// This is sent to clients during the authentication process. + public_key_der: Box<[u8]>, + /// For session server requests. + http_client: reqwest::Client, +} + +/// Contains information about a new client joining the server. +#[derive(Debug)] +#[non_exhaustive] +pub struct NewClientInfo { + /// The username of the new client. + pub username: String, + /// The UUID of the new client. + pub uuid: Uuid, + /// The remote address of the new client. + pub ip: IpAddr, + /// The client's properties from the game profile. Typically contains a + /// `textures` property with the skin and cape of the player. + pub properties: Properties, +} + +/// Settings for [`NetworkPlugin`]. Note that mutations to these fields have no +/// effect after the plugin is built. +#[derive(Resource, Clone)] +pub struct NetworkSettings { + pub callbacks: ErasedNetworkCallbacks, + /// The [`Handle`] to the tokio runtime the server will use. If `None` is + /// provided, the server will create its own tokio runtime at startup. + /// + /// # Default Value + /// + /// `None` + pub tokio_handle: Option, + /// The maximum number of simultaneous initial connections to the server. + /// + /// This only considers the connections _before_ the play state where the + /// client is spawned into the world.. + /// + /// # Default Value + /// + /// The default value is left unspecified and may change in future versions. + pub max_connections: usize, + /// # Default Value + /// + /// `20` + pub max_players: usize, + /// The socket address the server will be bound to. + /// + /// # Default Value + /// + /// `0.0.0.0:25565`, which will listen on every available network interface. + pub address: SocketAddr, + /// The connection mode. This determines if client authentication and + /// encryption should take place and if the server should get the player + /// data from a proxy. + /// + /// **NOTE:** Mutations to this field have no effect if + /// + /// # Default Value + /// + /// [`ConnectionMode::Online`] + pub connection_mode: ConnectionMode, + /// The maximum capacity (in bytes) of the buffer used to hold incoming + /// packet data. + /// + /// A larger capacity reduces the chance that a client needs to be + /// disconnected due to a full buffer, but increases potential + /// memory usage. + /// + /// # Default Value + /// + /// The default value is left unspecified and may change in future versions. + pub incoming_byte_limit: usize, + /// The maximum capacity (in bytes) of the buffer used to hold outgoing + /// packet data. + /// + /// A larger capacity reduces the chance that a client needs to be + /// disconnected due to a full buffer, but increases potential + /// memory usage. + /// + /// # Default Value + /// + /// The default value is left unspecified and may change in future versions. + pub outgoing_byte_limit: usize, +} + +impl Default for NetworkSettings { + fn default() -> Self { + Self { + callbacks: ErasedNetworkCallbacks::default(), + tokio_handle: None, + max_connections: 1024, + max_players: 20, + address: SocketAddrV4::new(Ipv4Addr::new(0, 0, 0, 0), 25565).into(), + connection_mode: ConnectionMode::Online { + prevent_proxy_connections: false, + }, + incoming_byte_limit: 2097152, // 2 MiB + outgoing_byte_limit: 8388608, // 8 MiB + } + } +} + +/// A type-erased wrapper around an [`NetworkCallbacks`] object. +#[derive(Clone)] +pub struct ErasedNetworkCallbacks { + // TODO: do some shenanigans when async-in-trait is stabilized. + inner: Arc, +} + +impl ErasedNetworkCallbacks { + pub fn new(callbacks: impl NetworkCallbacks) -> Self { + Self { + inner: Arc::new(callbacks), + } + } +} + +impl Default for ErasedNetworkCallbacks { + fn default() -> Self { + Self { + inner: Arc::new(()), + } + } +} + +impl From for ErasedNetworkCallbacks { + fn from(value: T) -> Self { + Self::new(value) + } +} + +/// This trait uses [`mod@async_trait`]. +#[async_trait] +pub trait NetworkCallbacks: Send + Sync + 'static { + /// Called when the server receives a Server List Ping query. + /// Data for the response can be provided or the query can be ignored. + /// + /// This function is called from within a tokio runtime. + /// + /// # Default Implementation + /// + /// A default placeholder response is returned. + async fn server_list_ping( + &self, + shared: &SharedNetworkState, + remote_addr: SocketAddr, + handshake_data: &HandshakeData, + ) -> ServerListPing { + #![allow(unused_variables)] + + ServerListPing::Respond { + online_players: shared.player_count().load(Ordering::Relaxed) as i32, + max_players: shared.max_players() as i32, + player_sample: vec![], + description: "A Valence Server".into_text(), + favicon_png: &[], + version_name: MINECRAFT_VERSION.to_owned(), + protocol: PROTOCOL_VERSION, + } + } + + /// Called when the server receives a Server List Legacy Ping query. + /// Data for the response can be provided or the query can be ignored. + /// + /// This function is called from within a tokio runtime. + /// + /// # Default Implementation + /// + /// [`server_list_ping`][Self::server_list_ping] re-used. + async fn server_list_legacy_ping( + &self, + shared: &SharedNetworkState, + remote_addr: SocketAddr, + payload: ServerListLegacyPingPayload, + ) -> ServerListLegacyPing { + #![allow(unused_variables)] + + let handshake_data = match payload { + ServerListLegacyPingPayload::Pre1_7 { + protocol, + hostname, + port, + } => HandshakeData { + protocol_version: protocol, + server_address: hostname, + server_port: port, + }, + _ => HandshakeData::default(), + }; + + match self + .server_list_ping(shared, remote_addr, &handshake_data) + .await + { + ServerListPing::Respond { + online_players, + max_players, + player_sample, + description, + favicon_png, + version_name, + protocol, + } => ServerListLegacyPing::Respond( + ServerListLegacyPingResponse::new(protocol, online_players, max_players) + .version(version_name) + .description(description.to_legacy_lossy()), + ), + ServerListPing::Ignore => ServerListLegacyPing::Ignore, + } + } + + /// This function is called every 1.5 seconds to broadcast a packet over the + /// local network in order to advertise the server to the multiplayer + /// screen with a configurable MOTD. + /// + /// # Default Implementation + /// + /// The default implementation returns [`BroadcastToLan::Disabled`], + /// disabling LAN discovery. + async fn broadcast_to_lan(&self, shared: &SharedNetworkState) -> BroadcastToLan { + #![allow(unused_variables)] + + BroadcastToLan::Disabled + } + + /// Called for each client (after successful authentication if online mode + /// is enabled) to determine if they can join the server. + /// - If `Err(reason)` is returned, then the client is immediately + /// disconnected with `reason` as the displayed message. + /// - Otherwise, `Ok(f)` is returned and the client will continue the login + /// process. This _may_ result in a new client being spawned with the + /// [`ClientBundle`] components. `f` is stored along with the client and + /// is called when the client is disconnected. + /// + /// `f` is a callback function used for handling resource cleanup when the + /// client is dropped. This is useful because a new client entity is not + /// necessarily spawned into the world after a successful login. + /// + /// This method is called from within a tokio runtime, and is the + /// appropriate place to perform asynchronous operations such as + /// database queries which may take some time to complete. + /// + /// # Default Implementation + /// + /// TODO + /// + /// [`Client`]: valence::client::Client + async fn login( + &self, + shared: &SharedNetworkState, + info: &NewClientInfo, + ) -> Result { + let _ = info; + + let max_players = shared.max_players(); + + let success = shared + .player_count() + .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |n| { + if n < max_players { + Some(n + 1) + } else { + None + } + }) + .is_ok(); + + if success { + let shared = shared.clone(); + + Ok(Box::new(move || { + let prev = shared.player_count().fetch_sub(1, Ordering::SeqCst); + debug_assert_ne!(prev, 0, "player count underflowed"); + })) + } else { + // TODO: use correct translation key. + Err("Server Full".into_text()) + } + } + + /// Called upon every client login to obtain the full URL to use for session + /// server requests. This is done to authenticate player accounts. This + /// method is not called unless [online mode] is enabled. + /// + /// It is assumed that upon successful request, a structure matching the + /// description in the [wiki](https://wiki.vg/Protocol_Encryption#Server) was obtained. + /// Providing a URL that does not return such a structure will result in a + /// disconnect for every client that connects. + /// + /// The arguments are described in the linked wiki article. + /// + /// # Default Implementation + /// + /// Uses the official Minecraft session server. This is formatted as + /// `https://sessionserver.mojang.com/session/minecraft/hasJoined?username=&serverId=&ip=`. + /// + /// [online mode]: ConnectionMode::Online + async fn session_server( + &self, + shared: &SharedNetworkState, + username: &str, + auth_digest: &str, + player_ip: &IpAddr, + ) -> String { + if shared.connection_mode() + == (&ConnectionMode::Online { + prevent_proxy_connections: true, + }) + { + format!("https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={auth_digest}&ip={player_ip}") + } else { + format!("https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={auth_digest}") + } + } +} + +/// A callback function called when the associated client is dropped. See +/// [`NetworkCallbacks::login`] for more information. +pub type CleanupFn = Box; +struct CleanupOnDrop(Option); + +impl Drop for CleanupOnDrop { + fn drop(&mut self) { + if let Some(f) = self.0.take() { + f(); + } + } +} + +/// The default network callbacks. Useful as a placeholder. +impl NetworkCallbacks for () {} + +/// Describes how new connections to the server are handled. +#[derive(Clone, PartialEq)] +#[non_exhaustive] +pub enum ConnectionMode { + /// The "online mode" fetches all player data (username, UUID, and + /// properties) from the [configured session server] and enables + /// encryption. + /// + /// This mode should be used by all publicly exposed servers which are not + /// behind a proxy. + /// + /// [configured session server]: NetworkCallbacks::session_server + Online { + /// Determines if client IP validation should take place during + /// authentication. + /// + /// When `prevent_proxy_connections` is enabled, clients can no longer + /// log-in if they connected to the Yggdrasil server using a different + /// IP than the one used to connect to this server. + /// + /// This is used by the default implementation of + /// [`NetworkCallbacks::session_server`]. A different implementation may + /// choose to ignore this value. + prevent_proxy_connections: bool, + }, + /// Disables client authentication with the configured session server. + /// Clients can join with any username and UUID they choose, potentially + /// gaining privileges they would not otherwise have. Additionally, + /// encryption is disabled and Minecraft's default skins will be used. + /// + /// This mode should be used for development purposes only and not for + /// publicly exposed servers. + Offline, + /// This mode should be used under one of the following situations: + /// - The server is behind a [BungeeCord]/[Waterfall] proxy with IP + /// forwarding enabled. + /// - The server is behind a [Velocity] proxy configured to use the `legacy` + /// forwarding mode. + /// + /// All player data (username, UUID, and properties) is fetched from the + /// proxy, but no attempt is made to stop connections originating from + /// elsewhere. As a result, you must ensure clients connect through the + /// proxy and are unable to connect to the server directly. Otherwise, + /// clients can use any username or UUID they choose similar to + /// [`ConnectionMode::Offline`]. + /// + /// To protect against this, a firewall can be used. However, + /// [`ConnectionMode::Velocity`] is recommended as a secure alternative. + /// + /// [BungeeCord]: https://www.spigotmc.org/wiki/bungeecord/ + /// [Waterfall]: https://github.com/PaperMC/Waterfall + /// [Velocity]: https://velocitypowered.com/ + BungeeCord, + /// This mode is used when the server is behind a [Velocity] proxy + /// configured with the forwarding mode `modern`. + /// + /// All player data (username, UUID, and properties) is fetched from the + /// proxy and all connections originating from outside Velocity are + /// blocked. + /// + /// [Velocity]: https://velocitypowered.com/ + Velocity { + /// The secret key used to prevent connections from outside Velocity. + /// The proxy and Valence must be configured to use the same secret key. + secret: Arc, + }, +} + +/// The result of the Server List Ping [callback]. +/// +/// [callback]: NetworkCallbacks::server_list_ping +#[derive(Clone, Default, Debug)] +pub enum ServerListPing<'a> { + /// Responds to the server list ping with the given information. + Respond { + /// Displayed as the number of players on the server. + online_players: i32, + /// Displayed as the maximum number of players allowed on the server at + /// a time. + max_players: i32, + /// The list of players visible by hovering over the player count. + /// + /// Has no effect if this list is empty. + player_sample: Vec, + /// A description of the server. + description: Text, + /// The server's icon as the bytes of a PNG image. + /// The image must be 64x64 pixels. + /// + /// No icon is used if the slice is empty. + favicon_png: &'a [u8], + /// The version name of the server. Displayed when client is using a + /// different protocol. + /// + /// Can be formatted using `§` and format codes. Or use + /// [`valence_protocol::text::Text::to_legacy_lossy`]. + version_name: String, + /// The protocol version of the server. + protocol: i32, + }, + /// Ignores the query and disconnects from the client. + #[default] + Ignore, +} + +/// The result of the Server List Legacy Ping [callback]. +/// +/// [callback]: NetworkCallbacks::server_list_legacy_ping +#[derive(Clone, Default, Debug)] +pub enum ServerListLegacyPing { + /// Responds to the server list legacy ping with the given information. + Respond(ServerListLegacyPingResponse), + /// Ignores the query and disconnects from the client. + #[default] + Ignore, +} + +/// The result of the Broadcast To Lan [callback]. +/// +/// [callback]: NetworkCallbacks::broadcast_to_lan +#[derive(Clone, Default, Debug)] +pub enum BroadcastToLan<'a> { + /// Disabled Broadcast To Lan. + #[default] + Disabled, + /// Send packet to broadcast to LAN every 1.5 seconds with specified MOTD. + Enabled(Cow<'a, str>), +} + +/// Represents an individual entry in the player sample. +#[derive(Clone, Debug, Serialize)] +pub struct PlayerSampleEntry { + /// The name of the player. + /// + /// This string can contain + /// [legacy formatting codes](https://minecraft.wiki/w/Formatting_codes). + pub name: String, + /// The player UUID. + pub id: Uuid, +} + +async fn do_broadcast_to_lan_loop(shared: SharedNetworkState) { + let port = shared.0.address.port(); + + let Ok(socket) = UdpSocket::bind("0.0.0.0:0").await else { + tracing::error!("Failed to bind to UDP socket for broadcast to LAN"); + return; + }; + + loop { + let motd = match shared.0.callbacks.inner.broadcast_to_lan(&shared).await { + BroadcastToLan::Disabled => { + time::sleep(Duration::from_millis(1500)).await; + continue; + } + BroadcastToLan::Enabled(motd) => motd, + }; + + let message = format!("[MOTD]{motd}[/MOTD][AD]{port}[/AD]"); + + if let Err(e) = socket.send_to(message.as_bytes(), "224.0.2.60:4445").await { + tracing::warn!("Failed to send broadcast to LAN packet: {}", e); + } + + // wait 1.5 seconds + tokio::time::sleep(std::time::Duration::from_millis(1500)).await; + } +} diff --git a/vendor/valence/crates/valence_network/src/packet_io.rs b/vendor/valence/crates/valence_network/src/packet_io.rs new file mode 100644 index 00000000..7212b481 --- /dev/null +++ b/vendor/valence/crates/valence_network/src/packet_io.rs @@ -0,0 +1,255 @@ +use std::io::ErrorKind; +use std::sync::Arc; +use std::time::Instant; +use std::{io, mem}; + +use anyhow::bail; +use bytes::BytesMut; +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::net::TcpStream; +use tokio::sync::Semaphore; +use tokio::task::JoinHandle; +use tracing::{debug, warn}; +use valence_protocol::CompressionThreshold; +use valence_server::client::{ClientBundleArgs, ClientConnection, ReceivedPacket}; +use valence_server::protocol::decode::PacketFrame; +use valence_server::protocol::{Decode, Encode, Packet, PacketDecoder, PacketEncoder}; + +use crate::byte_channel::{byte_channel, ByteSender, TrySendError}; +use crate::{CleanupOnDrop, NewClientInfo}; + +pub(crate) struct PacketIo { + stream: TcpStream, + enc: PacketEncoder, + dec: PacketDecoder, + frame: PacketFrame, +} + +const READ_BUF_SIZE: usize = 4096; + +impl PacketIo { + pub(crate) fn new(stream: TcpStream, enc: PacketEncoder, dec: PacketDecoder) -> Self { + Self { + stream, + enc, + dec, + frame: PacketFrame { + id: -1, + body: BytesMut::new(), + }, + } + } + + pub(crate) async fn send_packet

(&mut self, pkt: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.enc.append_packet(pkt)?; + let bytes = self.enc.take(); + self.stream.write_all(&bytes).await?; + Ok(()) + } + + pub(crate) async fn recv_packet<'a, P>(&'a mut self) -> anyhow::Result

+ where + P: Packet + Decode<'a>, + { + loop { + if let Some(frame) = self.dec.try_next_packet()? { + self.frame = frame; + + return self.frame.decode(); + } + + self.dec.reserve(READ_BUF_SIZE); + let mut buf = self.dec.take_capacity(); + + if self.stream.read_buf(&mut buf).await? == 0 { + return Err(io::Error::from(ErrorKind::UnexpectedEof).into()); + } + + // This should always be an O(1) unsplit because we reserved space earlier and + // the call to `read_buf` shouldn't have grown the allocation. + self.dec.queue_bytes(buf); + } + } + + #[allow(dead_code)] + pub(crate) fn set_compression(&mut self, threshold: CompressionThreshold) { + self.enc.set_compression(threshold); + self.dec.set_compression(threshold); + } + + pub(crate) fn enable_encryption(&mut self, key: &[u8; 16]) { + self.enc.enable_encryption(key); + self.dec.enable_encryption(key); + } + + pub(crate) fn into_client_args( + mut self, + info: NewClientInfo, + incoming_byte_limit: usize, + outgoing_byte_limit: usize, + cleanup: CleanupOnDrop, + ) -> ClientBundleArgs { + let (incoming_sender, incoming_receiver) = flume::unbounded(); + + let incoming_byte_limit = incoming_byte_limit.min(Semaphore::MAX_PERMITS); + + let recv_sem = Arc::new(Semaphore::new(incoming_byte_limit)); + let recv_sem_clone = recv_sem.clone(); + + let (mut reader, mut writer) = self.stream.into_split(); + + let reader_task = tokio::spawn(async move { + let mut buf = BytesMut::new(); + + loop { + let frame = match self.dec.try_next_packet() { + Ok(Some(frame)) => frame, + Ok(None) => { + // Incomplete packet. Need more data. + + buf.reserve(READ_BUF_SIZE); + match reader.read_buf(&mut buf).await { + Ok(0) => break, // Reader is at EOF. + Ok(_) => {} + Err(e) => { + debug!("error reading data from stream: {e}"); + break; + } + } + + self.dec.queue_bytes(buf.split()); + + continue; + } + Err(e) => { + warn!("error decoding packet frame: {e:#}"); + break; + } + }; + + let timestamp = Instant::now(); + + // Estimate memory usage of this packet. + let cost = mem::size_of::() + frame.body.len(); + + if cost > incoming_byte_limit { + debug!( + cost, + incoming_byte_limit, + "cost of received packet is greater than the incoming memory limit" + ); + // We would never acquire enough permits, so we should exit instead of getting + // stuck. + break; + } + + // Wait until there's enough space for this packet. + let Ok(permits) = recv_sem.acquire_many(cost as u32).await else { + // Semaphore closed. + break; + }; + + // The permits will be added back on the other side of the channel. + permits.forget(); + + let packet = ReceivedPacket { + timestamp, + id: frame.id, + body: frame.body.freeze(), + }; + + if incoming_sender.try_send(packet).is_err() { + // Channel closed. + break; + } + } + }); + + let (outgoing_sender, mut outgoing_receiver) = byte_channel(outgoing_byte_limit); + + let writer_task = tokio::spawn(async move { + loop { + let bytes = match outgoing_receiver.recv_async().await { + Ok(bytes) => bytes, + Err(e) => { + debug!("error receiving packet data: {e}"); + break; + } + }; + + if let Err(e) = writer.write_all(&bytes).await { + debug!("error writing data to stream: {e}"); + } + } + }); + + ClientBundleArgs { + username: info.username, + uuid: info.uuid, + ip: info.ip, + properties: info.properties.0, + conn: Box::new(RealClientConnection { + send: outgoing_sender, + recv: incoming_receiver, + recv_sem: recv_sem_clone, + reader_task, + writer_task, + _cleanup: cleanup, + }), + enc: self.enc, + } + } +} + +struct RealClientConnection { + send: ByteSender, + recv: flume::Receiver, + /// Limits the amount of data queued in the `recv` channel. Each permit + /// represents one byte. + recv_sem: Arc, + _cleanup: CleanupOnDrop, + reader_task: JoinHandle<()>, + writer_task: JoinHandle<()>, +} + +impl ClientConnection for RealClientConnection { + fn try_send(&mut self, bytes: BytesMut) -> anyhow::Result<()> { + match self.send.try_send(bytes) { + Ok(()) => Ok(()), + Err(TrySendError::Full(_)) => bail!( + "reached configured outgoing limit of {} bytes", + self.send.limit() + ), + Err(TrySendError::Disconnected(_)) => bail!("client disconnected"), + } + } + + fn try_recv(&mut self) -> anyhow::Result> { + match self.recv.try_recv() { + Ok(packet) => { + let cost = mem::size_of::() + packet.body.len(); + + // Add the permits back that we removed earlier. + self.recv_sem.add_permits(cost); + + Ok(Some(packet)) + } + Err(flume::TryRecvError::Empty) => Ok(None), + Err(flume::TryRecvError::Disconnected) => bail!("client disconnected"), + } + } + + fn len(&self) -> usize { + self.recv.len() + } +} + +impl Drop for RealClientConnection { + fn drop(&mut self) { + self.writer_task.abort(); + self.reader_task.abort(); + } +} diff --git a/vendor/valence/crates/valence_player_list/Cargo.toml b/vendor/valence/crates/valence_player_list/Cargo.toml new file mode 100644 index 00000000..176c9438 --- /dev/null +++ b/vendor/valence/crates/valence_player_list/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "valence_player_list" +description = "Player list (tablist) support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_app.workspace = true +bevy_ecs.workspace = true +bitfield-struct.workspace = true +derive_more.workspace = true +valence_server.workspace = true diff --git a/vendor/valence/crates/valence_player_list/README.md b/vendor/valence/crates/valence_player_list/README.md new file mode 100644 index 00000000..70450e4d --- /dev/null +++ b/vendor/valence/crates/valence_player_list/README.md @@ -0,0 +1,6 @@ +# valence_player_list + +Manages Minecraft's "player list" which is the table seen while holding the tab key in game. + +Correctly updating and sending the player list is necessary for player entities to be rendered by clients. + diff --git a/vendor/valence/crates/valence_player_list/src/lib.rs b/vendor/valence/crates/valence_player_list/src/lib.rs new file mode 100644 index 00000000..27fbab7d --- /dev/null +++ b/vendor/valence/crates/valence_player_list/src/lib.rs @@ -0,0 +1,387 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::type_complexity)] + +use std::borrow::Cow; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +use valence_server::client::{Client, Properties, Username}; +use valence_server::keepalive::Ping; +use valence_server::layer::UpdateLayersPreClientSet; +use valence_server::protocol::encode::PacketWriter; +use valence_server::protocol::packets::play::{ + player_list_s2c as packet, PlayerListHeaderS2c, PlayerListS2c, PlayerRemoveS2c, +}; +use valence_server::protocol::WritePacket; +use valence_server::text::IntoText; +use valence_server::uuid::Uuid; +use valence_server::{Despawned, GameMode, Server, Text, UniqueId}; + +pub struct PlayerListPlugin; + +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +struct PlayerListSet; + +impl Plugin for PlayerListPlugin { + fn build(&self, app: &mut App) { + app.insert_resource(PlayerList::new()) + .configure_sets( + PostUpdate, + // Needs to happen before player entities are initialized. Otherwise, they will + // appear invisible. + PlayerListSet.before(UpdateLayersPreClientSet), + ) + .add_systems( + PostUpdate, + ( + update_header_footer, + add_new_clients_to_player_list, + apply_deferred, // So new clients get the packets for their own entry. + update_entries, + init_player_list_for_clients, + remove_despawned_entries, + write_player_list_changes, + ) + .in_set(PlayerListSet) + .chain(), + ); + } +} + +#[derive(Resource)] +pub struct PlayerList { + cached_update_packets: Vec, + header: Text, + footer: Text, + changed_header_or_footer: bool, + /// If clients should be automatically added and removed from the player + /// list with the proper components inserted. Enabled by default. + pub manage_clients: bool, +} + +impl PlayerList { + fn new() -> Self { + Self { + cached_update_packets: vec![], + header: Text::default(), + footer: Text::default(), + changed_header_or_footer: false, + manage_clients: true, + } + } + + pub fn header(&self) -> &Text { + &self.header + } + + pub fn footer(&self) -> &Text { + &self.footer + } + + pub fn set_header<'a>(&mut self, txt: impl IntoText<'a>) { + let txt = txt.into_cow_text().into_owned(); + + if txt != self.header { + self.changed_header_or_footer = true; + } + + self.header = txt; + } + + pub fn set_footer<'a>(&mut self, txt: impl IntoText<'a>) { + let txt = txt.into_cow_text().into_owned(); + + if txt != self.footer { + self.changed_header_or_footer = true; + } + + self.footer = txt; + } +} + +/// Bundle for spawning new player list entries. All components are required +/// unless otherwise stated. +/// +/// # Despawning player list entries +/// +/// The [`Despawned`] component must be used to despawn player list entries. +#[derive(Bundle, Default, Debug)] +pub struct PlayerListEntryBundle { + pub player_list_entry: PlayerListEntry, + /// Careful not to modify this! + pub uuid: UniqueId, + pub username: Username, + pub properties: Properties, + pub game_mode: GameMode, + pub ping: Ping, + pub display_name: DisplayName, + pub listed: Listed, +} + +/// Marker component for player list entries. +#[derive(Component, Default, Debug)] +pub struct PlayerListEntry; + +/// Displayed name for a player list entry. Appears as [`Username`] if `None`. +#[derive(Component, Default, Debug, Deref, DerefMut)] +pub struct DisplayName(pub Option); + +/// If a player list entry is visible. Defaults to `true`. +#[derive(Component, Copy, Clone, Debug, Deref, DerefMut)] +pub struct Listed(pub bool); + +impl Default for Listed { + fn default() -> Self { + Self(true) + } +} + +fn update_header_footer(player_list: ResMut, server: Res) { + if player_list.changed_header_or_footer { + let player_list = player_list.into_inner(); + + let mut w = PacketWriter::new( + &mut player_list.cached_update_packets, + server.compression_threshold(), + ); + + w.write_packet(&PlayerListHeaderS2c { + header: (&player_list.header).into(), + footer: (&player_list.footer).into(), + }); + + player_list.changed_header_or_footer = false; + } +} + +fn add_new_clients_to_player_list( + clients: Query>, + player_list: Res, + mut commands: Commands, +) { + if player_list.manage_clients { + for entity in &clients { + commands.entity(entity).insert(( + PlayerListEntry, + DisplayName::default(), + Listed::default(), + )); + } + } +} + +fn init_player_list_for_clients( + mut clients: Query<&mut Client, (Added, Without)>, + player_list: Res, + entries: Query< + ( + &UniqueId, + &Username, + &Properties, + &GameMode, + &Ping, + &DisplayName, + &Listed, + ), + With, + >, +) { + if player_list.manage_clients { + for mut client in &mut clients { + let actions = packet::PlayerListActions::new() + .with_add_player(true) + .with_update_game_mode(true) + .with_update_listed(true) + .with_update_latency(true) + .with_update_display_name(true); + + let entries: Vec<_> = entries + .iter() + .map( + |(uuid, username, props, game_mode, ping, display_name, listed)| { + packet::PlayerListEntry { + player_uuid: uuid.0, + username: &username.0, + properties: Cow::Borrowed(&props.0), + chat_data: None, + listed: listed.0, + ping: ping.0, + game_mode: *game_mode, + display_name: display_name.0.as_ref().map(Cow::Borrowed), + } + }, + ) + .collect(); + + if !entries.is_empty() { + client.write_packet(&PlayerListS2c { + actions, + entries: Cow::Owned(entries), + }); + } + + if !player_list.header.is_empty() || !player_list.footer.is_empty() { + client.write_packet(&PlayerListHeaderS2c { + header: Cow::Borrowed(&player_list.header), + footer: Cow::Borrowed(&player_list.footer), + }); + } + } + } +} + +fn remove_despawned_entries( + entries: Query<&UniqueId, (Added, With)>, + player_list: ResMut, + server: Res, + mut removed: Local>, +) { + if player_list.manage_clients { + debug_assert!(removed.is_empty()); + + removed.extend(entries.iter().map(|uuid| uuid.0)); + + if !removed.is_empty() { + let player_list = player_list.into_inner(); + + let mut w = PacketWriter::new( + &mut player_list.cached_update_packets, + server.compression_threshold(), + ); + + w.write_packet(&PlayerRemoveS2c { + uuids: Cow::Borrowed(&removed), + }); + + removed.clear(); + } + } +} + +fn update_entries( + entries: Query< + ( + Ref, + Ref, + Ref, + Ref, + Ref, + Ref, + Ref, + ), + ( + With, + Or<( + Changed, + Changed, + Changed, + Changed, + Changed, + Changed, + Changed, + )>, + ), + >, + server: Res, + player_list: ResMut, +) { + let player_list = player_list.into_inner(); + + let mut writer = PacketWriter::new( + &mut player_list.cached_update_packets, + server.compression_threshold(), + ); + + for (uuid, username, props, game_mode, ping, display_name, listed) in &entries { + let mut actions = packet::PlayerListActions::new(); + + // Did a change occur that would force us to overwrite the entry? This also adds + // new entries. + if uuid.is_changed() || username.is_changed() || props.is_changed() { + actions.set_add_player(true); + + if *game_mode != GameMode::default() { + actions.set_update_game_mode(true); + } + + if ping.0 != 0 { + actions.set_update_latency(true); + } + + if display_name.0.is_some() { + actions.set_update_display_name(true); + } + + if listed.0 { + actions.set_update_listed(true); + } + } else { + if game_mode.is_changed() { + actions.set_update_game_mode(true); + } + + if ping.is_changed() { + actions.set_update_latency(true); + } + + if display_name.is_changed() { + actions.set_update_display_name(true); + } + + if listed.is_changed() { + actions.set_update_listed(true); + } + + debug_assert_ne!(u8::from(actions), 0); + } + + let entry = packet::PlayerListEntry { + player_uuid: uuid.0, + username: &username.0, + properties: Cow::Borrowed(&props.0), + chat_data: None, + listed: listed.0, + ping: ping.0, + game_mode: *game_mode, + display_name: display_name.0.as_ref().map(|x| x.into()), + }; + + writer.write_packet(&PlayerListS2c { + actions, + entries: Cow::Borrowed(&[entry]), + }); + } +} + +fn write_player_list_changes( + mut player_list: ResMut, + mut clients: Query<&mut Client, Without>, +) { + if !player_list.cached_update_packets.is_empty() { + for mut client in &mut clients { + if !client.is_added() { + client.write_packet_bytes(&player_list.cached_update_packets); + } + } + + player_list.cached_update_packets.clear(); + } +} diff --git a/vendor/valence/crates/valence_protocol/Cargo.toml b/vendor/valence/crates/valence_protocol/Cargo.toml new file mode 100644 index 00000000..b5a61f58 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/Cargo.toml @@ -0,0 +1,41 @@ +[package] +name = "valence_protocol" +description = "Protocol library for Minecraft: Java Edition" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[features] +encryption = ["dep:aes", "dep:cfb8"] +compression = ["dep:flate2"] + +[dependencies] +bevy_ecs.workspace = true # TODO: make this optional +valence_math.workspace = true +valence_generated.workspace = true +valence_text.workspace = true +valence_nbt = { workspace = true, features = ["binary"] } +valence_protocol_macros.workspace = true +anyhow.workspace = true +thiserror.workspace = true +serde = { workspace = true, features = ["derive"] } +byteorder.workspace = true +uuid.workspace = true +valence_bytes.workspace = true +valence_ident.workspace = true +base64.workspace = true +url.workspace = true +serde_json.workspace = true +tracing.workspace = true +bytes.workspace = true +bitfield-struct.workspace = true +derive_more = { workspace = true, features = ["from", "into", "deref", "deref_mut", "as_ref"] } +cfb8 = { workspace = true, optional = true } +flate2 = { workspace = true, optional = true } +aes = { workspace = true, optional = true } + +[dev-dependencies] +rand.workspace = true diff --git a/vendor/valence/crates/valence_protocol/README.md b/vendor/valence/crates/valence_protocol/README.md new file mode 100644 index 00000000..c8449447 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/README.md @@ -0,0 +1,47 @@ +# valence_protocol + +A protocol library for _Minecraft: Java Edition_. Use this to build clients, servers, proxies, or something novel! + +`valence_protocol` is primarily concerned with defining all of Minecraft's [network packets](packets) and the process for encoding and decoding them. To encode and decode packets, use the [`PacketEncoder`] and [`PacketDecoder`] types. + +```rust +use valence_protocol::{PacketEncoder, PacketDecoder, Difficulty}; +use valence_protocol::packets::play::DifficultyS2c; + +let mut encoder = PacketEncoder::new(); + +let packet = DifficultyS2c { + difficulty: Difficulty::Peaceful, + locked: true, +}; + +// Encode our packet struct. +encoder.append_packet(&packet); + +// Take our encoded packet(s) out of the encoder. +let bytes = encoder.take(); + +let mut decoder = PacketDecoder::new(); + +// Put it in the decoder. +decoder.queue_bytes(bytes); + +// Get the next packet "frame" from the decoder and use that to decode the body of the packet. +// Packet frames can be thought of as type-erased packet structs. +let frame = decoder.try_next_packet().unwrap().unwrap(); +let decoded_packet = frame.decode::().unwrap(); + +// Check that our original packet struct is the same as the one we just decoded. +assert_eq!(&packet, &decoded_packet); +``` + +## Supported Minecraft Versions + +Currently, `valence_protocol` only intends to support the most recent stable version of Minecraft. New Minecraft versions often entail a major version bump, since breaking changes to packet definitions are frequent. + +The currently targeted Minecraft version and protocol version can be checked using the [`MINECRAFT_VERSION`] and [`PROTOCOL_VERSION`] constants. + +## Feature Flags + +- `encryption`: Enables support for packet encryption. +- `compression`: Enables support for packet compression. diff --git a/vendor/valence/crates/valence_protocol/src/array.rs b/vendor/valence/crates/valence_protocol/src/array.rs new file mode 100644 index 00000000..abca7ea2 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/array.rs @@ -0,0 +1,58 @@ +use std::io::Write; + +use anyhow::ensure; +use bytes::Bytes; + +use crate::var_int::VarInt; +use crate::{Decode, DecodeBytes, Encode}; + +/// A fixed-size array encoded and decoded with a [`VarInt`] length prefix. +/// +/// This is used when the length of the array is known statically, but a +/// length prefix is needed anyway. +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] +#[repr(transparent)] +pub struct FixedArray(pub [T; N]); + +impl Encode for FixedArray { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + VarInt(N as i32).encode(&mut w)?; + self.0.encode(w) + } +} + +impl Decode for FixedArray { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!( + len == N as i32, + "unexpected length of {len} for fixed-sized array of length {N}" + ); + + <[T; N]>::decode(r).map(FixedArray) + } +} + +impl DecodeBytes for FixedArray { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!( + len == N as i32, + "unexpected length of {len} for fixed-sized array of length {N}" + ); + + <[T; N]>::decode_bytes(r).map(FixedArray) + } +} + +impl From<[T; N]> for FixedArray { + fn from(value: [T; N]) -> Self { + Self(value) + } +} + +impl From> for [T; N] { + fn from(value: FixedArray) -> Self { + value.0 + } +} diff --git a/vendor/valence/crates/valence_protocol/src/biome_pos.rs b/vendor/valence/crates/valence_protocol/src/biome_pos.rs new file mode 100644 index 00000000..a9db91a0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/biome_pos.rs @@ -0,0 +1,36 @@ +use valence_math::DVec3; + +use crate::BlockPos; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] +pub struct BiomePos { + pub x: i32, + pub y: i32, + pub z: i32, +} + +impl BiomePos { + pub const fn new(x: i32, y: i32, z: i32) -> Self { + Self { x, y, z } + } +} + +impl From for BiomePos { + fn from(pos: BlockPos) -> Self { + Self { + x: pos.x.div_euclid(4), + y: pos.y.div_euclid(4), + z: pos.z.div_euclid(4), + } + } +} + +impl From for BiomePos { + fn from(pos: DVec3) -> Self { + Self { + x: (pos.x / 4.0).floor() as i32, + y: (pos.y / 4.0).floor() as i32, + z: (pos.z / 4.0).floor() as i32, + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/bit_set.rs b/vendor/valence/crates/valence_protocol/src/bit_set.rs new file mode 100644 index 00000000..2d6c6596 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/bit_set.rs @@ -0,0 +1,126 @@ +use std::fmt; +use std::io::Write; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +// TODO: when better const exprs are available, compute BYTE_COUNT from +// BIT_COUNT. +#[derive(Copy, Clone, PartialEq, Eq, DecodeBytesAuto)] +pub struct FixedBitSet(pub [u8; BYTE_COUNT]); + +impl FixedBitSet { + pub fn bit(&self, idx: usize) -> bool { + check_counts(BIT_COUNT, BYTE_COUNT); + assert!( + idx < BIT_COUNT, + "bit index of {idx} out of range for bitset with {BIT_COUNT} bits" + ); + + self.0[idx / 8] >> (idx % 8) & 1 == 1 + } + + pub fn set_bit(&mut self, idx: usize, val: bool) { + check_counts(BIT_COUNT, BYTE_COUNT); + assert!( + idx < BIT_COUNT, + "bit index of {idx} out of range for bitset with {BIT_COUNT} bits" + ); + + let byte = &mut self.0[idx / 8]; + *byte |= (val as u8) << (idx % 8); + } +} + +impl Encode + for FixedBitSet +{ + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + check_counts(BIT_COUNT, BYTE_COUNT); + self.0.encode(w) + } +} + +impl Decode + for FixedBitSet +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + check_counts(BIT_COUNT, BYTE_COUNT); + Ok(Self(Decode::decode(r)?)) + } +} + +const fn check_counts(bits: usize, bytes: usize) { + assert!(bits.div_ceil(8) == bytes) +} + +impl fmt::Debug + for FixedBitSet +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display + for FixedBitSet +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "0b")?; + + for i in (0..BIT_COUNT).rev() { + if self.bit(i) { + write!(f, "1")?; + } else { + write!(f, "0")?; + } + } + + Ok(()) + } +} + +/// 😔 +macro_rules! impl_default { + ($($N:literal)*) => { + $( + impl Default for FixedBitSet { + fn default() -> Self { + Self(Default::default()) + } + } + )* + } +} + +impl_default!(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn fixed_bit_set_ops() { + let mut bits = FixedBitSet::<20, 3>::default(); + + assert!(!bits.bit(5)); + bits.set_bit(5, true); + assert!(bits.bit(5)); + assert_eq!(bits.0, [0b00100000, 0, 0]); + } + + #[test] + #[should_panic] + fn fixed_bit_set_out_of_range() { + let mut bits = FixedBitSet::<20, 3>::default(); + + bits.set_bit(20, true); + } + + #[test] + fn display_fixed_bit_set() { + let mut bits = FixedBitSet::<20, 3>::default(); + bits.set_bit(5, true); + + assert_eq!(format!("{bits}"), "0b00000000000000100000"); + } +} diff --git a/vendor/valence/crates/valence_protocol/src/block_pos.rs b/vendor/valence/crates/valence_protocol/src/block_pos.rs new file mode 100644 index 00000000..51ad5d2f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/block_pos.rs @@ -0,0 +1,226 @@ +use std::fmt; +use std::io::Write; +use std::ops::{Add, Sub}; + +use anyhow::bail; +use bitfield_struct::bitfield; +use derive_more::From; +use thiserror::Error; +use valence_math::{DVec3, IVec3}; + +use crate::direction::Direction; +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// Represents an absolute block position in world space. +#[derive(Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DecodeBytesAuto)] +pub struct BlockPos { + pub x: i32, + pub y: i32, + pub z: i32, +} + +impl BlockPos { + /// Constructs a new block position. + pub const fn new(x: i32, y: i32, z: i32) -> Self { + Self { x, y, z } + } + + /// Get a new [`BlockPos`] that is adjacent to this position in `dir` + /// direction. + /// + /// ``` + /// use valence_protocol::{BlockPos, Direction}; + /// + /// let pos = BlockPos::new(0, 0, 0); + /// let adj = pos.get_in_direction(Direction::South); + /// assert_eq!(adj, BlockPos::new(0, 0, 1)); + /// ``` + pub const fn get_in_direction(self, dir: Direction) -> Self { + match dir { + Direction::Down => BlockPos::new(self.x, self.y - 1, self.z), + Direction::Up => BlockPos::new(self.x, self.y + 1, self.z), + Direction::North => BlockPos::new(self.x, self.y, self.z - 1), + Direction::South => BlockPos::new(self.x, self.y, self.z + 1), + Direction::West => BlockPos::new(self.x - 1, self.y, self.z), + Direction::East => BlockPos::new(self.x + 1, self.y, self.z), + } + } + + pub const fn offset(self, x: i32, y: i32, z: i32) -> Self { + Self::new(self.x + x, self.y + y, self.z + z) + } + + pub const fn packed(self) -> Result { + match (self.x, self.y, self.z) { + (-0x2000000..=0x1ffffff, -0x800..=0x7ff, -0x2000000..=0x1ffffff) => { + Ok(PackedBlockPos::new() + .with_x(self.x) + .with_y(self.y) + .with_z(self.z)) + } + _ => Err(Error(self)), + } + } +} + +#[bitfield(u64)] +#[derive(PartialEq, Eq, PartialOrd, Ord, Encode, Decode, DecodeBytesAuto)] +pub struct PackedBlockPos { + #[bits(12)] + pub y: i32, + #[bits(26)] + pub z: i32, + #[bits(26)] + pub x: i32, +} + +impl Encode for BlockPos { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + match self.packed() { + Ok(p) => p.encode(w), + Err(e) => bail!("{e}: {self}"), + } + } +} + +impl Decode for BlockPos { + fn decode(r: &mut &[u8]) -> anyhow::Result { + PackedBlockPos::decode(r).map(Into::into) + } +} + +impl From for BlockPos { + fn from(p: PackedBlockPos) -> Self { + Self { + x: p.x(), + y: p.y(), + z: p.z(), + } + } +} + +impl TryFrom for PackedBlockPos { + type Error = Error; + + fn try_from(pos: BlockPos) -> Result { + pos.packed() + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Error, From)] +#[error("block position of {0} is out of range")] +pub struct Error(pub BlockPos); + +impl From for BlockPos { + fn from(pos: DVec3) -> Self { + Self { + x: pos.x.floor() as i32, + y: pos.y.floor() as i32, + z: pos.z.floor() as i32, + } + } +} + +impl From<(i32, i32, i32)> for BlockPos { + fn from((x, y, z): (i32, i32, i32)) -> Self { + BlockPos::new(x, y, z) + } +} + +impl From for (i32, i32, i32) { + fn from(pos: BlockPos) -> Self { + (pos.x, pos.y, pos.z) + } +} + +impl From<[i32; 3]> for BlockPos { + fn from([x, y, z]: [i32; 3]) -> Self { + BlockPos::new(x, y, z) + } +} + +impl From for [i32; 3] { + fn from(pos: BlockPos) -> Self { + [pos.x, pos.y, pos.z] + } +} + +impl Add for BlockPos { + type Output = Self; + + fn add(self, rhs: IVec3) -> Self::Output { + Self::new(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z) + } +} + +impl Sub for BlockPos { + type Output = Self; + + fn sub(self, rhs: IVec3) -> Self::Output { + Self::new(self.x - rhs.x, self.y - rhs.y, self.z - rhs.z) + } +} + +impl Add for IVec3 { + type Output = BlockPos; + + fn add(self, rhs: BlockPos) -> Self::Output { + BlockPos::new(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z) + } +} + +impl Sub for IVec3 { + type Output = BlockPos; + + fn sub(self, rhs: BlockPos) -> Self::Output { + BlockPos::new(self.x - rhs.x, self.y - rhs.y, self.z - rhs.z) + } +} + +impl fmt::Display for BlockPos { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + // Display the block position as a tuple. + fmt::Debug::fmt(&(self.x, self.y, self.z), f) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn block_position() { + let xzs = [ + (-33554432, true), + (-33554433, false), + (33554431, true), + (33554432, false), + (0, true), + (1, true), + (-1, true), + ]; + let ys = [ + (-2048, true), + (-2049, false), + (2047, true), + (2048, false), + (0, true), + (1, true), + (-1, true), + ]; + + for (x, x_valid) in xzs { + for (y, y_valid) in ys { + for (z, z_valid) in xzs { + let pos = BlockPos::new(x, y, z); + if x_valid && y_valid && z_valid { + let c = pos.packed().unwrap(); + assert_eq!((c.x(), c.y(), c.z()), (pos.x, pos.y, pos.z)); + } else { + assert_eq!(pos.packed(), Err(Error(pos))); + } + } + } + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/bounded.rs b/vendor/valence/crates/valence_protocol/src/bounded.rs new file mode 100644 index 00000000..7ef4020d --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/bounded.rs @@ -0,0 +1,42 @@ +use std::borrow::Borrow; +use std::fmt::Display; + +use derive_more::{AsRef, Deref, DerefMut, From}; + +/// A newtype wrapper for `T` which modifies the [`Encode`](crate::Encode) and +/// [`Decode`](crate::Decode) impls to be bounded by some upper limit `MAX`. +/// Implementations are expected to error eagerly if the limit is exceeded. +/// +/// What exactly `MAX` represents depends on the type `T`. Here are some +/// instances: +/// - **arrays/slices**: The maximum number of elements. +/// - **strings**: The maximum number of utf16 code units. +/// - **[`RawBytes`]**: The maximum number of bytes. +/// +/// [`RawBytes`]: crate::RawBytes +#[derive( + Copy, Clone, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Deref, DerefMut, AsRef, From, +)] +pub struct Bounded(pub T); + +impl Bounded { + pub fn map(self, f: impl FnOnce(T) -> U) -> Bounded { + Bounded(f(self.0)) + } + + pub fn map_into>(self) -> Bounded { + Bounded(self.0.into()) + } +} + +impl Borrow for Bounded { + fn borrow(&self) -> &T { + &self.0 + } +} + +impl Display for Bounded { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/byte_angle.rs b/vendor/valence/crates/valence_protocol/src/byte_angle.rs new file mode 100644 index 00000000..5b0b96eb --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/byte_angle.rs @@ -0,0 +1,51 @@ +use std::f32::consts::TAU; +use std::fmt; +use std::io::Write; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// Represents an angle in steps of 1/256 of a full turn. +#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, DecodeBytesAuto)] +pub struct ByteAngle(pub u8); + +impl ByteAngle { + pub fn from_degrees(f: f32) -> ByteAngle { + ByteAngle((f.rem_euclid(360.0) / 360.0 * 256.0).round() as u8) + } + + pub fn from_radians(f: f32) -> ByteAngle { + ByteAngle((f.rem_euclid(TAU) / TAU * 256.0).round() as u8) + } + + pub fn to_degrees(self) -> f32 { + self.0 as f32 / 256.0 * 360.0 + } + + pub fn to_radians(self) -> f32 { + self.0 as f32 / 256.0 * TAU + } +} + +impl fmt::Debug for ByteAngle { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for ByteAngle { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}°", self.to_degrees()) + } +} + +impl Encode for ByteAngle { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.0.encode(w) + } +} + +impl Decode for ByteAngle { + fn decode(r: &mut &[u8]) -> anyhow::Result { + u8::decode(r).map(ByteAngle) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/chunk_pos.rs b/vendor/valence/crates/valence_protocol/src/chunk_pos.rs new file mode 100644 index 00000000..ade8fbec --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/chunk_pos.rs @@ -0,0 +1,111 @@ +use valence_math::DVec3; + +use crate::block_pos::BlockPos; +use crate::chunk_section_pos::ChunkSectionPos; +use crate::{BiomePos, Decode, DecodeBytesAuto, Encode}; + +/// The X and Z position of a chunk. +#[derive( + Clone, + Copy, + PartialEq, + Eq, + PartialOrd, + Ord, + Default, + Hash, + Debug, + Encode, + Decode, + DecodeBytesAuto, +)] +pub struct ChunkPos { + /// The X position of the chunk. + pub x: i32, + /// The Z position of the chunk. + pub z: i32, +} + +impl ChunkPos { + /// Constructs a new chunk position. + pub const fn new(x: i32, z: i32) -> Self { + Self { x, z } + } + + pub const fn distance_squared(self, other: Self) -> u64 { + let diff_x = other.x as i64 - self.x as i64; + let diff_z = other.z as i64 - self.z as i64; + + (diff_x * diff_x + diff_z * diff_z) as u64 + } +} + +impl From for ChunkPos { + fn from(pos: BlockPos) -> Self { + Self { + x: pos.x.div_euclid(16), + z: pos.z.div_euclid(16), + } + } +} + +impl From for ChunkPos { + fn from(pos: ChunkSectionPos) -> Self { + Self { x: pos.x, z: pos.z } + } +} + +impl From for ChunkPos { + fn from(pos: BiomePos) -> Self { + Self { + x: pos.x.div_euclid(4), + z: pos.z.div_euclid(4), + } + } +} + +impl From for ChunkPos { + fn from(pos: DVec3) -> Self { + Self { + x: (pos.x / 16.0).floor() as i32, + z: (pos.z / 16.0).floor() as i32, + } + } +} + +impl From<(i32, i32)> for ChunkPos { + fn from((x, z): (i32, i32)) -> Self { + Self { x, z } + } +} + +impl From for (i32, i32) { + fn from(pos: ChunkPos) -> Self { + (pos.x, pos.z) + } +} + +impl From<[i32; 2]> for ChunkPos { + fn from([x, z]: [i32; 2]) -> Self { + Self { x, z } + } +} + +impl From for [i32; 2] { + fn from(pos: ChunkPos) -> Self { + [pos.x, pos.z] + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn chunk_pos_round_trip_conv() { + let p = ChunkPos::new(rand::random(), rand::random()); + + assert_eq!(ChunkPos::from(<(i32, i32)>::from(p)), p); + assert_eq!(ChunkPos::from(<[i32; 2]>::from(p)), p); + } +} diff --git a/vendor/valence/crates/valence_protocol/src/chunk_section_pos.rs b/vendor/valence/crates/valence_protocol/src/chunk_section_pos.rs new file mode 100644 index 00000000..501f5244 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/chunk_section_pos.rs @@ -0,0 +1,104 @@ +use std::fmt; +use std::io::Write; + +use bitfield_struct::bitfield; +use derive_more::From; +use thiserror::Error; + +use crate::{BiomePos, BlockPos, Decode, DecodeBytesAuto, Encode}; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, DecodeBytesAuto)] +pub struct ChunkSectionPos { + pub x: i32, + pub y: i32, + pub z: i32, +} + +impl ChunkSectionPos { + pub const fn new(x: i32, y: i32, z: i32) -> Self { + Self { x, y, z } + } + + pub const fn packed(self) -> Result { + match (self.x, self.y, self.z) { + (-2097152..=2097151, -524288..=524287, -2097152..=2097151) => { + Ok(PackedChunkSectionPos::new() + .with_x(self.x) + .with_y(self.y) + .with_z(self.z)) + } + _ => Err(Error(self)), + } + } +} + +impl fmt::Display for ChunkSectionPos { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Debug::fmt(&(self.x, self.y, self.z), f) + } +} + +impl Encode for ChunkSectionPos { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.packed()?.encode(w) + } +} + +impl Decode for ChunkSectionPos { + fn decode(r: &mut &[u8]) -> anyhow::Result { + PackedChunkSectionPos::decode(r).map(Into::into) + } +} + +impl From for ChunkSectionPos { + fn from(pos: BlockPos) -> Self { + Self { + x: pos.x.div_euclid(16), + y: pos.y.div_euclid(16), + z: pos.z.div_euclid(16), + } + } +} + +impl From for ChunkSectionPos { + fn from(pos: BiomePos) -> Self { + Self { + x: pos.x.div_euclid(4), + y: pos.y.div_euclid(4), + z: pos.z.div_euclid(4), + } + } +} + +#[bitfield(u64)] +#[derive(PartialEq, Eq, Ord, PartialOrd, Encode, Decode, DecodeBytesAuto)] +pub struct PackedChunkSectionPos { + #[bits(20)] + pub y: i32, + #[bits(22)] + pub z: i32, + #[bits(22)] + pub x: i32, +} + +impl From for ChunkSectionPos { + fn from(pos: PackedChunkSectionPos) -> Self { + Self { + x: pos.x(), + y: pos.y(), + z: pos.z(), + } + } +} + +impl TryFrom for PackedChunkSectionPos { + type Error = Error; + + fn try_from(pos: ChunkSectionPos) -> Result { + pos.packed() + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Error, From)] +#[error("chunk section position of {0} is out of range")] +pub struct Error(pub ChunkSectionPos); diff --git a/vendor/valence/crates/valence_protocol/src/decode.rs b/vendor/valence/crates/valence_protocol/src/decode.rs new file mode 100644 index 00000000..201408cd --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/decode.rs @@ -0,0 +1,242 @@ +#[cfg(feature = "encryption")] +use aes::cipher::{BlockDecryptMut, BlockSizeUser, KeyIvInit, generic_array::GenericArray}; +use anyhow::{Context, bail, ensure}; +use bytes::{Buf, BytesMut}; + +#[cfg(feature = "compression")] +use crate::CompressionThreshold; +use crate::var_int::{VarInt, VarIntDecodeError}; +use crate::{Decode, MAX_PACKET_SIZE, Packet}; + +/// The AES block cipher with a 128 bit key, using the CFB-8 mode of +/// operation. +#[cfg(feature = "encryption")] +type Cipher = cfb8::Decryptor; + +#[derive(Default)] +pub struct PacketDecoder { + buf: BytesMut, + #[cfg(feature = "compression")] + decompress_buf: BytesMut, + #[cfg(feature = "compression")] + threshold: CompressionThreshold, + #[cfg(feature = "encryption")] + cipher: Option, +} + +impl PacketDecoder { + pub fn new() -> Self { + Self::default() + } + + pub fn try_next_packet(&mut self) -> anyhow::Result> { + let mut r = &self.buf[..]; + + let packet_len = match VarInt::decode_partial(&mut r) { + Ok(len) => len, + Err(VarIntDecodeError::Incomplete) => return Ok(None), + Err(VarIntDecodeError::TooLarge) => bail!("malformed packet length VarInt"), + }; + + ensure!( + (0..=MAX_PACKET_SIZE).contains(&packet_len), + "packet length of {packet_len} is out of bounds" + ); + + if r.len() < packet_len as usize { + // Not enough data arrived yet. + return Ok(None); + } + + let packet_len_len = VarInt(packet_len).written_size(); + + let mut data; + + #[cfg(feature = "compression")] + if self.threshold.0 >= 0 { + use std::io::Write; + + use bytes::BufMut; + use flate2::write::ZlibDecoder; + + r = &r[..packet_len as usize]; + + let data_len = VarInt::decode(&mut r)?.0; + + ensure!( + (0..MAX_PACKET_SIZE).contains(&data_len), + "decompressed packet length of {data_len} is out of bounds" + ); + + // Is this packet compressed? + if data_len > 0 { + ensure!( + data_len > self.threshold.0, + "decompressed packet length of {data_len} is <= the compression threshold of \ + {}", + self.threshold.0 + ); + + debug_assert!(self.decompress_buf.is_empty()); + + self.decompress_buf.put_bytes(0, data_len as usize); + + // TODO: use libdeflater or zune-inflate? + let mut z = ZlibDecoder::new(&mut self.decompress_buf[..]); + + z.write_all(r)?; + + ensure!( + z.finish()?.is_empty(), + "decompressed packet length is shorter than expected" + ); + + let total_packet_len = VarInt(packet_len).written_size() + packet_len as usize; + + self.buf.advance(total_packet_len); + + data = self.decompress_buf.split(); + } else { + debug_assert_eq!(data_len, 0); + + ensure!( + r.len() <= self.threshold.0 as usize, + "uncompressed packet length of {} exceeds compression threshold of {}", + r.len(), + self.threshold.0 + ); + + let remaining_len = r.len(); + + self.buf.advance(packet_len_len + 1); + + data = self.buf.split_to(remaining_len); + } + } else { + self.buf.advance(packet_len_len); + data = self.buf.split_to(packet_len as usize); + } + + #[cfg(not(feature = "compression"))] + { + self.buf.advance(packet_len_len); + data = self.buf.split_to(packet_len as usize); + } + + // Decode the leading packet ID. + r = &data[..]; + let packet_id = VarInt::decode(&mut r) + .context("failed to decode packet ID")? + .0; + + data.advance(data.len() - r.len()); + + Ok(Some(PacketFrame { + id: packet_id, + body: data, + })) + } + + #[cfg(feature = "compression")] + pub fn compression(&self) -> CompressionThreshold { + self.threshold + } + + #[cfg(feature = "compression")] + pub fn set_compression(&mut self, threshold: CompressionThreshold) { + self.threshold = threshold; + } + + #[cfg(feature = "encryption")] + pub fn enable_encryption(&mut self, key: &[u8; 16]) { + assert!(self.cipher.is_none(), "encryption is already enabled"); + + let mut cipher = Cipher::new_from_slices(key, key).expect("invalid key"); + + // Don't forget to decrypt the data we already have. + Self::decrypt_bytes(&mut cipher, &mut self.buf); + + self.cipher = Some(cipher); + } + + /// Decrypts the provided byte slice in place using the cipher, without + /// consuming the cipher. + #[cfg(feature = "encryption")] + fn decrypt_bytes(cipher: &mut Cipher, bytes: &mut [u8]) { + for chunk in bytes.chunks_mut(Cipher::block_size()) { + let gen_arr = GenericArray::from_mut_slice(chunk); + cipher.decrypt_block_mut(gen_arr); + } + } + + pub fn queue_bytes(&mut self, mut bytes: BytesMut) { + #![allow(unused_mut)] + + #[cfg(feature = "encryption")] + if let Some(cipher) = &mut self.cipher { + Self::decrypt_bytes(cipher, &mut bytes); + } + + self.buf.unsplit(bytes); + } + + pub fn queue_slice(&mut self, bytes: &[u8]) { + #[cfg(feature = "encryption")] + let len = self.buf.len(); + + self.buf.extend_from_slice(bytes); + + #[cfg(feature = "encryption")] + if let Some(cipher) = &mut self.cipher { + let slice = &mut self.buf[len..]; + Self::decrypt_bytes(cipher, slice); + } + } + + pub fn take_capacity(&mut self) -> BytesMut { + self.buf.split_off(self.buf.len()) + } + + pub fn reserve(&mut self, additional: usize) { + self.buf.reserve(additional); + } +} + +#[derive(Clone, Debug)] +pub struct PacketFrame { + /// The ID of the decoded packet. + pub id: i32, + /// The contents of the packet after the leading VarInt ID. + pub body: BytesMut, +} + +impl PacketFrame { + /// Attempts to decode this packet as type `P`. An error is returned if the + /// packet ID does not match, the body of the packet failed to decode, or + /// some input was missed. + pub fn decode

(&self) -> anyhow::Result

+ where + P: Packet + Decode, + { + ensure!( + P::ID == self.id, + "packet ID mismatch while decoding '{}': expected {}, got {}", + P::NAME, + P::ID, + self.id + ); + + let mut r = &self.body[..]; + + let pkt = P::decode(&mut r)?; + + ensure!( + r.is_empty(), + "missed {} bytes while decoding '{}'", + r.len(), + P::NAME + ); + + Ok(pkt) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/difficulty.rs b/vendor/valence/crates/valence_protocol/src/difficulty.rs new file mode 100644 index 00000000..f67ce296 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/difficulty.rs @@ -0,0 +1,9 @@ +use crate::{Decode, DecodeBytesAuto, Encode}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Difficulty { + Peaceful, + Easy, + Normal, + Hard, +} diff --git a/vendor/valence/crates/valence_protocol/src/direction.rs b/vendor/valence/crates/valence_protocol/src/direction.rs new file mode 100644 index 00000000..c9e8774d --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/direction.rs @@ -0,0 +1,19 @@ +use bevy_ecs::prelude::*; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Component)] +pub enum Direction { + /// -Y + Down, + /// +Y + Up, + /// -Z + North, + /// +Z + South, + /// -X + West, + /// +X + East, +} diff --git a/vendor/valence/crates/valence_protocol/src/encode.rs b/vendor/valence/crates/valence_protocol/src/encode.rs new file mode 100644 index 00000000..342c8f60 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/encode.rs @@ -0,0 +1,390 @@ +use std::io::Write; + +#[cfg(feature = "encryption")] +use aes::cipher::generic_array::GenericArray; +#[cfg(feature = "encryption")] +use aes::cipher::{BlockEncryptMut, BlockSizeUser, KeyIvInit}; +use anyhow::ensure; +use bytes::{BufMut, BytesMut}; +use tracing::warn; + +use crate::var_int::VarInt; +use crate::{CompressionThreshold, Encode, MAX_PACKET_SIZE, Packet}; + +/// The AES block cipher with a 128 bit key, using the CFB-8 mode of +/// operation. +#[cfg(feature = "encryption")] +type Cipher = cfb8::Encryptor; + +#[derive(Default)] +pub struct PacketEncoder { + buf: BytesMut, + #[cfg(feature = "compression")] + compress_buf: Vec, + #[cfg(feature = "compression")] + threshold: CompressionThreshold, + #[cfg(feature = "encryption")] + cipher: Option, +} + +impl PacketEncoder { + pub fn new() -> Self { + Self::default() + } + + #[inline] + pub fn append_bytes(&mut self, bytes: &[u8]) { + self.buf.extend_from_slice(bytes) + } + + pub fn prepend_packet

(&mut self, pkt: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + let start_len = self.buf.len(); + self.append_packet(pkt)?; + + let end_len = self.buf.len(); + let total_packet_len = end_len - start_len; + + // 1) Move everything back by the length of the packet. + // 2) Move the packet to the new space at the front. + // 3) Truncate the old packet away. + self.buf.put_bytes(0, total_packet_len); + self.buf.copy_within(..end_len, total_packet_len); + self.buf.copy_within(total_packet_len + start_len.., 0); + self.buf.truncate(end_len); + + Ok(()) + } + + pub fn append_packet

(&mut self, pkt: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + let start_len = self.buf.len(); + + pkt.encode_with_id((&mut self.buf).writer())?; + + let data_len = self.buf.len() - start_len; + + #[cfg(feature = "compression")] + if self.threshold.0 >= 0 { + use std::io::Read; + + use flate2::Compression; + use flate2::bufread::ZlibEncoder; + + if data_len > self.threshold.0 as usize { + let mut z = ZlibEncoder::new(&self.buf[start_len..], Compression::new(4)); + + self.compress_buf.clear(); + + let data_len_size = VarInt(data_len as i32).written_size(); + + let packet_len = data_len_size + z.read_to_end(&mut self.compress_buf)?; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + drop(z); + + self.buf.truncate(start_len); + + let mut writer = (&mut self.buf).writer(); + + VarInt(packet_len as i32).encode(&mut writer)?; + VarInt(data_len as i32).encode(&mut writer)?; + self.buf.extend_from_slice(&self.compress_buf); + } else { + let data_len_size = 1; + let packet_len = data_len_size + data_len; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + let packet_len_size = VarInt(packet_len as i32).written_size(); + + let data_prefix_len = packet_len_size + data_len_size; + + self.buf.put_bytes(0, data_prefix_len); + self.buf + .copy_within(start_len..start_len + data_len, start_len + data_prefix_len); + + let mut front = &mut self.buf[start_len..]; + + VarInt(packet_len as i32).encode(&mut front)?; + // Zero for no compression on this packet. + VarInt(0).encode(front)?; + } + + return Ok(()); + } + + let packet_len = data_len; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + let packet_len_size = VarInt(packet_len as i32).written_size(); + + self.buf.put_bytes(0, packet_len_size); + self.buf + .copy_within(start_len..start_len + data_len, start_len + packet_len_size); + + let front = &mut self.buf[start_len..]; + VarInt(packet_len as i32).encode(front)?; + + Ok(()) + } + + /// Takes all the packets written so far and encrypts them if encryption is + /// enabled. + pub fn take(&mut self) -> BytesMut { + #[cfg(feature = "encryption")] + if let Some(cipher) = &mut self.cipher { + for chunk in self.buf.chunks_mut(Cipher::block_size()) { + let gen_arr = GenericArray::from_mut_slice(chunk); + cipher.encrypt_block_mut(gen_arr); + } + } + + self.buf.split() + } + + pub fn clear(&mut self) { + self.buf.clear(); + } + + #[cfg(feature = "compression")] + pub fn set_compression(&mut self, threshold: CompressionThreshold) { + self.threshold = threshold; + } + + /// Initializes the cipher with the given key. All future packets **and any + /// that have not been [taken] yet** are encrypted. + /// + /// [taken]: Self::take + /// + /// # Panics + /// + /// Panics if encryption is already enabled. + #[cfg(feature = "encryption")] + pub fn enable_encryption(&mut self, key: &[u8; 16]) { + assert!(self.cipher.is_none(), "encryption is already enabled"); + self.cipher = Some(Cipher::new_from_slices(key, key).expect("invalid key")); + } +} + +/// Types that can have packets written to them. +pub trait WritePacket { + /// Writes a packet to this object. Encoding errors are typically logged and + /// discarded. + fn write_packet

(&mut self, packet: &P) + where + P: Packet + Encode, + { + if let Err(e) = self.write_packet_fallible(packet) { + warn!("failed to write packet '{}': {e:#}", P::NAME); + } + } + + /// Writes a packet to this object. The result of encoding the packet is + /// returned. + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode; + + /// Copies raw packet data directly into this object. Don't use this unless + /// you know what you're doing. + fn write_packet_bytes(&mut self, bytes: &[u8]); +} + +impl WritePacket for &mut W { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + (*self).write_packet_fallible(packet) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + (*self).write_packet_bytes(bytes) + } +} + +impl WritePacket for bevy_ecs::world::Mut<'_, T> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.as_mut().write_packet_fallible(packet) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.as_mut().write_packet_bytes(bytes) + } +} + +/// An implementor of [`WritePacket`] backed by a `Vec` mutable reference. +/// +/// Packets are written by appending to the contained vec. If an error occurs +/// while writing, the written bytes are truncated away. +#[derive(Debug)] +pub struct PacketWriter<'a> { + pub buf: &'a mut Vec, + pub threshold: CompressionThreshold, +} + +impl<'a> PacketWriter<'a> { + pub fn new(buf: &'a mut Vec, threshold: CompressionThreshold) -> Self { + Self { buf, threshold } + } +} + +impl WritePacket for PacketWriter<'_> { + #[cfg_attr(not(feature = "compression"), track_caller)] + fn write_packet_fallible

(&mut self, pkt: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + let start = self.buf.len(); + + let res; + + if self.threshold.0 >= 0 { + #[cfg(feature = "compression")] + { + res = encode_packet_compressed(self.buf, pkt, self.threshold.0 as u32); + } + + #[cfg(not(feature = "compression"))] + { + panic!("\"compression\" feature must be enabled to write compressed packets"); + } + } else { + res = encode_packet(self.buf, pkt) + }; + + if res.is_err() { + self.buf.truncate(start); + } + + res + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + if let Err(e) = self.buf.write_all(bytes) { + warn!("failed to write packet bytes: {e:#}"); + } + } +} + +impl WritePacket for PacketEncoder { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.append_packet(packet) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.append_bytes(bytes) + } +} + +fn encode_packet

(buf: &mut Vec, pkt: &P) -> anyhow::Result<()> +where + P: Packet + Encode, +{ + let start_len = buf.len(); + + pkt.encode_with_id(&mut *buf)?; + + let packet_len = buf.len() - start_len; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + let packet_len_size = VarInt(packet_len as i32).written_size(); + + buf.put_bytes(0, packet_len_size); + buf.copy_within( + start_len..start_len + packet_len, + start_len + packet_len_size, + ); + + let front = &mut buf[start_len..]; + VarInt(packet_len as i32).encode(front)?; + + Ok(()) +} + +#[cfg(feature = "compression")] +fn encode_packet_compressed

(buf: &mut Vec, pkt: &P, threshold: u32) -> anyhow::Result<()> +where + P: Packet + Encode, +{ + use std::io::Read; + + use flate2::Compression; + use flate2::bufread::ZlibEncoder; + + let start_len = buf.len(); + + pkt.encode_with_id(&mut *buf)?; + + let data_len = buf.len() - start_len; + + if data_len > threshold as usize { + let mut z = ZlibEncoder::new(&buf[start_len..], Compression::new(4)); + + let mut scratch = vec![]; + + let packet_len = VarInt(data_len as i32).written_size() + z.read_to_end(&mut scratch)?; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + drop(z); + + buf.truncate(start_len); + + VarInt(packet_len as i32).encode(&mut *buf)?; + VarInt(data_len as i32).encode(&mut *buf)?; + buf.extend_from_slice(&scratch); + } else { + let data_len_size = 1; + let packet_len = data_len_size + data_len; + + ensure!( + packet_len <= MAX_PACKET_SIZE as usize, + "packet exceeds maximum length" + ); + + let packet_len_size = VarInt(packet_len as i32).written_size(); + + let data_prefix_len = packet_len_size + data_len_size; + + buf.put_bytes(0, data_prefix_len); + buf.copy_within(start_len..start_len + data_len, start_len + data_prefix_len); + + let mut front = &mut buf[start_len..]; + + VarInt(packet_len as i32).encode(&mut front)?; + // Zero for no compression on this packet. + VarInt(0).encode(front)?; + } + + Ok(()) +} diff --git a/vendor/valence/crates/valence_protocol/src/game_mode.rs b/vendor/valence/crates/valence_protocol/src/game_mode.rs new file mode 100644 index 00000000..a6034f90 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/game_mode.rs @@ -0,0 +1,45 @@ +use std::io::Write; + +use anyhow::bail; +use bevy_ecs::prelude::*; +use derive_more::{From, Into}; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +#[derive( + Copy, Clone, PartialEq, Eq, Debug, Default, Encode, Decode, DecodeBytesAuto, Component, +)] +pub enum GameMode { + #[default] + Survival, + Creative, + Adventure, + Spectator, +} + +/// An optional [`GameMode`] with `None` encoded as `-1`. Isomorphic to +/// `Option`. +#[derive(Copy, Clone, PartialEq, Eq, Default, Debug, From, Into, DecodeBytesAuto)] +pub struct OptGameMode(pub Option); + +impl Encode for OptGameMode { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + match self.0 { + Some(gm) => (gm as i8).encode(w), + None => (-1i8).encode(w), + } + } +} + +impl Decode for OptGameMode { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self(match i8::decode(r)? { + -1 => None, + 0 => Some(GameMode::Survival), + 1 => Some(GameMode::Creative), + 2 => Some(GameMode::Adventure), + 3 => Some(GameMode::Spectator), + other => bail!("invalid game mode byte of {other}"), + })) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/global_pos.rs b/vendor/valence/crates/valence_protocol/src/global_pos.rs new file mode 100644 index 00000000..268423d5 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/global_pos.rs @@ -0,0 +1,10 @@ +use valence_ident::Ident; + +use crate::block_pos::BlockPos; +use crate::{DecodeBytes, Encode}; + +#[derive(Clone, PartialEq, Eq, Debug, Encode, DecodeBytes)] +pub struct GlobalPos { + pub dimension_name: Ident, + pub position: BlockPos, +} diff --git a/vendor/valence/crates/valence_protocol/src/hand.rs b/vendor/valence/crates/valence_protocol/src/hand.rs new file mode 100644 index 00000000..475ad3e3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/hand.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode}; + +#[derive(Copy, Clone, PartialEq, Eq, Default, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Hand { + #[default] + Main, + Off, +} diff --git a/vendor/valence/crates/valence_protocol/src/impls.rs b/vendor/valence/crates/valence_protocol/src/impls.rs new file mode 100644 index 00000000..0b1b4f9e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls.rs @@ -0,0 +1,25 @@ +//! Implementations of [`Encode`](crate::Encode) and [`Decode`](crate::Decode) +//! on foreign types. + +mod map; +mod math; +mod other; +mod pointer; +mod primitive; +mod sequence; +mod string; +mod tuple; + +use std::mem; + +/// Prevents preallocating too much memory in case we get a malicious or invalid +/// sequence length. +fn cautious_capacity(size_hint: usize) -> usize { + const MAX_PREALLOC_BYTES: usize = 1024 * 1024; + + if mem::size_of::() == 0 { + 0 + } else { + size_hint.min(MAX_PREALLOC_BYTES / mem::size_of::()) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/impls/map.rs b/vendor/valence/crates/valence_protocol/src/impls/map.rs new file mode 100644 index 00000000..a0070279 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/map.rs @@ -0,0 +1,299 @@ +use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet}; +use std::hash::{BuildHasher, Hash}; +use std::io::Write; + +use anyhow::ensure; +use bytes::Bytes; + +use crate::impls::cautious_capacity; +use crate::{Decode, DecodeBytes, Encode, VarInt}; + +impl Encode for BTreeSet +where + T: Encode, +{ + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + + ensure!( + len <= i32::MAX as usize, + "length of B-tree set ({len}) exceeds i32::MAX" + ); + + VarInt(len as i32).encode(&mut w)?; + + for val in self { + val.encode(&mut w)?; + } + + Ok(()) + } +} + +impl Decode for BTreeSet +where + T: Ord + Decode, +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!( + len >= 0, + "attempt to decode B-tree set with negative length" + ); + let len = len as usize; + + let mut set = BTreeSet::new(); + + for _ in 0..len { + ensure!( + set.insert(T::decode(r)?), + "encountered duplicate item while decoding B-tree set" + ); + } + + Ok(set) + } +} + +impl DecodeBytes for BTreeSet +where + T: Ord + DecodeBytes, +{ + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!( + len >= 0, + "attempt to decode B-tree set with negative length" + ); + let len = len as usize; + + let mut set = BTreeSet::new(); + + for _ in 0..len { + ensure!( + set.insert(T::decode_bytes(r)?), + "encountered duplicate item while decoding B-tree set" + ); + } + + Ok(set) + } +} + +impl Encode for HashSet +where + T: Encode, +{ + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + + ensure!( + len <= i32::MAX as usize, + "length of hash set ({len}) exceeds i32::MAX" + ); + + VarInt(len as i32).encode(&mut w)?; + + for val in self { + val.encode(&mut w)?; + } + + Ok(()) + } +} + +impl Decode for HashSet +where + T: Eq + Hash + Decode, + S: BuildHasher + Default, +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode hash set with negative length"); + let len = len as usize; + + let mut set = HashSet::with_capacity_and_hasher(cautious_capacity::(len), S::default()); + + for _ in 0..len { + ensure!( + set.insert(T::decode(r)?), + "encountered duplicate item while decoding hash set" + ); + } + + Ok(set) + } +} + +impl DecodeBytes for HashSet +where + T: Eq + Hash + DecodeBytes, + S: BuildHasher + Default, +{ + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode hash set with negative length"); + let len = len as usize; + + let mut set = HashSet::with_capacity_and_hasher(cautious_capacity::(len), S::default()); + + for _ in 0..len { + ensure!( + set.insert(T::decode_bytes(r)?), + "encountered duplicate item while decoding hash set" + ); + } + + Ok(set) + } +} + +impl Encode for BTreeMap +where + K: Encode, + V: Encode, +{ + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + + ensure!( + len <= i32::MAX as usize, + "length of B-tree map ({len}) exceeds i32::MAX" + ); + + VarInt(len as i32).encode(&mut w)?; + + for pair in self.iter() { + pair.encode(&mut w)?; + } + + Ok(()) + } +} + +impl Decode for BTreeMap +where + K: Ord + Decode, + V: Decode, +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!( + len >= 0, + "attempt to decode B-tree map with negative length" + ); + let len = len as usize; + + let mut map = BTreeMap::new(); + + for _ in 0..len { + ensure!( + map.insert(K::decode(r)?, V::decode(r)?).is_none(), + "encountered duplicate key while decoding B-tree map" + ); + } + + Ok(map) + } +} + +impl DecodeBytes for BTreeMap +where + K: Ord + DecodeBytes, + V: DecodeBytes, +{ + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!( + len >= 0, + "attempt to decode B-tree map with negative length" + ); + let len = len as usize; + + let mut map = BTreeMap::new(); + + for _ in 0..len { + ensure!( + map.insert(K::decode_bytes(r)?, V::decode_bytes(r)?) + .is_none(), + "encountered duplicate key while decoding B-tree map" + ); + } + + Ok(map) + } +} + +impl Encode for HashMap +where + K: Encode, + V: Encode, +{ + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + + ensure!( + len <= i32::MAX as usize, + "length of hash map ({len}) exceeds i32::MAX" + ); + + VarInt(len as i32).encode(&mut w)?; + + for pair in self.iter() { + pair.encode(&mut w)?; + } + + Ok(()) + } +} + +impl Decode for HashMap +where + K: Eq + Hash + Decode, + V: Decode, + S: BuildHasher + Default, +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode hash map with negative length"); + let len = len as usize; + + let mut map = + HashMap::with_capacity_and_hasher(cautious_capacity::<(K, V)>(len), S::default()); + + for _ in 0..len { + ensure!( + map.insert(K::decode(r)?, V::decode(r)?).is_none(), + "encountered duplicate item while decoding hash map" + ); + } + + Ok(map) + } +} + +impl DecodeBytes for HashMap +where + K: Eq + Hash + DecodeBytes, + V: DecodeBytes, + S: BuildHasher + Default, +{ + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode hash map with negative length"); + let len = len as usize; + + let mut map = + HashMap::with_capacity_and_hasher(cautious_capacity::<(K, V)>(len), S::default()); + + for _ in 0..len { + ensure!( + map.insert(K::decode_bytes(r)?, V::decode_bytes(r)?) + .is_none(), + "encountered duplicate item while decoding hash map" + ); + } + + Ok(map) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/impls/math.rs b/vendor/valence/crates/valence_protocol/src/impls/math.rs new file mode 100644 index 00000000..fb817f97 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/math.rs @@ -0,0 +1,183 @@ +use std::io::Write; + +use valence_math::*; + +use crate::{Decode, Encode, impl_decode_bytes_auto}; + +impl Encode for Vec2 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(w) + } +} + +impl Decode for Vec2 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + x: f32::decode(r)?, + y: f32::decode(r)?, + }) + } +} + +impl_decode_bytes_auto!(Vec2); + +impl Encode for Vec3 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(w) + } +} + +impl Decode for Vec3 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + x: f32::decode(r)?, + y: f32::decode(r)?, + z: f32::decode(r)?, + }) + } +} + +impl_decode_bytes_auto!(Vec3); + +impl Encode for Vec3A { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(w) + } +} + +impl Decode for Vec3A { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self::new(f32::decode(r)?, f32::decode(r)?, f32::decode(r)?)) + } +} + +impl_decode_bytes_auto!(Vec3A); + +impl Encode for IVec3 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(w) + } +} + +impl Decode for IVec3 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + x: i32::decode(r)?, + y: i32::decode(r)?, + z: i32::decode(r)?, + }) + } +} + +impl_decode_bytes_auto!(IVec3); + +impl Encode for Vec4 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(&mut w)?; + self.w.encode(&mut w) + } +} + +impl Decode for Vec4 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self::new( + f32::decode(r)?, + f32::decode(r)?, + f32::decode(r)?, + f32::decode(r)?, + )) + } +} + +impl_decode_bytes_auto!(Vec4); + +impl Encode for Quat { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(&mut w)?; + self.w.encode(w) + } +} + +impl Decode for Quat { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self::from_xyzw( + f32::decode(r)?, + f32::decode(r)?, + f32::decode(r)?, + f32::decode(r)?, + )) + } +} + +impl_decode_bytes_auto!(Quat); + +impl Encode for DVec2 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(w) + } +} + +impl Decode for DVec2 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + x: f64::decode(r)?, + y: f64::decode(r)?, + }) + } +} + +impl_decode_bytes_auto!(DVec2); + +impl Encode for DVec3 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(w) + } +} + +impl Decode for DVec3 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self { + x: f64::decode(r)?, + y: f64::decode(r)?, + z: f64::decode(r)?, + }) + } +} + +impl_decode_bytes_auto!(DVec3); + +impl Encode for DQuat { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.x.encode(&mut w)?; + self.y.encode(&mut w)?; + self.z.encode(&mut w)?; + self.w.encode(w) + } +} + +impl Decode for DQuat { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Self::from_xyzw( + f64::decode(r)?, + f64::decode(r)?, + f64::decode(r)?, + f64::decode(r)?, + )) + } +} + +impl_decode_bytes_auto!(DQuat); diff --git a/vendor/valence/crates/valence_protocol/src/impls/other.rs b/vendor/valence/crates/valence_protocol/src/impls/other.rs new file mode 100644 index 00000000..af94d58e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/other.rs @@ -0,0 +1,156 @@ +use std::io::Write; + +use anyhow::Context; +use bytes::Bytes; +use uuid::Uuid; +use valence_bytes::Utf8Bytes; +use valence_generated::block::{BlockEntityKind, BlockKind, BlockState}; +use valence_generated::item::ItemKind; +use valence_ident::Ident; +use valence_nbt::Compound; + +use crate::{Decode, DecodeBytes, Encode, VarInt, impl_decode_bytes_auto}; + +impl Encode for Option { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match self { + Some(t) => { + true.encode(&mut w)?; + t.encode(w) + } + None => false.encode(w), + } + } +} + +impl Decode for Option { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(match bool::decode(r)? { + true => Some(T::decode(r)?), + false => None, + }) + } +} + +impl DecodeBytes for Option { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(match bool::decode_bytes(r)? { + true => Some(T::decode_bytes(r)?), + false => None, + }) + } +} + +impl Encode for Uuid { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_u128().encode(w) + } +} + +impl Decode for Uuid { + fn decode(r: &mut &[u8]) -> anyhow::Result { + u128::decode(r).map(Uuid::from_u128) + } +} + +impl_decode_bytes_auto!(Uuid); + +impl Encode for Compound { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + Ok(valence_nbt::to_binary(self, w, "")?) + } +} + +impl Decode for Compound { + fn decode(r: &mut &[u8]) -> anyhow::Result { + // Check for null compound. + if r.first() == Some(&0) { + *r = &r[1..]; + return Ok(Compound::new()); + } + + // TODO: consider if we need to bound the input slice or add some other + // mitigation to prevent excessive memory usage on hostile input. + Ok(valence_nbt::from_binary(r)?.0) + } +} + +impl_decode_bytes_auto!(Compound); + +impl Encode for Ident { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_ref().encode(w) + } +} + +impl DecodeBytes for Ident { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(Ident::try_from(Utf8Bytes::decode_bytes(r)?)?) + } +} + +impl Encode for BlockState { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + VarInt(self.to_raw() as i32).encode(w) + } +} + +impl Decode for BlockState { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let id = VarInt::decode(r)?.0; + let errmsg = "invalid block state ID"; + + BlockState::from_raw(id.try_into().context(errmsg)?).context(errmsg) + } +} + +impl_decode_bytes_auto!(BlockState); + +impl Encode for BlockKind { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + VarInt(self.to_raw() as i32).encode(w) + } +} + +impl Decode for BlockKind { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let id = VarInt::decode(r)?.0; + let errmsg = "invalid block kind ID"; + + BlockKind::from_raw(id.try_into().context(errmsg)?).context(errmsg) + } +} + +impl_decode_bytes_auto!(BlockKind); + +impl Encode for BlockEntityKind { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + VarInt(self.id() as i32).encode(w) + } +} + +impl Decode for BlockEntityKind { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let id = VarInt::decode(r)?; + Self::from_id(id.0 as u32).with_context(|| format!("id {}", id.0)) + } +} + +impl_decode_bytes_auto!(BlockEntityKind); + +impl Encode for ItemKind { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + VarInt(self.to_raw() as i32).encode(w) + } +} + +impl Decode for ItemKind { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let id = VarInt::decode(r)?.0; + let errmsg = "invalid item ID"; + + ItemKind::from_raw(id.try_into().context(errmsg)?).context(errmsg) + } +} + +impl_decode_bytes_auto!(ItemKind); diff --git a/vendor/valence/crates/valence_protocol/src/impls/pointer.rs b/vendor/valence/crates/valence_protocol/src/impls/pointer.rs new file mode 100644 index 00000000..8be556fd --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/pointer.rs @@ -0,0 +1,115 @@ +use std::borrow::Cow; +use std::io::Write; +use std::rc::Rc; +use std::sync::Arc; + +use valence_bytes::Bytes; + +use crate::{Decode, DecodeBytes, Encode}; + +impl Encode for &T { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + (**self).encode(w) + } +} + +impl Encode for &mut T { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + (**self).encode(w) + } +} + +impl Encode for Box { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_ref().encode(w) + } +} + +impl Decode for Box { + fn decode(r: &mut &[u8]) -> anyhow::Result { + T::decode(r).map(Box::new) + } +} + +impl DecodeBytes for Box { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + T::decode_bytes(r).map(Box::new) + } +} + +impl Encode for Rc { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_ref().encode(w) + } +} + +impl Decode for Rc { + fn decode(r: &mut &[u8]) -> anyhow::Result { + T::decode(r).map(Rc::new) + } +} + +impl DecodeBytes for Rc { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + T::decode_bytes(r).map(Rc::new) + } +} + +impl Encode for Arc { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_ref().encode(w) + } +} + +impl Decode for Arc { + fn decode(r: &mut &[u8]) -> anyhow::Result { + T::decode(r).map(Arc::new) + } +} + +impl DecodeBytes for Arc { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + T::decode_bytes(r).map(Arc::new) + } +} + +impl<'a, B> Encode for Cow<'a, B> +where + B: ToOwned + Encode + ?Sized, +{ + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_ref().encode(w) + } +} + +impl<'a, B> Decode for Cow<'a, B> +where + B: ToOwned + ?Sized, + B::Owned: Decode, +{ + fn decode(r: &mut &[u8]) -> anyhow::Result { + B::Owned::decode(r).map(Cow::Owned) + } +} + +impl<'a, B> DecodeBytes for Cow<'a, B> +where + B: ToOwned + ?Sized, + B::Owned: DecodeBytes, +{ + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + B::Owned::decode_bytes(r).map(Cow::Owned) + } +} + +// impl<'a, 'b, B> Decode<'a> for Cow<'b, B> +// where +// B: ToOwned + ?Sized, +// B::Owned: Decode<'a>, +// &'b B: Decode<'a>, +// { +// fn decode(r: &mut &'a [u8]) -> anyhow::Result { +// let decoded: &'b B = Decode::decode(r)?; +// Ok(Cow::Borrowed(decoded)) +// } +// } diff --git a/vendor/valence/crates/valence_protocol/src/impls/primitive.rs b/vendor/valence/crates/valence_protocol/src/impls/primitive.rs new file mode 100644 index 00000000..84ec92c3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/primitive.rs @@ -0,0 +1,222 @@ +use std::io::Write; +use std::slice; + +use anyhow::ensure; +use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; + +use crate::{Decode, Encode, impl_decode_bytes_auto}; + +impl Encode for bool { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u8(*self as u8)?) + } + + fn encode_slice(slice: &[bool], mut w: impl Write) -> anyhow::Result<()> { + // SAFETY: Bools have the same layout as u8. + let bytes = unsafe { slice::from_raw_parts(slice.as_ptr() as *const u8, slice.len()) }; + // Bools are guaranteed to have the correct bit pattern. + Ok(w.write_all(bytes)?) + } +} + +impl Decode for bool { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let n = r.read_u8()?; + ensure!(n <= 1, "decoded boolean byte is not 0 or 1 (got {n})"); + Ok(n == 1) + } +} + +impl_decode_bytes_auto!(bool); + +impl Encode for u8 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u8(*self)?) + } + + fn encode_slice(slice: &[u8], mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_all(slice)?) + } +} + +impl Decode for u8 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_u8()?) + } +} + +impl_decode_bytes_auto!(u8); + +impl Encode for i8 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_i8(*self)?) + } + + fn encode_slice(slice: &[i8], mut w: impl Write) -> anyhow::Result<()> { + // SAFETY: i8 has the same layout as u8. + let bytes = unsafe { slice::from_raw_parts(slice.as_ptr() as *const u8, slice.len()) }; + Ok(w.write_all(bytes)?) + } +} + +impl Decode for i8 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_i8()?) + } +} + +impl_decode_bytes_auto!(i8); + +impl Encode for u16 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u16::(*self)?) + } +} + +impl Decode for u16 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_u16::()?) + } +} + +impl_decode_bytes_auto!(u16); + +impl Encode for i16 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_i16::(*self)?) + } +} + +impl Decode for i16 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_i16::()?) + } +} + +impl_decode_bytes_auto!(i16); + +impl Encode for u32 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u32::(*self)?) + } +} + +impl Decode for u32 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_u32::()?) + } +} + +impl_decode_bytes_auto!(u32); + +impl Encode for i32 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_i32::(*self)?) + } +} + +impl Decode for i32 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_i32::()?) + } +} + +impl_decode_bytes_auto!(i32); + +impl Encode for u64 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u64::(*self)?) + } +} + +impl Decode for u64 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_u64::()?) + } +} + +impl_decode_bytes_auto!(u64); + +impl Encode for i64 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_i64::(*self)?) + } +} + +impl Decode for i64 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_i64::()?) + } +} + +impl_decode_bytes_auto!(i64); + +impl Encode for u128 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_u128::(*self)?) + } +} + +impl Decode for u128 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_u128::()?) + } +} + +impl_decode_bytes_auto!(u128); + +impl Encode for i128 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_i128::(*self)?) + } +} + +impl Decode for i128 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(r.read_i128::()?) + } +} + +impl_decode_bytes_auto!(i128); + +impl Encode for f32 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + ensure!( + self.is_finite(), + "attempt to encode non-finite f32 ({})", + self + ); + Ok(w.write_f32::(*self)?) + } +} + +impl Decode for f32 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let f = r.read_f32::()?; + ensure!(f.is_finite(), "attempt to decode non-finite f32 ({f})"); + Ok(f) + } +} + +impl_decode_bytes_auto!(f32); + +impl Encode for f64 { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + ensure!( + self.is_finite(), + "attempt to encode non-finite f64 ({})", + self + ); + Ok(w.write_f64::(*self)?) + } +} + +impl Decode for f64 { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let f = r.read_f64::()?; + ensure!(f.is_finite(), "attempt to decode non-finite f64 ({f})"); + Ok(f) + } +} + +impl_decode_bytes_auto!(f64); diff --git a/vendor/valence/crates/valence_protocol/src/impls/sequence.rs b/vendor/valence/crates/valence_protocol/src/impls/sequence.rs new file mode 100644 index 00000000..298c27da --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/sequence.rs @@ -0,0 +1,306 @@ +use std::io::Write; +use std::mem::{self, MaybeUninit}; + +use anyhow::ensure; +use valence_bytes::{Bytes, CowBytes, CowFixedBytes, FixedBytes}; + +use crate::impls::cautious_capacity; +use crate::{Bounded, Decode, DecodeBytes, Encode, VarInt}; + +/// Like tuples, fixed-length arrays are encoded and decoded without a VarInt +/// length prefix. +impl Encode for [T; N] { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + T::encode_slice(self, w) + } +} + +impl Decode for [T; N] { + fn decode(r: &mut &[u8]) -> anyhow::Result { + // TODO: rewrite using std::array::try_from_fn when stabilized? + + let mut data: [MaybeUninit; N] = unsafe { MaybeUninit::uninit().assume_init() }; + + for (i, elem) in data.iter_mut().enumerate() { + match T::decode(r) { + Ok(val) => { + elem.write(val); + } + Err(e) => { + // Call destructors for values decoded so far. + for elem in &mut data[..i] { + unsafe { elem.assume_init_drop() }; + } + return Err(e); + } + } + } + + // All values in `data` are initialized. + unsafe { Ok(mem::transmute_copy(&data)) } + } +} + +impl DecodeBytes for [T; N] { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + // TODO: rewrite using std::array::try_from_fn when stabilized? + + let mut data: [MaybeUninit; N] = unsafe { MaybeUninit::uninit().assume_init() }; + + for (i, elem) in data.iter_mut().enumerate() { + match T::decode_bytes(r) { + Ok(val) => { + elem.write(val); + } + Err(e) => { + // Call destructors for values decoded so far. + for elem in &mut data[..i] { + unsafe { elem.assume_init_drop() }; + } + return Err(e); + } + } + } + + // All values in `data` are initialized. + unsafe { Ok(mem::transmute_copy(&data)) } + } +} + +/// References to fixed-length arrays are not length prefixed. +// TODO: +//impl<'a, const N: usize> Decode<'a> for &'a [u8; N] { +// fn decode(r: &mut &'a [u8]) -> anyhow::Result { +// ensure!( +// r.len() >= N, +// "not enough data to decode u8 array of length {N}" +// ); +// +// let (res, remaining) = r.split_at(N); +// let arr = <&[u8; N]>::try_from(res).unwrap(); +// *r = remaining; +// Ok(arr) +// } +//} +impl Encode for [T] { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + ensure!( + len <= i32::MAX as usize, + "length of {} slice exceeds i32::MAX (got {len})", + std::any::type_name::() + ); + + VarInt(len as i32).encode(&mut w)?; + + T::encode_slice(self, w) + } +} + +impl Encode for Bounded<&[T], MAX_LEN> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let len = self.len(); + ensure!( + len <= MAX_LEN, + "length of {} slice exceeds max of {MAX_LEN} (got {len})", + std::any::type_name::(), + ); + + VarInt(len as i32).encode(&mut w)?; + + T::encode_slice(self, w) + } +} + +impl Encode for Bytes { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + let bytes: &[u8] = self; + bytes.encode(w) + } +} + +impl DecodeBytes for Bytes { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode slice with negative length"); + let len = len as usize; + ensure!( + len <= r.len(), + "not enough data remaining to decode byte slice (slice len is {len}, but input len is \ + {})", + r.len() + ); + + Ok(r.split_to(len)) + } +} + +impl Encode for FixedBytes { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + <[u8; N]>::encode(self, w) + } +} + +impl DecodeBytes for FixedBytes { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + ensure!( + N <= r.len(), + "not enough data remaining to decode byte array (array len is {N}, but input len is \ + {})", + r.len() + ); + + Ok(r.split_to(N).try_into()?) + } +} + +impl<'a> Encode for CowBytes<'a> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + let bytes: &[u8] = self; + bytes.encode(w) + } +} + +impl<'a> DecodeBytes for CowBytes<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Bytes::decode_bytes(r).map(Self::Owned) + } +} + +impl<'a, const N: usize> Encode for CowFixedBytes<'a, N> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + <[u8; N]>::encode(self, w) + } +} + +impl<'a, const N: usize> DecodeBytes for CowFixedBytes<'a, N> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + FixedBytes::decode_bytes(r).map(Self::Owned) + } +} + +impl DecodeBytes for Bounded { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let res = Bytes::decode_bytes(r)?; + + ensure!( + res.len() <= MAX_LEN, + "length of decoded byte slice exceeds max of {MAX_LEN} (got {})", + res.len() + ); + + Ok(Bounded(res)) + } +} + +impl<'a, const MAX_LEN: usize> DecodeBytes for Bounded, MAX_LEN> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let res = >::decode_bytes(r)?; + + Ok(Bounded(res.0.into())) + } +} + +impl Encode for Vec { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_slice().encode(w) + } +} + +impl Decode for Vec { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode Vec with negative length"); + let len = len as usize; + + let mut vec = Vec::with_capacity(cautious_capacity::(len)); + + for _ in 0..len { + vec.push(T::decode(r)?); + } + + Ok(vec) + } +} + +impl DecodeBytes for Vec { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode Vec with negative length"); + let len = len as usize; + + let mut vec = Vec::with_capacity(cautious_capacity::(len)); + + for _ in 0..len { + vec.push(T::decode_bytes(r)?); + } + + Ok(vec) + } +} + +impl Decode for Bounded, MAX_LEN> { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode Vec with negative length"); + let len = len as usize; + + ensure!( + len <= MAX_LEN, + "length of Vec exceeds max of {MAX_LEN} (got {len})" + ); + + let mut vec = Vec::with_capacity(len); + + for _ in 0..len { + vec.push(T::decode(r)?); + } + + Ok(Bounded(vec)) + } +} + +impl DecodeBytes for Bounded, MAX_LEN> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode Vec with negative length"); + let len = len as usize; + + ensure!( + len <= MAX_LEN, + "length of Vec exceeds max of {MAX_LEN} (got {len})" + ); + + let mut vec = Vec::with_capacity(len); + + for _ in 0..len { + vec.push(T::decode_bytes(r)?); + } + + Ok(Bounded(vec)) + } +} + +impl Decode for Box<[T]> { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Vec::decode(r)?.into_boxed_slice()) + } +} + +impl DecodeBytes for Box<[T]> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(Vec::decode_bytes(r)?.into_boxed_slice()) + } +} + +impl Decode for Bounded, MAX_LEN> { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(Bounded::, MAX_LEN>::decode(r)?.map_into()) + } +} + +impl DecodeBytes for Bounded, MAX_LEN> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(Bounded::, MAX_LEN>::decode_bytes(r)?.map_into()) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/impls/string.rs b/vendor/valence/crates/valence_protocol/src/impls/string.rs new file mode 100644 index 00000000..ea9f4952 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/string.rs @@ -0,0 +1,175 @@ +use std::io::Write; +use std::str::FromStr; + +use anyhow::{Context, ensure}; +use bytes::Bytes; +use valence_bytes::{CowUtf8Bytes, Utf8Bytes}; +use valence_text::Text; + +use crate::{Bounded, Decode, DecodeBytes, Encode, VarInt, impl_decode_bytes_auto}; + +const DEFAULT_MAX_STRING_CHARS: usize = 32767; +const MAX_TEXT_CHARS: usize = 262144; + +impl Encode for str { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + Bounded::<_, DEFAULT_MAX_STRING_CHARS>(self).encode(w) + } +} + +impl Encode for Bounded<&str, MAX_CHARS> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let char_count = self.encode_utf16().count(); + + ensure!( + char_count <= MAX_CHARS, + "char count of string exceeds maximum (expected <= {MAX_CHARS}, got {char_count})" + ); + + VarInt(self.len() as i32).encode(&mut w)?; + Ok(w.write_all(self.as_bytes())?) + } +} + +impl Encode for String { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + self.as_str().encode(w) + } +} + +impl Encode for Bounded { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + Bounded::<_, MAX_CHARS>(self.as_str()).encode(w) + } +} + +// TODO: +// impl Decode for String { +// fn decode(r: &mut &[u8]) -> anyhow::Result { +// Ok(<&str>::decode(r)?.into()) +// } +// } +// +// impl Decode for Bounded { +// fn decode(r: &mut &[u8]) -> anyhow::Result { +// Ok(Bounded(Bounded::<&str, MAX_CHARS>::decode(r)?.0.into())) +// } +// } +// +// impl Decode for Box { +// fn decode(r: &mut &[u8]) -> anyhow::Result { +// Ok(<&str>::decode(r)?.into()) +// } +// } +// +// impl Decode for Bounded, MAX_CHARS> { +// fn decode(r: &mut &[u8]) -> anyhow::Result { +// Ok(Bounded(Bounded::<&str, MAX_CHARS>::decode(r)?.0.into())) +// } +// } + +impl Encode for Text { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + let s = serde_json::to_string(self).context("serializing text JSON")?; + + Bounded::<_, MAX_TEXT_CHARS>(s).encode(w) + } +} + +impl Decode for Text { + fn decode(r: &mut &[u8]) -> anyhow::Result { + // TODO: don't do this + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode string with negative length"); + let len = len as usize; + ensure!( + len <= r.len(), + "not enough data remaining ({} bytes) to decode string of {len} bytes", + r.len() + ); + + let (res, remaining) = r.split_at(len); + *r = remaining; + let res = Utf8Bytes::new(res.to_owned().into())?; + + let char_count = res.encode_utf16().count(); + ensure!( + char_count <= MAX_TEXT_CHARS, + "char count of string exceeds maximum (expected <= {MAX_TEXT_CHARS}, got {char_count})" + ); + + *r = remaining; + + Self::from_str(&res).context("deserializing text JSON") + } +} + +impl_decode_bytes_auto!(Text); + +impl Encode for Utf8Bytes { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + ::encode(self, w) + } +} + +impl DecodeBytes for Utf8Bytes { + fn decode_bytes(bytes: &mut Bytes) -> anyhow::Result { + Ok(Bytes::decode_bytes(bytes)?.try_into()?) + } +} + +impl<'a> Encode for CowUtf8Bytes<'a> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + ::encode(self, w) + } +} + +impl<'a> DecodeBytes for CowUtf8Bytes<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Utf8Bytes::decode_bytes(r).map(Self::Owned) + } +} + +impl Encode for Bounded { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + Bounded::<_, MAX_CHARS>(self.as_str()).encode(w) + } +} + +impl DecodeBytes for Bounded { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let len = VarInt::decode_bytes(r)?.0; + ensure!(len >= 0, "attempt to decode string with negative length"); + let len = len as usize; + ensure!( + len <= r.len(), + "not enough data remaining ({} bytes) to decode string of {len} bytes", + r.len() + ); + + let res = r.split_to(len); + let res = Utf8Bytes::new(res)?; + + let char_count = res.encode_utf16().count(); + ensure!( + char_count <= MAX_CHARS, + "char count of Utf8Bytes exceeds maximum (expected <= {MAX_CHARS}, got {char_count})" + ); + + Ok(Bounded(res)) + } +} + +impl<'a, const MAX_CHARS: usize> Encode for Bounded, MAX_CHARS> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + Bounded::<_, MAX_CHARS>(self.as_str()).encode(w) + } +} + +impl<'a, const MAX_CHARS: usize> DecodeBytes for Bounded, MAX_CHARS> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let res = >::decode_bytes(r)?; + + Ok(Bounded(res.0.into())) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/impls/tuple.rs b/vendor/valence/crates/valence_protocol/src/impls/tuple.rs new file mode 100644 index 00000000..790e4120 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/impls/tuple.rs @@ -0,0 +1,46 @@ +use std::io::Write; + +use bytes::Bytes; + +use crate::{Decode, DecodeBytes, Encode}; + +macro_rules! impl_tuple { + ($($ty:ident)*) => { + #[allow(non_snake_case)] + impl<$($ty: Encode,)*> Encode for ($($ty,)*) { + fn encode(&self, mut _w: impl Write) -> anyhow::Result<()> { + let ($($ty,)*) = self; + $( + $ty.encode(&mut _w)?; + )* + Ok(()) + } + } + + impl<$($ty: Decode,)*> Decode for ($($ty,)*) { + fn decode(_r: &mut &[u8]) -> anyhow::Result { + Ok(($($ty::decode(_r)?,)*)) + } + } + + impl<$($ty: DecodeBytes,)*> DecodeBytes for ($($ty,)*) { + fn decode_bytes(_r: &mut Bytes) -> anyhow::Result { + Ok(($($ty::decode_bytes(_r)?,)*)) + } + } + } +} + +impl_tuple!(); +impl_tuple!(A); +impl_tuple!(A B); +impl_tuple!(A B C); +impl_tuple!(A B C D); +impl_tuple!(A B C D E); +impl_tuple!(A B C D E F); +impl_tuple!(A B C D E F G); +impl_tuple!(A B C D E F G H); +impl_tuple!(A B C D E F G H I); +impl_tuple!(A B C D E F G H I J); +impl_tuple!(A B C D E F G H I J K); +impl_tuple!(A B C D E F G H I J K L); diff --git a/vendor/valence/crates/valence_protocol/src/item.rs b/vendor/valence/crates/valence_protocol/src/item.rs new file mode 100644 index 00000000..eaf56d38 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/item.rs @@ -0,0 +1,119 @@ +use std::io::Write; + +pub use valence_generated::item::ItemKind; +use valence_nbt::Compound; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// A stack of items in an inventory. +#[derive(Clone, PartialEq, Debug, Default, DecodeBytesAuto)] +pub struct ItemStack { + pub item: ItemKind, + pub count: i8, + pub nbt: Option, +} + +impl From for ItemStack { + fn from(item: ItemKind) -> Self { + Self::new(item, 1, None) + } +} + +impl ItemStack { + pub const EMPTY: ItemStack = ItemStack { + item: ItemKind::Air, + count: 0, + nbt: None, + }; + + #[must_use] + pub const fn new(item: ItemKind, count: i8, nbt: Option) -> Self { + Self { item, count, nbt } + } + + #[must_use] + pub const fn with_count(mut self, count: i8) -> Self { + self.count = count; + self + } + + #[must_use] + pub const fn with_item(mut self, item: ItemKind) -> Self { + self.item = item; + self + } + + #[must_use] + pub fn with_nbt(mut self, nbt: impl Into>) -> Self { + self.nbt = nbt.into(); + self + } + + pub const fn is_empty(&self) -> bool { + matches!(self.item, ItemKind::Air) || self.count <= 0 + } +} + +impl Encode for ItemStack { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + if self.is_empty() { + false.encode(w) + } else { + true.encode(&mut w)?; + self.item.encode(&mut w)?; + self.count.encode(&mut w)?; + match &self.nbt { + Some(n) => n.encode(w), + None => 0u8.encode(w), + } + } + } +} + +impl Decode for ItemStack { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let present = bool::decode(r)?; + if !present { + return Ok(ItemStack::EMPTY); + }; + + let item = ItemKind::decode(r)?; + let count = i8::decode(r)?; + + let nbt = if let [0, rest @ ..] = *r { + *r = rest; + None + } else { + Some(Compound::decode(r)?) + }; + + let stack = ItemStack { item, count, nbt }; + + // Normalize empty item stacks. + if stack.is_empty() { + Ok(ItemStack::EMPTY) + } else { + Ok(stack) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn empty_item_stack_is_empty() { + let air_stack = ItemStack::new(ItemKind::Air, 10, None); + let less_then_one_stack = ItemStack::new(ItemKind::Stone, 0, None); + + assert!(air_stack.is_empty()); + assert!(less_then_one_stack.is_empty()); + + assert!(ItemStack::EMPTY.is_empty()); + + let not_empty_stack = ItemStack::new(ItemKind::Stone, 10, None); + + assert!(!not_empty_stack.is_empty()); + } +} diff --git a/vendor/valence/crates/valence_protocol/src/lib.rs b/vendor/valence/crates/valence_protocol/src/lib.rs new file mode 100644 index 00000000..63ae12e9 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/lib.rs @@ -0,0 +1,550 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +/// Used only by macros. Not public API. +#[doc(hidden)] +pub mod __private { + pub use anyhow::{Context, Result, anyhow, bail, ensure}; + pub use bytes::Bytes; + + pub use crate::var_int::VarInt; + pub use crate::{Decode, DecodeBytes, Encode, Packet, decode_bytes_auto}; +} + +// This allows us to use our own proc macros internally. +extern crate self as valence_protocol; + +mod array; +mod biome_pos; +mod bit_set; +pub mod block_pos; +mod bounded; +mod byte_angle; +pub mod chunk_pos; +pub mod chunk_section_pos; +pub mod decode; +mod difficulty; +mod direction; +pub mod encode; +pub mod game_mode; +mod global_pos; +mod hand; +mod impls; +pub mod item; +pub mod packets; +pub mod profile; +mod raw; +pub mod sound; +pub mod var_int; +mod var_long; +mod velocity; + +use std::io::Write; + +use anyhow::{Context, ensure}; +pub use array::FixedArray; +pub use biome_pos::BiomePos; +pub use bit_set::FixedBitSet; +pub use block::{BlockKind, BlockState}; +pub use block_pos::BlockPos; +pub use bounded::Bounded; +pub use byte_angle::ByteAngle; +use bytes::Bytes; +pub use chunk_pos::ChunkPos; +pub use chunk_section_pos::ChunkSectionPos; +// pub use decode::PacketDecoder; +use derive_more::{From, Into}; +pub use difficulty::Difficulty; +pub use direction::Direction; +pub use encode::{PacketEncoder, WritePacket}; +pub use game_mode::GameMode; +pub use global_pos::GlobalPos; +pub use hand::Hand; +pub use ident::ident; +pub use item::{ItemKind, ItemStack}; +pub use packets::play::particle_s2c::Particle; +pub use raw::RawBytes; +use serde::{Deserialize, Serialize}; +pub use sound::Sound; +pub use text::Text; +pub use valence_generated::{block, packet_id, status_effects}; +pub use valence_ident::Ident; +pub use valence_protocol_macros::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; +pub use var_int::VarInt; +pub use var_long::VarLong; +pub use velocity::Velocity; +pub use { + anyhow, bytes, uuid, valence_ident as ident, valence_math as math, valence_nbt as nbt, + valence_text as text, +}; + +/// The maximum number of bytes in a single Minecraft packet. +pub const MAX_PACKET_SIZE: i32 = 2097152; + +/// The Minecraft protocol version this library currently targets. +pub const PROTOCOL_VERSION: i32 = 763; + +/// The stringified name of the Minecraft version this library currently +/// targets. +pub const MINECRAFT_VERSION: &str = "1.20.1"; + +/// How large a packet should be before it is compressed by the packet encoder. +/// +/// If the inner value is >= 0, then packets with encoded lengths >= to this +/// value will be compressed. If the value is negative, then compression is +/// disabled and no packets are compressed. +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, From, Into)] +pub struct CompressionThreshold(pub i32); + +impl CompressionThreshold { + /// No compression. + pub const DEFAULT: Self = Self(-1); +} + +/// No compression. +impl Default for CompressionThreshold { + fn default() -> Self { + Self::DEFAULT + } +} + +/// The `Encode` trait allows objects to be written to the Minecraft protocol. +/// It is the inverse of [`Decode`]. +/// +/// # Deriving +/// +/// This trait can be implemented automatically for structs and enums by using +/// the [`Encode`][macro] derive macro. All components of the type must +/// implement `Encode`. Components are encoded in the order they appear in the +/// type definition. +/// +/// For enums, the variant to encode is marked by a leading [`VarInt`] +/// discriminant (tag). The discriminant value can be changed using the +/// `#[packet(tag = ...)]` attribute on the variant in question. Discriminant +/// values are assigned to variants using rules similar to regular enum +/// discriminants. +/// +/// ``` +/// use valence_protocol::Encode; +/// +/// #[derive(Encode)] +/// struct MyStruct<'a> { +/// first: i32, +/// second: &'a str, +/// third: [f64; 3], +/// } +/// +/// #[derive(Encode)] +/// enum MyEnum { +/// First, // tag = 0 +/// Second, // tag = 1 +/// #[packet(tag = 25)] +/// Third, // tag = 25 +/// Fourth, // tag = 26 +/// } +/// +/// let value = MyStruct { +/// first: 10, +/// second: "hello", +/// third: [1.5, 3.14, 2.718], +/// }; +/// +/// let mut buf = vec![]; +/// value.encode(&mut buf).unwrap(); +/// +/// println!("{buf:?}"); +/// ``` +/// +/// [macro]: valence_protocol_macros::Encode +/// [`VarInt`]: var_int::VarInt +pub trait Encode { + /// Writes this object to the provided writer. + /// + /// If this type also implements [`Decode`] then successful calls to this + /// function returning `Ok(())` must always successfully [`decode`] using + /// the data that was written to the writer. The exact number of bytes + /// that were originally written must be consumed during the decoding. + /// + /// [`decode`]: Decode::decode + fn encode(&self, w: impl Write) -> anyhow::Result<()>; + + /// Like [`Encode::encode`], except that a whole slice of values is encoded. + /// + /// This method must be semantically equivalent to encoding every element of + /// the slice in sequence with no leading length prefix (which is exactly + /// what the default implementation does), but a more efficient + /// implementation may be used. + /// + /// This method is important for some types like `u8` where the entire slice + /// can be encoded in a single call to [`write_all`]. Because impl + /// specialization is unavailable in stable Rust at the time of writing, + /// we must make the slice specialization part of this trait. + /// + /// [`write_all`]: std::io::Write::write_all + fn encode_slice(slice: &[Self], mut w: impl Write) -> anyhow::Result<()> + where + Self: Sized, + { + for value in slice { + value.encode(&mut w)?; + } + + Ok(()) + } +} + +/// The `Decode` trait allows objects to be read from the Minecraft protocol. It +/// is the inverse of [`Encode`]. +/// +/// # Deriving +/// +/// This trait can be implemented automatically for structs and enums by using +/// the [`Decode`][macro] derive macro. All components of the type must +/// implement `Decode`. Components are decoded in the order they appear in the +/// type definition. +/// +/// For enums, the variant to decode is determined by a leading [`VarInt`] +/// discriminant (tag). The discriminant value can be changed using the +/// `#[packet(tag = ...)]` attribute on the variant in question. Discriminant +/// values are assigned to variants using rules similar to regular enum +/// discriminants. +/// +/// ``` +/// use valence_protocol::Decode; +/// +/// #[derive(PartialEq, Debug, Decode)] +/// struct MyStruct { +/// first: i32, +/// second: MyEnum, +/// } +/// +/// #[derive(PartialEq, Debug, Decode)] +/// enum MyEnum { +/// First, // tag = 0 +/// Second, // tag = 1 +/// #[packet(tag = 25)] +/// Third, // tag = 25 +/// Fourth, // tag = 26 +/// } +/// +/// let mut r: &[u8] = &[0, 0, 0, 0, 26]; +/// +/// let value = MyStruct::decode(&mut r).unwrap(); +/// let expected = MyStruct { +/// first: 0, +/// second: MyEnum::Fourth, +/// }; +/// +/// assert_eq!(value, expected); +/// assert!(r.is_empty()); +/// ``` +/// +/// [macro]: valence_protocol_macros::Decode +/// [`VarInt`]: var_int::VarInt +pub trait Decode: DecodeBytes + Sized { + /// Reads this object from the provided byte slice. + /// + /// Implementations of `Decode` are expected to shrink the slice from the + /// front as bytes are read. + fn decode(r: &mut &[u8]) -> anyhow::Result; + + /// Same as [`Decode::decode`], but instead of modifying the slice + /// parameter, this returns both the decoded object and the number of + /// bytes read + fn decode_and_len(mut slice: &[u8]) -> anyhow::Result<(T, usize)> { + let orig_len = slice.len(); + T::decode(&mut slice).map(|decoded| (decoded, orig_len - slice.len())) + } +} + +pub trait DecodeBytes: Sized { + /// Reads this object from the provided [`bytes::Bytes`]. + /// + /// Implementations of `Decode` are expected to shrink the slice from the + /// front as bytes are read. + fn decode_bytes(r: &mut Bytes) -> anyhow::Result; + + /// Reads this object from an owned `&[u8]`. This function may allocate a + /// [`bytes::Bytes`] if needed. + /// + /// On success, this will return the decoded object and the number of bytes + /// read. + fn decode_from_owned(r: T) -> anyhow::Result<(Self, usize)> + where + T: AsRef<[u8]> + Send + 'static, + { + let mut bytes = Bytes::from_owner(r); + let orig_len = bytes.len(); + Self::decode_bytes(&mut bytes).map(|decoded| (decoded, orig_len - bytes.len())) + } +} + +/// Implement [`DecodeBytes`] on a type that already impleemnts [`Decode`] +macro_rules! impl_decode_bytes_auto { + ($t:ty) => { + impl $crate::DecodeBytes for $t { + fn decode_bytes(r: &mut $crate::__private::Bytes) -> $crate::__private::Result { + $crate::decode_bytes_auto(r) + } + + fn decode_from_owned(r: T) -> anyhow::Result<(Self, usize)> + where + T: AsRef<[u8]> + Send + 'static, + { + ::decode_and_len(r.as_ref()) + } + } + }; +} + +pub(crate) use impl_decode_bytes_auto; + +pub fn decode_bytes_auto(r: &mut Bytes) -> anyhow::Result { + let mut slice: &[u8] = r; + let value = T::decode(&mut slice); + *r = r.slice_ref(slice); + value +} + +/// Helper function to decode a string from data without requiring +/// [`valence_bytes::Bytes`] +pub fn decode_str<'a>(r: &mut &'a [u8]) -> anyhow::Result<&'a str> { + let len = VarInt::decode(r)?.0; + ensure!(len >= 0, "attempt to decode string with negative length"); + let len = len as usize; + ensure!( + len <= r.len(), + "not enough data remaining ({} bytes) to decode string of {len} bytes", + r.len() + ); + + let (res, remaining) = r.split_at(len); + let res = std::str::from_utf8(res)?; + + *r = remaining; + + Ok(res) +} + +/// Types considered to be Minecraft packets. +/// +/// In serialized form, a packet begins with a [`VarInt`] packet ID followed by +/// the body of the packet. If present, the implementations of [`Encode`] and +/// [`Decode`] on `Self` are expected to only encode/decode the _body_ of this +/// packet without the leading ID. +pub trait Packet: std::fmt::Debug { + /// The leading VarInt ID of this packet. + const ID: i32; + /// The name of this packet for debugging purposes. + const NAME: &'static str; + /// The side this packet is intended for. + const SIDE: PacketSide; + /// The state in which this packet is used. + const STATE: PacketState; + + /// Encodes this packet's VarInt ID first, followed by the packet's body. + fn encode_with_id(&self, mut w: impl Write) -> anyhow::Result<()> + where + Self: Encode, + { + VarInt(Self::ID) + .encode(&mut w) + .context("failed to encode packet ID")?; + + self.encode(w) + } +} + +/// The side a packet is intended for. +#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)] +pub enum PacketSide { + /// Server -> Client + Clientbound, + /// Client -> Server + Serverbound, +} + +/// The statein which a packet is used. +#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)] +pub enum PacketState { + Handshaking, + Status, + Login, + Play, +} + +#[allow(dead_code)] +#[cfg(test)] +mod tests { + /* + + use bytes::BytesMut; + + use super::*; + use crate::Ident; + use crate::block_pos::BlockPos; + use crate::decode::PacketDecoder; + use crate::encode::PacketEncoder; + use crate::hand::Hand; + use crate::item::{ItemKind, ItemStack}; + use crate::text::{IntoText, Text}; + use crate::var_int::VarInt; + use crate::var_long::VarLong; + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 1, side = PacketSide::Clientbound)] + struct RegularStruct { + foo: i32, + bar: bool, + baz: f64, + } + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 2, side = PacketSide::Clientbound)] + struct UnitStruct; + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 3, side = PacketSide::Clientbound)] + struct EmptyStruct {} + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 4, side = PacketSide::Clientbound)] + struct TupleStruct(i32, bool, f64); + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 5, side = PacketSide::Clientbound)] + struct StructWithGenerics<'z, T = ()> { + foo: &'z str, + bar: T, + } + + #[derive(Encode, Decode, Packet, Debug)] + #[packet(id = 6, side = PacketSide::Clientbound)] + struct TupleStructWithGenerics<'z, T = ()>(&'z str, i32, T); + + #[allow(unconditional_recursion, clippy::extra_unused_type_parameters)] + fn assert_has_impls<'a, T>() + where + T: Encode + Decode<'a> + Packet, + { + assert_has_impls::(); + assert_has_impls::(); + assert_has_impls::(); + assert_has_impls::(); + assert_has_impls::(); + assert_has_impls::(); + } + + #[test] + fn packet_name() { + assert_eq!(RegularStruct::NAME, "RegularStruct"); + assert_eq!(UnitStruct::NAME, "UnitStruct"); + assert_eq!(StructWithGenerics::<()>::NAME, "StructWithGenerics"); + } + + #[cfg(feature = "encryption")] + const CRYPT_KEY: [u8; 16] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; + + #[derive(PartialEq, Debug, Encode, Decode, Packet)] + #[packet(id = 42, side = PacketSide::Clientbound)] + struct TestPacket<'a> { + a: bool, + b: u8, + c: i32, + d: f32, + e: f64, + f: BlockPos, + g: Hand, + h: Ident, + i: ItemStack, + j: Text, + k: VarInt, + l: VarLong, + m: &'a str, + n: &'a [u8; 10], + o: [u128; 3], + } + + impl<'a> TestPacket<'a> { + fn new(string: &'a str) -> Self { + Self { + a: true, + b: 12, + c: -999, + d: 5.001, + e: 1e10, + f: BlockPos::new(1, 2, 3), + g: Hand::Off, + h: Ident::new("minecraft:whatever").unwrap(), + i: ItemStack::new(ItemKind::WoodenSword, 12, None), + j: "my ".into_text() + "fancy".italic() + " text", + k: VarInt(123), + l: VarLong(456), + m: string, + n: &[7; 10], + o: [123456789; 3], + } + } + } + + fn check_test_packet(dec: &mut PacketDecoder, string: &str) { + let frame = dec.try_next_packet().unwrap().unwrap(); + + let pkt = frame.decode::().unwrap(); + + assert_eq!(&pkt, &TestPacket::new(string)); + } + + #[test] + fn packets_round_trip() { + let mut buf = BytesMut::new(); + + let mut enc = PacketEncoder::new(); + + enc.append_packet(&TestPacket::new("first")).unwrap(); + #[cfg(feature = "compression")] + enc.set_compression(0.into()); + enc.append_packet(&TestPacket::new("second")).unwrap(); + buf.unsplit(enc.take()); + #[cfg(feature = "encryption")] + enc.enable_encryption(&CRYPT_KEY); + enc.append_packet(&TestPacket::new("third")).unwrap(); + enc.prepend_packet(&TestPacket::new("fourth")).unwrap(); + + buf.unsplit(enc.take()); + + let mut dec = PacketDecoder::new(); + + dec.queue_bytes(buf); + + check_test_packet(&mut dec, "first"); + + #[cfg(feature = "compression")] + dec.set_compression(0.into()); + + check_test_packet(&mut dec, "second"); + + #[cfg(feature = "encryption")] + dec.enable_encryption(&CRYPT_KEY); + + check_test_packet(&mut dec, "fourth"); + check_test_packet(&mut dec, "third"); + } + */ +} diff --git a/vendor/valence/crates/valence_protocol/src/packets.rs b/vendor/valence/crates/valence_protocol/src/packets.rs new file mode 100644 index 00000000..447c5514 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets.rs @@ -0,0 +1,366 @@ +//! All of Minecraft's network packets. +//! +//! Packets are grouped in submodules according to the protocol stage they're +//! used in. Names are derived from the FabricMC Yarn mappings for consistency. + +pub mod handshaking { + pub mod handshake_c2s; + pub use handshake_c2s::HandshakeC2s; +} + +pub mod login { + pub mod login_compression_s2c; + pub use login_compression_s2c::LoginCompressionS2c; + pub mod login_disconnect_s2c; + pub use login_disconnect_s2c::LoginDisconnectS2c; + pub mod login_hello_c2s; + pub use login_hello_c2s::LoginHelloC2s; + pub mod login_hello_s2c; + pub use login_hello_s2c::LoginHelloS2c; + pub mod login_key_c2s; + pub use login_key_c2s::LoginKeyC2s; + pub mod login_query_request_s2c; + pub use login_query_request_s2c::LoginQueryRequestS2c; + pub mod login_query_response_c2s; + pub use login_query_response_c2s::LoginQueryResponseC2s; + pub mod login_success_s2c; + pub use login_success_s2c::LoginSuccessS2c; +} + +pub mod play { + pub mod advancement_tab_c2s; + pub use advancement_tab_c2s::AdvancementTabC2s; + pub mod advancement_update_s2c; + pub use advancement_update_s2c::AdvancementUpdateS2c; + pub mod block_breaking_progress_s2c; + pub use block_breaking_progress_s2c::BlockBreakingProgressS2c; + pub mod block_entity_update_s2c; + pub use block_entity_update_s2c::BlockEntityUpdateS2c; + pub mod block_event_s2c; + pub use block_event_s2c::BlockEventS2c; + pub mod block_update_s2c; + pub use block_update_s2c::BlockUpdateS2c; + pub mod boat_paddle_state_c2s; + pub use boat_paddle_state_c2s::BoatPaddleStateC2s; + pub mod book_update_c2s; + pub use book_update_c2s::BookUpdateC2s; + pub mod boss_bar_s2c; + pub use boss_bar_s2c::BossBarS2c; + pub mod bundle_splitter_s2c; + pub use bundle_splitter_s2c::BundleSplitterS2c; + pub mod button_click_c2s; + pub use button_click_c2s::ButtonClickC2s; + pub mod chat_message_c2s; + pub use chat_message_c2s::ChatMessageC2s; + pub mod chat_message_s2c; + pub use chat_message_s2c::ChatMessageS2c; + pub mod chat_suggestions_s2c; + pub use chat_suggestions_s2c::ChatSuggestionsS2c; + pub mod chunk_biome_data_s2c; + pub use chunk_biome_data_s2c::ChunkBiomeDataS2c; + pub mod chunk_data_s2c; + pub use chunk_data_s2c::ChunkDataS2c; + pub mod chunk_delta_update_s2c; + pub use chunk_delta_update_s2c::ChunkDeltaUpdateS2c; + pub mod chunk_load_distance_s2c; + pub use chunk_load_distance_s2c::ChunkLoadDistanceS2c; + pub mod chunk_render_distance_center_s2c; + pub use chunk_render_distance_center_s2c::ChunkRenderDistanceCenterS2c; + pub mod clear_title_s2c; + pub use clear_title_s2c::ClearTitleS2c; + pub mod click_slot_c2s; + pub use click_slot_c2s::ClickSlotC2s; + pub mod client_command_c2s; + pub use client_command_c2s::ClientCommandC2s; + pub mod client_settings_c2s; + pub use client_settings_c2s::ClientSettingsC2s; + pub mod client_status_c2s; + pub use client_status_c2s::ClientStatusC2s; + pub mod close_handled_screen_c2s; + pub use close_handled_screen_c2s::CloseHandledScreenC2s; + pub mod close_screen_s2c; + pub use close_screen_s2c::CloseScreenS2c; + pub mod command_execution_c2s; + pub use command_execution_c2s::CommandExecutionC2s; + pub mod command_suggestions_s2c; + pub use command_suggestions_s2c::CommandSuggestionsS2c; + pub mod command_tree_s2c; + pub use command_tree_s2c::CommandTreeS2c; + pub mod cooldown_update_s2c; + pub use cooldown_update_s2c::CooldownUpdateS2c; + pub mod craft_failed_response_s2c; + pub use craft_failed_response_s2c::CraftFailedResponseS2c; + pub mod craft_request_c2s; + pub use craft_request_c2s::CraftRequestC2s; + pub mod creative_inventory_action_c2s; + pub use creative_inventory_action_c2s::CreativeInventoryActionC2s; + pub mod custom_payload_c2s; + pub use custom_payload_c2s::CustomPayloadC2s; + pub mod custom_payload_s2c; + pub use custom_payload_s2c::CustomPayloadS2c; + pub mod damage_tilt_s2c; + pub use damage_tilt_s2c::DamageTiltS2c; + pub mod death_message_s2c; + pub use death_message_s2c::DeathMessageS2c; + pub mod difficulty_s2c; + pub use difficulty_s2c::DifficultyS2c; + pub mod disconnect_s2c; + pub use disconnect_s2c::DisconnectS2c; + pub mod end_combat_s2c; + pub use end_combat_s2c::EndCombatS2c; + pub mod enter_combat_s2c; + pub use enter_combat_s2c::EnterCombatS2c; + pub mod entities_destroy_s2c; + pub use entities_destroy_s2c::EntitiesDestroyS2c; + pub mod entity_animation_s2c; + pub use entity_animation_s2c::EntityAnimationS2c; + pub mod entity_attach_s2c; + pub use entity_attach_s2c::EntityAttachS2c; + pub mod entity_attributes_s2c; + pub use entity_attributes_s2c::EntityAttributesS2c; + pub mod entity_damage_s2c; + pub use entity_damage_s2c::EntityDamageS2c; + pub mod entity_equipment_update_s2c; + pub use entity_equipment_update_s2c::EntityEquipmentUpdateS2c; + pub mod entity_passengers_set_s2c; + pub use entity_passengers_set_s2c::EntityPassengersSetS2c; + pub mod entity_position_s2c; + pub use entity_position_s2c::EntityPositionS2c; + pub mod entity_set_head_yaw_s2c; + pub use entity_set_head_yaw_s2c::EntitySetHeadYawS2c; + pub mod entity_spawn_s2c; + pub use entity_spawn_s2c::EntitySpawnS2c; + pub mod entity_status_effect_s2c; + pub use entity_status_effect_s2c::EntityStatusEffectS2c; + pub mod entity_status_s2c; + pub use entity_status_s2c::EntityStatusS2c; + pub mod entity_tracker_update_s2c; + pub use entity_tracker_update_s2c::EntityTrackerUpdateS2c; + pub mod entity_velocity_update_s2c; + pub use entity_velocity_update_s2c::EntityVelocityUpdateS2c; + pub mod experience_bar_update_s2c; + pub use experience_bar_update_s2c::ExperienceBarUpdateS2c; + pub mod experience_orb_spawn_s2c; + pub use experience_orb_spawn_s2c::ExperienceOrbSpawnS2c; + pub mod explosion_s2c; + pub use explosion_s2c::ExplosionS2c; + pub mod features_s2c; + pub use features_s2c::FeaturesS2c; + pub mod full_c2s; + pub use full_c2s::FullC2s; + pub mod game_join_s2c; + pub use game_join_s2c::GameJoinS2c; + pub mod game_message_s2c; + pub use game_message_s2c::GameMessageS2c; + pub mod game_state_change_s2c; + pub use game_state_change_s2c::GameStateChangeS2c; + pub mod hand_swing_c2s; + pub use hand_swing_c2s::HandSwingC2s; + pub mod health_update_s2c; + pub use health_update_s2c::HealthUpdateS2c; + pub mod inventory_s2c; + pub use inventory_s2c::InventoryS2c; + pub mod item_pickup_animation_s2c; + pub use item_pickup_animation_s2c::ItemPickupAnimationS2c; + pub mod jigsaw_generating_c2s; + pub use jigsaw_generating_c2s::JigsawGeneratingC2s; + pub mod keep_alive_c2s; + pub use keep_alive_c2s::KeepAliveC2s; + pub mod keep_alive_s2c; + pub use keep_alive_s2c::KeepAliveS2c; + pub mod light_update_s2c; + pub use light_update_s2c::LightUpdateS2c; + pub mod look_and_on_ground_c2s; + pub use look_and_on_ground_c2s::LookAndOnGroundC2s; + pub mod look_at_s2c; + pub use look_at_s2c::LookAtS2c; + pub mod map_update_s2c; + pub use map_update_s2c::MapUpdateS2c; + pub mod message_acknowledgment_c2s; + pub use message_acknowledgment_c2s::MessageAcknowledgmentC2s; + pub mod move_relative_s2c; + pub use move_relative_s2c::MoveRelativeS2c; + pub mod nbt_query_response_s2c; + pub use nbt_query_response_s2c::NbtQueryResponseS2c; + pub mod on_ground_only_c2s; + pub use on_ground_only_c2s::OnGroundOnlyC2s; + pub mod open_horse_screen_s2c; + pub use open_horse_screen_s2c::OpenHorseScreenS2c; + pub mod open_screen_s2c; + pub use open_screen_s2c::OpenScreenS2c; + pub mod open_written_book_s2c; + pub use open_written_book_s2c::OpenWrittenBookS2c; + pub mod overlay_message_s2c; + pub use overlay_message_s2c::OverlayMessageS2c; + pub mod particle_s2c; + pub use particle_s2c::ParticleS2c; + pub mod pick_from_inventory_c2s; + pub use pick_from_inventory_c2s::PickFromInventoryC2s; + pub mod play_ping_s2c; + pub use play_ping_s2c::PlayPingS2c; + pub mod play_pong_c2s; + pub use play_pong_c2s::PlayPongC2s; + pub mod play_sound_from_entity_s2c; + pub use play_sound_from_entity_s2c::PlaySoundFromEntityS2c; + pub mod play_sound_s2c; + pub use play_sound_s2c::PlaySoundS2c; + pub mod player_abilities_s2c; + pub use player_abilities_s2c::PlayerAbilitiesS2c; + pub mod player_action_c2s; + pub use player_action_c2s::PlayerActionC2s; + pub mod player_action_response_s2c; + pub use player_action_response_s2c::PlayerActionResponseS2c; + pub mod player_input_c2s; + pub use player_input_c2s::PlayerInputC2s; + pub mod player_interact_block_c2s; + pub use player_interact_block_c2s::PlayerInteractBlockC2s; + pub mod player_interact_entity_c2s; + pub use player_interact_entity_c2s::PlayerInteractEntityC2s; + pub mod player_interact_item_c2s; + pub use player_interact_item_c2s::PlayerInteractItemC2s; + pub mod player_list_header_s2c; + pub use player_list_header_s2c::PlayerListHeaderS2c; + pub mod player_list_s2c; + pub use player_list_s2c::PlayerListS2c; + pub mod player_position_look_s2c; + pub use player_position_look_s2c::PlayerPositionLookS2c; + pub mod player_remove_s2c; + pub use player_remove_s2c::PlayerRemoveS2c; + pub mod player_respawn_s2c; + pub use player_respawn_s2c::PlayerRespawnS2c; + pub mod player_session_c2s; + pub use player_session_c2s::PlayerSessionC2s; + pub mod player_spawn_position_s2c; + pub use player_spawn_position_s2c::PlayerSpawnPositionS2c; + pub mod player_spawn_s2c; + pub use player_spawn_s2c::PlayerSpawnS2c; + pub mod position_and_on_ground_c2s; + pub use position_and_on_ground_c2s::PositionAndOnGroundC2s; + pub mod profileless_chat_message_s2c; + pub use profileless_chat_message_s2c::ProfilelessChatMessageS2c; + pub mod query_block_nbt_c2s; + pub use query_block_nbt_c2s::QueryBlockNbtC2s; + pub mod query_entity_nbt_c2s; + pub use query_entity_nbt_c2s::QueryEntityNbtC2s; + pub mod recipe_book_data_c2s; + pub use recipe_book_data_c2s::RecipeBookDataC2s; + pub mod recipe_category_options_c2s; + pub use recipe_category_options_c2s::RecipeCategoryOptionsC2s; + pub mod remove_entity_status_effect_s2c; + pub use remove_entity_status_effect_s2c::RemoveEntityStatusEffectS2c; + pub mod remove_message_s2c; + pub use remove_message_s2c::RemoveMessageS2c; + pub mod rename_item_c2s; + pub use rename_item_c2s::RenameItemC2s; + pub mod request_command_completions_c2s; + pub use request_command_completions_c2s::RequestCommandCompletionsC2s; + pub mod resource_pack_send_s2c; + pub use resource_pack_send_s2c::ResourcePackSendS2c; + pub mod resource_pack_status_c2s; + pub use resource_pack_status_c2s::ResourcePackStatusC2s; + pub mod rotate_s2c; + pub use rotate_s2c::RotateS2c; + pub mod rotate_and_move_relative_s2c; + pub use rotate_and_move_relative_s2c::RotateAndMoveRelativeS2c; + pub mod scoreboard_display_s2c; + pub use scoreboard_display_s2c::ScoreboardDisplayS2c; + pub mod scoreboard_objective_update_s2c; + pub use scoreboard_objective_update_s2c::ScoreboardObjectiveUpdateS2c; + pub mod scoreboard_player_update_s2c; + pub use scoreboard_player_update_s2c::ScoreboardPlayerUpdateS2c; + pub mod screen_handler_property_update_s2c; + pub use screen_handler_property_update_s2c::ScreenHandlerPropertyUpdateS2c; + pub mod screen_handler_slot_update_s2c; + pub use screen_handler_slot_update_s2c::ScreenHandlerSlotUpdateS2c; + pub mod select_advancement_tab_s2c; + pub use select_advancement_tab_s2c::SelectAdvancementTabS2c; + pub mod select_merchant_trade_c2s; + pub use select_merchant_trade_c2s::SelectMerchantTradeC2s; + pub mod server_metadata_s2c; + pub use server_metadata_s2c::ServerMetadataS2c; + pub mod set_camera_entity_s2c; + pub use set_camera_entity_s2c::SetCameraEntityS2c; + pub mod set_trade_offers_s2c; + pub use set_trade_offers_s2c::SetTradeOffersS2c; + pub mod sign_editor_open_s2c; + pub use sign_editor_open_s2c::SignEditorOpenS2c; + pub mod simulation_distance_s2c; + pub use simulation_distance_s2c::SimulationDistanceS2c; + pub mod spectator_teleport_c2s; + pub use spectator_teleport_c2s::SpectatorTeleportC2s; + pub mod statistics_s2c; + pub use statistics_s2c::StatisticsS2c; + pub mod stop_sound_s2c; + pub use stop_sound_s2c::StopSoundS2c; + pub mod subtitle_s2c; + pub use subtitle_s2c::SubtitleS2c; + pub mod synchronize_recipes_s2c; + pub use synchronize_recipes_s2c::SynchronizeRecipesS2c; + pub mod synchronize_tags_s2c; + pub use synchronize_tags_s2c::SynchronizeTagsS2c; + pub mod team_s2c; + pub use team_s2c::TeamS2c; + pub mod teleport_confirm_c2s; + pub use teleport_confirm_c2s::TeleportConfirmC2s; + pub mod title_fade_s2c; + pub use title_fade_s2c::TitleFadeS2c; + pub mod title_s2c; + pub use title_s2c::TitleS2c; + pub mod unload_chunk_s2c; + pub use unload_chunk_s2c::UnloadChunkS2c; + pub mod unlock_recipes_s2c; + pub use unlock_recipes_s2c::UnlockRecipesS2c; + pub mod update_beacon_c2s; + pub use update_beacon_c2s::UpdateBeaconC2s; + pub mod update_command_block_c2s; + pub use update_command_block_c2s::UpdateCommandBlockC2s; + pub mod update_command_block_minecart_c2s; + pub use update_command_block_minecart_c2s::UpdateCommandBlockMinecartC2s; + pub mod update_difficulty_c2s; + pub use update_difficulty_c2s::UpdateDifficultyC2s; + pub mod update_difficulty_lock_c2s; + pub use update_difficulty_lock_c2s::UpdateDifficultyLockC2s; + pub mod update_jigsaw_c2s; + pub use update_jigsaw_c2s::UpdateJigsawC2s; + pub mod update_player_abilities_c2s; + pub use update_player_abilities_c2s::UpdatePlayerAbilitiesC2s; + pub mod update_selected_slot_c2s; + pub use update_selected_slot_c2s::UpdateSelectedSlotC2s; + pub mod update_selected_slot_s2c; + pub use update_selected_slot_s2c::UpdateSelectedSlotS2c; + pub mod update_sign_c2s; + pub use update_sign_c2s::UpdateSignC2s; + pub mod update_structure_block_c2s; + pub use update_structure_block_c2s::UpdateStructureBlockC2s; + pub mod vehicle_move_c2s; + pub use vehicle_move_c2s::VehicleMoveC2s; + pub mod vehicle_move_s2c; + pub use vehicle_move_s2c::VehicleMoveS2c; + pub mod world_border_center_changed_s2c; + pub use world_border_center_changed_s2c::WorldBorderCenterChangedS2c; + pub mod world_border_initialize_s2c; + pub use world_border_initialize_s2c::WorldBorderInitializeS2c; + pub mod world_border_interpolate_size_s2c; + pub use world_border_interpolate_size_s2c::WorldBorderInterpolateSizeS2c; + pub mod world_border_size_changed_s2c; + pub use world_border_size_changed_s2c::WorldBorderSizeChangedS2c; + pub mod world_border_warning_blocks_changed_s2c; + pub use world_border_warning_blocks_changed_s2c::WorldBorderWarningBlocksChangedS2c; + pub mod world_border_warning_time_changed_s2c; + pub use world_border_warning_time_changed_s2c::WorldBorderWarningTimeChangedS2c; + pub mod world_event_s2c; + pub use world_event_s2c::WorldEventS2c; + pub mod world_time_update_s2c; + pub use world_time_update_s2c::WorldTimeUpdateS2c; +} + +pub mod status { + pub mod query_ping_c2s; + pub use query_ping_c2s::QueryPingC2s; + pub mod query_pong_s2c; + pub use query_pong_s2c::QueryPongS2c; + pub mod query_request_c2s; + pub use query_request_c2s::QueryRequestC2s; + pub mod query_response_s2c; + pub use query_response_s2c::QueryResponseS2c; +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/handshaking/handshake_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/handshaking/handshake_c2s.rs new file mode 100644 index 00000000..5050c25c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/handshaking/handshake_c2s.rs @@ -0,0 +1,20 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{Bounded, Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, PacketState, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Handshaking)] +pub struct HandshakeC2s<'a> { + pub protocol_version: VarInt, + pub server_address: Bounded, 255>, + pub server_port: u16, + pub next_state: HandshakeNextState, +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub enum HandshakeNextState { + #[packet(tag = 1)] + Status, + #[packet(tag = 2)] + Login, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_compression_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_compression_s2c.rs new file mode 100644 index 00000000..685dd175 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_compression_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, PacketState, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginCompressionS2c { + pub threshold: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_disconnect_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_disconnect_s2c.rs new file mode 100644 index 00000000..442587b3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_disconnect_s2c.rs @@ -0,0 +1,9 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, PacketState, Text}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginDisconnectS2c<'a> { + pub reason: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_c2s.rs new file mode 100644 index 00000000..e38b44aa --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_c2s.rs @@ -0,0 +1,11 @@ +use uuid::Uuid; +use valence_bytes::CowUtf8Bytes; + +use crate::{Bounded, DecodeBytes, Encode, Packet, PacketState}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginHelloC2s<'a> { + pub username: Bounded, 16>, + pub profile_id: Option, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_s2c.rs new file mode 100644 index 00000000..1695c1be --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_hello_s2c.rs @@ -0,0 +1,11 @@ +use valence_bytes::{CowBytes, CowUtf8Bytes}; + +use crate::{Bounded, DecodeBytes, Encode, Packet, PacketState}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginHelloS2c<'a> { + pub server_id: Bounded, 20>, + pub public_key: CowBytes<'a>, + pub verify_token: CowBytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_key_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_key_c2s.rs new file mode 100644 index 00000000..35f3c753 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_key_c2s.rs @@ -0,0 +1,10 @@ +use valence_bytes::CowBytes; + +use crate::{DecodeBytes, Encode, Packet, PacketState}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginKeyC2s<'a> { + pub shared_secret: CowBytes<'a>, + pub verify_token: CowBytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_query_request_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_query_request_s2c.rs new file mode 100644 index 00000000..dc5afb81 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_query_request_s2c.rs @@ -0,0 +1,11 @@ +use valence_ident::Ident; + +use crate::{Bounded, DecodeBytes, Encode, Packet, PacketState, RawBytes, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginQueryRequestS2c<'a> { + pub message_id: VarInt, + pub channel: Ident, + pub data: Bounded, 1048576>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_query_response_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_query_response_c2s.rs new file mode 100644 index 00000000..98cb5d99 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_query_response_c2s.rs @@ -0,0 +1,8 @@ +use crate::{Bounded, DecodeBytes, Encode, Packet, PacketState, RawBytes, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginQueryResponseC2s<'a> { + pub message_id: VarInt, + pub data: Option, 1048576>>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/login/login_success_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/login/login_success_s2c.rs new file mode 100644 index 00000000..ff951fbe --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/login/login_success_s2c.rs @@ -0,0 +1,15 @@ +use std::borrow::Cow; + +use uuid::Uuid; +use valence_bytes::CowUtf8Bytes; + +use crate::profile::Property; +use crate::{Bounded, DecodeBytes, Encode, Packet, PacketState}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Login)] +pub struct LoginSuccessS2c<'a> { + pub uuid: Uuid, + pub username: Bounded, 16>, + pub properties: Cow<'a, [Property>]>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/advancement_tab_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/advancement_tab_c2s.rs new file mode 100644 index 00000000..a39ef5cd --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/advancement_tab_c2s.rs @@ -0,0 +1,9 @@ +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub enum AdvancementTabC2s { + OpenedTab { tab_id: Ident }, + ClosedScreen, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/advancement_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/advancement_update_s2c.rs new file mode 100644 index 00000000..9ed75de0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/advancement_update_s2c.rs @@ -0,0 +1,106 @@ +// TODO: simplify this and bound packet fields where appropriate. + +use std::borrow::Cow; +use std::io::Write; + +use valence_bytes::{Bytes, CowUtf8Bytes}; +use valence_ident::Ident; +use valence_text::Text; + +use crate::{DecodeBytes, Encode, ItemStack, Packet, VarInt, packet_id}; + +pub type AdvancementUpdateS2c<'a> = + GenericAdvancementUpdateS2c<(Ident, Advancement<'a, ItemStack>)>; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(id = packet_id::ADVANCEMENT_UPDATE_S2C)] +pub struct GenericAdvancementUpdateS2c { + pub reset: bool, + pub advancement_mapping: Vec, + pub identifiers: Vec, + pub progress_mapping: Vec<(Ident, Vec)>, +} + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes)] +pub struct Advancement<'a, I> { + pub parent_id: Option, + pub display_data: Option>, + pub criteria: Vec<(Ident, ())>, + pub requirements: Vec>, + pub sends_telemetry_data: bool, +} + +#[derive(Clone, PartialEq, Eq, Debug, Encode, DecodeBytes)] +pub struct AdvancementRequirements<'a> { + pub requirement: Vec>, +} + +#[derive(Clone, PartialEq, Debug)] +pub struct AdvancementDisplay<'a, I> { + pub title: Cow<'a, Text>, + pub description: Cow<'a, Text>, + pub icon: I, + pub frame_type: VarInt, + pub flags: i32, + pub background_texture: Option, + pub x_coord: f32, + pub y_coord: f32, +} + +#[derive(Clone, PartialEq, Eq, Debug, Encode, DecodeBytes)] +pub struct AdvancementCriteria { + pub criterion_identifier: Ident, + /// If present, the criteria has been achieved at the + /// time wrapped; time represented as millis since epoch + pub criterion_progress: Option, +} + +impl Encode for AdvancementDisplay<'_, I> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.title.encode(&mut w)?; + self.description.encode(&mut w)?; + self.icon.encode(&mut w)?; + self.frame_type.encode(&mut w)?; + self.flags.encode(&mut w)?; + + match self.background_texture.as_ref() { + None => {} + Some(texture) => texture.encode(&mut w)?, + } + + self.x_coord.encode(&mut w)?; + self.y_coord.encode(&mut w)?; + + Ok(()) + } +} + +impl DecodeBytes for AdvancementDisplay<'static, I> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let title = >::decode_bytes(r)?; + let description = >::decode_bytes(r)?; + let icon = I::decode_bytes(r)?; + let frame_type = VarInt::decode_bytes(r)?; + let flags = i32::decode_bytes(r)?; + + let background_texture = if flags & 1 == 1 { + Some(Ident::decode_bytes(r)?) + } else { + None + }; + + let x_coord = f32::decode_bytes(r)?; + let y_coord = f32::decode_bytes(r)?; + + Ok(Self { + title, + description, + icon, + frame_type, + flags, + background_texture, + x_coord, + y_coord, + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/block_breaking_progress_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/block_breaking_progress_s2c.rs new file mode 100644 index 00000000..638ee763 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/block_breaking_progress_s2c.rs @@ -0,0 +1,8 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BlockBreakingProgressS2c { + pub entity_id: VarInt, + pub position: BlockPos, + pub destroy_stage: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/block_entity_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/block_entity_update_s2c.rs new file mode 100644 index 00000000..a3013982 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/block_entity_update_s2c.rs @@ -0,0 +1,13 @@ +use std::borrow::Cow; + +use valence_generated::block::BlockEntityKind; +use valence_nbt::Compound; + +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BlockEntityUpdateS2c<'a> { + pub position: BlockPos, + pub kind: BlockEntityKind, + pub data: Cow<'a, Compound>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/block_event_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/block_event_s2c.rs new file mode 100644 index 00000000..4ade64a7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/block_event_s2c.rs @@ -0,0 +1,10 @@ +use crate::block::BlockKind; +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BlockEventS2c { + pub position: BlockPos, + pub action_id: u8, + pub action_parameter: u8, + pub block_type: BlockKind, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/block_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/block_update_s2c.rs new file mode 100644 index 00000000..7e7d62bf --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/block_update_s2c.rs @@ -0,0 +1,7 @@ +use crate::{BlockPos, BlockState, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BlockUpdateS2c { + pub position: BlockPos, + pub block_id: BlockState, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/boat_paddle_state_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/boat_paddle_state_c2s.rs new file mode 100644 index 00000000..85cad9f3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/boat_paddle_state_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BoatPaddleStateC2s { + pub left_paddle_turning: bool, + pub right_paddle_turning: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/book_update_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/book_update_c2s.rs new file mode 100644 index 00000000..74d85381 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/book_update_c2s.rs @@ -0,0 +1,14 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{Bounded, DecodeBytes, Encode, Packet, VarInt}; + +pub const MAX_TITLE_CHARS: usize = 128; +pub const MAX_PAGE_CHARS: usize = 8192; +pub const MAX_PAGES: usize = 200; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct BookUpdateC2s<'a> { + pub slot: VarInt, + pub entries: Bounded, MAX_PAGE_CHARS>>, MAX_PAGES>, + pub title: Option, MAX_TITLE_CHARS>>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/boss_bar_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/boss_bar_s2c.rs new file mode 100644 index 00000000..29edfaeb --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/boss_bar_s2c.rs @@ -0,0 +1,65 @@ +use std::borrow::Cow; + +use bevy_ecs::prelude::Component; +use bitfield_struct::bitfield; +use uuid::Uuid; +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct BossBarS2c<'a> { + pub id: Uuid, + pub action: BossBarAction<'a>, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum BossBarAction<'a> { + Add { + title: Cow<'a, Text>, + health: f32, + color: BossBarColor, + division: BossBarDivision, + flags: BossBarFlags, + }, + Remove, + UpdateHealth(f32), + UpdateTitle(Cow<'a, Text>), + UpdateStyle(BossBarColor, BossBarDivision), + UpdateFlags(BossBarFlags), +} + +/// The color of a boss bar. +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Default)] +pub enum BossBarColor { + #[default] + Pink, + Blue, + Red, + Green, + Yellow, + Purple, + White, +} + +/// The division of a boss bar. +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Default)] +pub enum BossBarDivision { + #[default] + NoDivision, + SixNotches, + TenNotches, + TwelveNotches, + TwentyNotches, +} + +/// The flags of a boss bar (darken sky, dragon bar, create fog). +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto, Component)] +pub struct BossBarFlags { + pub darken_sky: bool, + pub dragon_bar: bool, + pub create_fog: bool, + #[bits(5)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/bundle_splitter_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/bundle_splitter_s2c.rs new file mode 100644 index 00000000..0a8f51bc --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/bundle_splitter_s2c.rs @@ -0,0 +1,5 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::BUNDLE_SPLITTER)] +pub struct BundleSplitterS2c; diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/button_click_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/button_click_c2s.rs new file mode 100644 index 00000000..42fb6d14 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/button_click_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ButtonClickC2s { + pub window_id: i8, + pub button_id: i8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_c2s.rs new file mode 100644 index 00000000..ad02911b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_c2s.rs @@ -0,0 +1,16 @@ +use valence_bytes::{CowFixedBytes, CowUtf8Bytes}; + +use crate::{Bounded, DecodeBytes, Encode, FixedBitSet, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ChatMessageC2s<'a> { + pub message: Bounded, 256>, + pub timestamp: u64, + pub salt: u64, + pub signature: Option>, + pub message_count: VarInt, + // This is a bitset of 20; each bit represents one + // of the last 20 messages received and whether or not + // the message was acknowledged by the client + pub acknowledgement: FixedBitSet<20, 3>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_s2c.rs new file mode 100644 index 00000000..e75fbc34 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chat_message_s2c.rs @@ -0,0 +1,135 @@ +use std::borrow::Cow; +use std::io::Write; + +use uuid::Uuid; +use valence_bytes::{Bytes, CowFixedBytes, CowUtf8Bytes}; +use valence_text::Text; + +use crate::{Bounded, Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Packet)] +pub struct ChatMessageS2c<'a> { + pub sender: Uuid, + pub index: VarInt, + pub message_signature: Option>, + pub message: Bounded, 256>, + pub timestamp: u64, + pub salt: u64, + pub previous_messages: Vec>, + pub unsigned_content: Option>, + pub filter_type: MessageFilterType, + pub filter_type_bits: Option, + pub chat_type: VarInt, + pub network_name: Cow<'a, Text>, + pub network_target_name: Option>, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum MessageFilterType { + PassThrough, + FullyFiltered, + PartiallyFiltered, +} + +impl<'a> Encode for ChatMessageS2c<'a> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.sender.encode(&mut w)?; + self.index.encode(&mut w)?; + self.message_signature.encode(&mut w)?; + self.message.encode(&mut w)?; + self.timestamp.encode(&mut w)?; + self.salt.encode(&mut w)?; + self.previous_messages.encode(&mut w)?; + self.unsigned_content.encode(&mut w)?; + self.filter_type.encode(&mut w)?; + + if self.filter_type == MessageFilterType::PartiallyFiltered { + match self.filter_type_bits { + // Filler data + None => 0u8.encode(&mut w)?, + Some(bits) => bits.encode(&mut w)?, + } + } + + self.chat_type.encode(&mut w)?; + self.network_name.encode(&mut w)?; + self.network_target_name.encode(&mut w)?; + + Ok(()) + } +} + +impl<'a> DecodeBytes for ChatMessageS2c<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let sender = Uuid::decode_bytes(r)?; + let index = VarInt::decode_bytes(r)?; + let message_signature = Option::>::decode_bytes(r)?; + let message = DecodeBytes::decode_bytes(r)?; + let time_stamp = u64::decode_bytes(r)?; + let salt = u64::decode_bytes(r)?; + let previous_messages = Vec::::decode_bytes(r)?; + let unsigned_content = Option::>::decode_bytes(r)?; + let filter_type = MessageFilterType::decode_bytes(r)?; + + let filter_type_bits = match filter_type { + MessageFilterType::PartiallyFiltered => Some(u8::decode_bytes(r)?), + _ => None, + }; + + let chat_type = VarInt::decode_bytes(r)?; + let network_name = >::decode_bytes(r)?; + let network_target_name = Option::>::decode_bytes(r)?; + + Ok(Self { + sender, + index, + message_signature, + message, + timestamp: time_stamp, + salt, + previous_messages, + unsigned_content, + filter_type, + filter_type_bits, + chat_type, + network_name, + network_target_name, + }) + } +} + +#[derive(Clone, PartialEq, Debug)] +pub struct MessageSignature<'a> { + pub message_id: i32, + pub signature: Option>, +} + +impl Encode for MessageSignature<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + VarInt(self.message_id + 1).encode(&mut w)?; + + match &self.signature { + None => {} + Some(signature) => signature.encode(&mut w)?, + } + + Ok(()) + } +} + +impl<'a> DecodeBytes for MessageSignature<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let message_id = VarInt::decode_bytes(r)?.0 - 1; // TODO: this can underflow. + + let signature = if message_id == -1 { + Some(DecodeBytes::decode_bytes(r)?) + } else { + None + }; + + Ok(Self { + message_id, + signature, + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chat_suggestions_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chat_suggestions_s2c.rs new file mode 100644 index 00000000..0b936681 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chat_suggestions_s2c.rs @@ -0,0 +1,18 @@ +use std::borrow::Cow; + +use valence_bytes::CowUtf8Bytes; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ChatSuggestionsS2c<'a> { + pub action: ChatSuggestionsAction, + pub entries: Cow<'a, [CowUtf8Bytes<'a>]>, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum ChatSuggestionsAction { + Add, + Remove, + Set, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chunk_biome_data_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_biome_data_s2c.rs new file mode 100644 index 00000000..f4364108 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_biome_data_s2c.rs @@ -0,0 +1,17 @@ +use std::borrow::Cow; + +use valence_bytes::CowBytes; + +use crate::{ChunkPos, DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ChunkBiomeDataS2c<'a> { + pub chunks: Cow<'a, [ChunkBiome<'a>]>, +} + +#[derive(Clone, Debug, Encode, DecodeBytes)] +pub struct ChunkBiome<'a> { + pub pos: ChunkPos, + /// Chunk data structure, with sections containing only the `Biomes` field. + pub data: CowBytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chunk_data_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_data_s2c.rs new file mode 100644 index 00000000..c091bead --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_data_s2c.rs @@ -0,0 +1,30 @@ +use std::borrow::Cow; + +use valence_bytes::CowBytes; +use valence_generated::block::BlockEntityKind; +use valence_nbt::Compound; + +use crate::array::FixedArray; +use crate::{ChunkPos, Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ChunkDataS2c<'a> { + pub pos: ChunkPos, + pub heightmaps: Cow<'a, Compound>, + pub blocks_and_biomes: CowBytes<'a>, + pub block_entities: Cow<'a, [ChunkDataBlockEntity<'a>]>, + pub sky_light_mask: Cow<'a, [u64]>, + pub block_light_mask: Cow<'a, [u64]>, + pub empty_sky_light_mask: Cow<'a, [u64]>, + pub empty_block_light_mask: Cow<'a, [u64]>, + pub sky_light_arrays: Cow<'a, [FixedArray]>, + pub block_light_arrays: Cow<'a, [FixedArray]>, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct ChunkDataBlockEntity<'a> { + pub packed_xz: i8, + pub y: i16, + pub kind: BlockEntityKind, + pub data: Cow<'a, Compound>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chunk_delta_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_delta_update_s2c.rs new file mode 100644 index 00000000..1405f904 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_delta_update_s2c.rs @@ -0,0 +1,39 @@ +use std::borrow::Cow; +use std::io::Write; + +use bitfield_struct::bitfield; + +use crate::chunk_section_pos::ChunkSectionPos; +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarLong}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ChunkDeltaUpdateS2c<'a> { + pub chunk_sect_pos: ChunkSectionPos, + pub blocks: Cow<'a, [ChunkDeltaUpdateEntry]>, +} + +#[bitfield(u64)] +#[derive(PartialEq, Eq, DecodeBytesAuto)] +pub struct ChunkDeltaUpdateEntry { + #[bits(4)] + pub off_y: u8, + #[bits(4)] + pub off_z: u8, + #[bits(4)] + pub off_x: u8, + pub block_state: u32, + #[bits(20)] + _pad: u32, +} + +impl Encode for ChunkDeltaUpdateEntry { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + VarLong(self.0 as _).encode(w) + } +} + +impl Decode for ChunkDeltaUpdateEntry { + fn decode(r: &mut &[u8]) -> anyhow::Result { + Ok(ChunkDeltaUpdateEntry(VarLong::decode(r)?.0 as _)) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chunk_load_distance_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_load_distance_s2c.rs new file mode 100644 index 00000000..f28ef559 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_load_distance_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ChunkLoadDistanceS2c { + pub view_distance: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/chunk_render_distance_center_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_render_distance_center_s2c.rs new file mode 100644 index 00000000..986e8ece --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/chunk_render_distance_center_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ChunkRenderDistanceCenterS2c { + pub chunk_x: VarInt, + pub chunk_z: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/clear_title_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/clear_title_s2c.rs new file mode 100644 index 00000000..d2fa8d0a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/clear_title_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ClearTitleS2c { + pub reset: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/click_slot_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/click_slot_c2s.rs new file mode 100644 index 00000000..3fe2bdf0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/click_slot_c2s.rs @@ -0,0 +1,33 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ClickSlotC2s<'a> { + pub window_id: u8, + pub state_id: VarInt, + pub slot_idx: i16, + /// The button used to click the slot. An enum can't easily be used for this + /// because the meaning of this value depends on the mode. + pub button: i8, + pub mode: ClickMode, + pub slot_changes: Cow<'a, [SlotChange]>, + pub carried_item: ItemStack, +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub enum ClickMode { + Click, + ShiftClick, + Hotbar, + CreativeMiddleClick, + DropKey, + Drag, + DoubleClick, +} + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct SlotChange { + pub idx: i16, + pub stack: ItemStack, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/client_command_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/client_command_c2s.rs new file mode 100644 index 00000000..5d2a2701 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/client_command_c2s.rs @@ -0,0 +1,21 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ClientCommandC2s { + pub entity_id: VarInt, + pub action: ClientCommand, + pub jump_boost: VarInt, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum ClientCommand { + StartSneaking, + StopSneaking, + LeaveBed, + StartSprinting, + StopSprinting, + StartJumpWithHorse, + StopJumpWithHorse, + OpenHorseInventory, + StartFlyingWithElytra, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/client_settings_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/client_settings_c2s.rs new file mode 100644 index 00000000..3035148e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/client_settings_c2s.rs @@ -0,0 +1,44 @@ +use bitfield_struct::bitfield; +use valence_bytes::CowUtf8Bytes; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ClientSettingsC2s<'a> { + pub locale: CowUtf8Bytes<'a>, + pub view_distance: u8, + pub chat_mode: ChatMode, + pub chat_colors: bool, + pub displayed_skin_parts: DisplayedSkinParts, + pub main_arm: MainArm, + pub enable_text_filtering: bool, + pub allow_server_listings: bool, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct DisplayedSkinParts { + pub cape: bool, + pub jacket: bool, + pub left_sleeve: bool, + pub right_sleeve: bool, + pub left_pants_leg: bool, + pub right_pants_leg: bool, + pub hat: bool, + _pad: bool, +} + +#[derive(Copy, Clone, PartialEq, Eq, Default, Debug, Encode, Decode, DecodeBytes)] +pub enum ChatMode { + Enabled, + CommandsOnly, + #[default] + Hidden, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Encode, Decode, DecodeBytes)] +pub enum MainArm { + Left, + #[default] + Right, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/client_status_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/client_status_c2s.rs new file mode 100644 index 00000000..f6aea58f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/client_status_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub enum ClientStatusC2s { + PerformRespawn, + RequestStats, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/close_handled_screen_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/close_handled_screen_c2s.rs new file mode 100644 index 00000000..d8edf812 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/close_handled_screen_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct CloseHandledScreenC2s { + pub window_id: i8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/close_screen_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/close_screen_s2c.rs new file mode 100644 index 00000000..ba779459 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/close_screen_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct CloseScreenS2c { + /// Ignored by notchian clients. + pub window_id: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/command_execution_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/command_execution_c2s.rs new file mode 100644 index 00000000..49c621f0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/command_execution_c2s.rs @@ -0,0 +1,22 @@ +use valence_bytes::{CowFixedBytes, CowUtf8Bytes}; + +use crate::{Bounded, DecodeBytes, Encode, FixedBitSet, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CommandExecutionC2s<'a> { + pub command: Bounded, 256>, + pub timestamp: u64, + pub salt: u64, + pub argument_signatures: Vec>, + pub message_count: VarInt, + //// This is a bitset of 20; each bit represents one + //// of the last 20 messages received and whether or not + //// the message was acknowledged by the client + pub acknowledgement: FixedBitSet<20, 3>, +} + +#[derive(Clone, Debug, Encode, DecodeBytes)] +pub struct CommandArgumentSignature<'a> { + pub argument_name: Bounded, 16>, + pub signature: CowFixedBytes<'a, 256>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/command_suggestions_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/command_suggestions_s2c.rs new file mode 100644 index 00000000..2effb203 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/command_suggestions_s2c.rs @@ -0,0 +1,20 @@ +use std::borrow::Cow; + +use valence_bytes::CowUtf8Bytes; +use valence_text::Text; + +use crate::{DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CommandSuggestionsS2c<'a> { + pub id: VarInt, + pub start: VarInt, + pub length: VarInt, + pub matches: Vec>, +} + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes)] +pub struct CommandSuggestionsMatch<'a> { + pub suggested_match: CowUtf8Bytes<'a>, + pub tooltip: Option>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/command_tree_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/command_tree_s2c.rs new file mode 100644 index 00000000..a893f454 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/command_tree_s2c.rs @@ -0,0 +1,438 @@ +use std::io::Write; + +use anyhow::bail; +use byteorder::WriteBytesExt; +use valence_bytes::{Bytes, Utf8Bytes}; +use valence_ident::Ident; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CommandTreeS2c { + pub commands: Vec, + pub root_index: VarInt, +} + +#[derive(Clone, Debug)] +pub struct Node { + pub data: NodeData, + pub executable: bool, + pub children: Vec, + pub redirect_node: Option, +} + +#[derive(Clone, Debug, PartialEq)] +pub enum NodeData { + Root, + Literal { + name: Utf8Bytes, + }, + Argument { + name: Utf8Bytes, + parser: Parser, + suggestion: Option, + }, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum Suggestion { + AskServer, + AllRecipes, + AvailableSounds, + AvailableBiomes, + SummonableEntities, +} + +#[derive(Clone, Debug, PartialEq)] +pub enum Parser { + Bool, + Float { min: Option, max: Option }, + Double { min: Option, max: Option }, + Integer { min: Option, max: Option }, + Long { min: Option, max: Option }, + String(StringArg), + Entity { single: bool, only_players: bool }, + GameProfile, + BlockPos, + ColumnPos, + Vec3, + Vec2, + BlockState, + BlockPredicate, + ItemStack, + ItemPredicate, + Color, + Component, + Message, + NbtCompoundTag, + NbtTag, + NbtPath, + Objective, + ObjectiveCriteria, + Operation, + Particle, + Angle, + Rotation, + ScoreboardSlot, + ScoreHolder { allow_multiple: bool }, + Swizzle, + Team, + ItemSlot, + ResourceLocation, + Function, + EntityAnchor, + IntRange, + FloatRange, + Dimension, + GameMode, + Time, + ResourceOrTag { registry: Ident }, + ResourceOrTagKey { registry: Ident }, + Resource { registry: Ident }, + ResourceKey { registry: Ident }, + TemplateMirror, + TemplateRotation, + Uuid, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum StringArg { + SingleWord, + QuotablePhrase, + GreedyPhrase, +} + +impl Encode for Node { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let node_type = match &self.data { + NodeData::Root => 0, + NodeData::Literal { .. } => 1, + NodeData::Argument { .. } => 2, + }; + + let has_suggestion = matches!( + &self.data, + NodeData::Argument { + suggestion: Some(_), + .. + } + ); + + let flags: u8 = node_type + | (self.executable as u8 * 0x04) + | (self.redirect_node.is_some() as u8 * 0x08) + | (has_suggestion as u8 * 0x10); + + w.write_u8(flags)?; + + self.children.encode(&mut w)?; + + if let Some(redirect_node) = self.redirect_node { + redirect_node.encode(&mut w)?; + } + + match &self.data { + NodeData::Root => {} + NodeData::Literal { name } => { + name.encode(&mut w)?; + } + NodeData::Argument { + name, + parser, + suggestion, + } => { + name.encode(&mut w)?; + parser.encode(&mut w)?; + + if let Some(suggestion) = suggestion { + match suggestion { + Suggestion::AskServer => "ask_server", + Suggestion::AllRecipes => "all_recipes", + Suggestion::AvailableSounds => "available_sounds", + Suggestion::AvailableBiomes => "available_biomes", + Suggestion::SummonableEntities => "summonable_entities", + } + .encode(&mut w)?; + } + } + } + + Ok(()) + } +} + +impl DecodeBytes for Node { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let flags = u8::decode_bytes(r)?; + + let children = Vec::decode_bytes(r)?; + + let redirect_node = if flags & 0x08 != 0 { + Some(VarInt::decode_bytes(r)?) + } else { + None + }; + + let node_data = match flags & 0x3 { + 0 => NodeData::Root, + 1 => NodeData::Literal { + name: Utf8Bytes::decode_bytes(r)?, + }, + 2 => NodeData::Argument { + name: Utf8Bytes::decode_bytes(r)?, + parser: Parser::decode_bytes(r)?, + suggestion: if flags & 0x10 != 0 { + Some(match Utf8Bytes::decode_bytes(r)?.as_ref() { + "minecraft:ask_server" => Suggestion::AskServer, + "minecraft:all_recipes" => Suggestion::AllRecipes, + "minecraft:available_sounds" => Suggestion::AvailableSounds, + "minecraft:available_biomes" => Suggestion::AvailableBiomes, + "minecraft:summonable_entities" => Suggestion::SummonableEntities, + other => bail!("unknown command suggestion type of \"{other}\""), + }) + } else { + None + }, + }, + n => bail!("invalid node type of {n}"), + }; + + Ok(Self { + children, + data: node_data, + executable: flags & 0x04 != 0, + redirect_node, + }) + } +} + +impl Encode for Parser { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match self { + Parser::Bool => 0u8.encode(&mut w)?, + Parser::Float { min, max } => { + 1u8.encode(&mut w)?; + + (min.is_some() as u8 | (max.is_some() as u8 * 0x2)).encode(&mut w)?; + + if let Some(min) = min { + min.encode(&mut w)?; + } + + if let Some(max) = max { + max.encode(&mut w)?; + } + } + Parser::Double { min, max } => { + 2u8.encode(&mut w)?; + + (min.is_some() as u8 | (max.is_some() as u8 * 0x2)).encode(&mut w)?; + + if let Some(min) = min { + min.encode(&mut w)?; + } + + if let Some(max) = max { + max.encode(&mut w)?; + } + } + Parser::Integer { min, max } => { + 3u8.encode(&mut w)?; + + (min.is_some() as u8 | (max.is_some() as u8 * 0x2)).encode(&mut w)?; + + if let Some(min) = min { + min.encode(&mut w)?; + } + + if let Some(max) = max { + max.encode(&mut w)?; + } + } + Parser::Long { min, max } => { + 4u8.encode(&mut w)?; + + (min.is_some() as u8 | (max.is_some() as u8 * 0x2)).encode(&mut w)?; + + if let Some(min) = min { + min.encode(&mut w)?; + } + + if let Some(max) = max { + max.encode(&mut w)?; + } + } + Parser::String(arg) => { + 5u8.encode(&mut w)?; + arg.encode(&mut w)?; + } + Parser::Entity { + single, + only_players, + } => { + 6u8.encode(&mut w)?; + (*single as u8 | (*only_players as u8 * 0x2)).encode(&mut w)?; + } + Parser::GameProfile => 7u8.encode(&mut w)?, + Parser::BlockPos => 8u8.encode(&mut w)?, + Parser::ColumnPos => 9u8.encode(&mut w)?, + Parser::Vec3 => 10u8.encode(&mut w)?, + Parser::Vec2 => 11u8.encode(&mut w)?, + Parser::BlockState => 12u8.encode(&mut w)?, + Parser::BlockPredicate => 13u8.encode(&mut w)?, + Parser::ItemStack => 14u8.encode(&mut w)?, + Parser::ItemPredicate => 15u8.encode(&mut w)?, + Parser::Color => 16u8.encode(&mut w)?, + Parser::Component => 17u8.encode(&mut w)?, + Parser::Message => 18u8.encode(&mut w)?, + Parser::NbtCompoundTag => 19u8.encode(&mut w)?, + Parser::NbtTag => 20u8.encode(&mut w)?, + Parser::NbtPath => 21u8.encode(&mut w)?, + Parser::Objective => 22u8.encode(&mut w)?, + Parser::ObjectiveCriteria => 23u8.encode(&mut w)?, + Parser::Operation => 24u8.encode(&mut w)?, + Parser::Particle => 25u8.encode(&mut w)?, + Parser::Angle => 26u8.encode(&mut w)?, + Parser::Rotation => 27u8.encode(&mut w)?, + Parser::ScoreboardSlot => 28u8.encode(&mut w)?, + Parser::ScoreHolder { allow_multiple } => { + 29u8.encode(&mut w)?; + allow_multiple.encode(&mut w)?; + } + Parser::Swizzle => 30u8.encode(&mut w)?, + Parser::Team => 31u8.encode(&mut w)?, + Parser::ItemSlot => 32u8.encode(&mut w)?, + Parser::ResourceLocation => 33u8.encode(&mut w)?, + Parser::Function => 34u8.encode(&mut w)?, + Parser::EntityAnchor => 35u8.encode(&mut w)?, + Parser::IntRange => 36u8.encode(&mut w)?, + Parser::FloatRange => 37u8.encode(&mut w)?, + Parser::Dimension => 38u8.encode(&mut w)?, + Parser::GameMode => 39u8.encode(&mut w)?, + Parser::Time => 40u8.encode(&mut w)?, + Parser::ResourceOrTag { registry } => { + 41u8.encode(&mut w)?; + registry.encode(&mut w)?; + } + Parser::ResourceOrTagKey { registry } => { + 42u8.encode(&mut w)?; + registry.encode(&mut w)?; + } + Parser::Resource { registry } => { + 43u8.encode(&mut w)?; + registry.encode(&mut w)?; + } + Parser::ResourceKey { registry } => { + 44u8.encode(&mut w)?; + registry.encode(&mut w)?; + } + Parser::TemplateMirror => 45u8.encode(&mut w)?, + Parser::TemplateRotation => 46u8.encode(&mut w)?, + Parser::Uuid => 47u8.encode(&mut w)?, + } + + Ok(()) + } +} + +impl DecodeBytes for Parser { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + fn decode_min_max(r: &mut Bytes) -> anyhow::Result<(Option, Option)> { + let flags = u8::decode_bytes(r)?; + + let min = if flags & 0x1 != 0 { + Some(T::decode_bytes(r)?) + } else { + None + }; + + let max = if flags & 0x2 != 0 { + Some(T::decode_bytes(r)?) + } else { + None + }; + + Ok((min, max)) + } + + Ok(match u8::decode_bytes(r)? { + 0 => Self::Bool, + 1 => { + let (min, max) = decode_min_max(r)?; + Self::Float { min, max } + } + 2 => { + let (min, max) = decode_min_max(r)?; + Self::Double { min, max } + } + 3 => { + let (min, max) = decode_min_max(r)?; + Self::Integer { min, max } + } + 4 => { + let (min, max) = decode_min_max(r)?; + Self::Long { min, max } + } + 5 => Self::String(StringArg::decode_bytes(r)?), + 6 => { + let flags = u8::decode_bytes(r)?; + Self::Entity { + single: flags & 0x1 != 0, + only_players: flags & 0x2 != 0, + } + } + 7 => Self::GameProfile, + 8 => Self::BlockPos, + 9 => Self::ColumnPos, + 10 => Self::Vec3, + 11 => Self::Vec2, + 12 => Self::BlockState, + 13 => Self::BlockPredicate, + 14 => Self::ItemStack, + 15 => Self::ItemPredicate, + 16 => Self::Color, + 17 => Self::Component, + 18 => Self::Message, + 19 => Self::NbtCompoundTag, + 20 => Self::NbtTag, + 21 => Self::NbtPath, + 22 => Self::Objective, + 23 => Self::ObjectiveCriteria, + 24 => Self::Operation, + 25 => Self::Particle, + 26 => Self::Angle, + 27 => Self::Rotation, + 28 => Self::ScoreboardSlot, + 29 => Self::ScoreHolder { + allow_multiple: bool::decode_bytes(r)?, + }, + 30 => Self::Swizzle, + 31 => Self::Team, + 32 => Self::ItemSlot, + 33 => Self::ResourceLocation, + 34 => Self::Function, + 35 => Self::EntityAnchor, + 36 => Self::IntRange, + 37 => Self::FloatRange, + 38 => Self::Dimension, + 39 => Self::GameMode, + 40 => Self::Time, + 41 => Self::ResourceOrTag { + registry: Ident::decode_bytes(r)?, + }, + 42 => Self::ResourceOrTagKey { + registry: Ident::decode_bytes(r)?, + }, + 43 => Self::Resource { + registry: Ident::decode_bytes(r)?, + }, + 44 => Self::ResourceKey { + registry: Ident::decode_bytes(r)?, + }, + 45 => Self::TemplateMirror, + 46 => Self::TemplateRotation, + 47 => Self::Uuid, + n => bail!("unknown command parser ID of {n}"), + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/cooldown_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/cooldown_update_s2c.rs new file mode 100644 index 00000000..36dd3bb3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/cooldown_update_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, ItemKind, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct CooldownUpdateS2c { + pub item_id: ItemKind, + pub cooldown_ticks: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/craft_failed_response_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/craft_failed_response_s2c.rs new file mode 100644 index 00000000..421af0ac --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/craft_failed_response_s2c.rs @@ -0,0 +1,9 @@ +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CraftFailedResponseS2c { + pub window_id: u8, + pub recipe: Ident, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/craft_request_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/craft_request_c2s.rs new file mode 100644 index 00000000..8da40ac4 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/craft_request_c2s.rs @@ -0,0 +1,10 @@ +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CraftRequestC2s { + pub window_id: i8, + pub recipe: Ident, + pub make_all: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/creative_inventory_action_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/creative_inventory_action_c2s.rs new file mode 100644 index 00000000..8ebac359 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/creative_inventory_action_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct CreativeInventoryActionC2s { + pub slot: i16, + pub clicked_item: ItemStack, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_c2s.rs new file mode 100644 index 00000000..7b0bc902 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_c2s.rs @@ -0,0 +1,11 @@ +use valence_ident::Ident; + +use crate::{Bounded, DecodeBytes, Encode, Packet, RawBytes}; + +pub const MAX_PAYLOAD_SIZE: usize = 32767; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CustomPayloadC2s<'a> { + pub channel: Ident, + pub data: Bounded, MAX_PAYLOAD_SIZE>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_s2c.rs new file mode 100644 index 00000000..2961d534 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/custom_payload_s2c.rs @@ -0,0 +1,11 @@ +use valence_ident::Ident; + +use crate::{Bounded, DecodeBytes, Encode, Packet, RawBytes}; + +const MAX_PAYLOAD_SIZE: usize = 0x100000; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct CustomPayloadS2c<'a> { + pub channel: Ident, + pub data: Bounded, MAX_PAYLOAD_SIZE>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/damage_tilt_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/damage_tilt_s2c.rs new file mode 100644 index 00000000..cbbf540c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/damage_tilt_s2c.rs @@ -0,0 +1,9 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct DamageTiltS2c { + /// The ID of the entity taking damage. + pub entity_id: VarInt, + /// The direction the damage is coming from in relation to the entity. + pub yaw: f32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/death_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/death_message_s2c.rs new file mode 100644 index 00000000..95bfd3d4 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/death_message_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct DeathMessageS2c<'a> { + pub player_id: VarInt, + pub message: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/difficulty_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/difficulty_s2c.rs new file mode 100644 index 00000000..61eb1682 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/difficulty_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Difficulty, Encode, Packet}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct DifficultyS2c { + pub difficulty: Difficulty, + pub locked: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/disconnect_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/disconnect_s2c.rs new file mode 100644 index 00000000..ee914c6f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/disconnect_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::DISCONNECT_S2C)] +pub struct DisconnectS2c<'a> { + pub reason: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/end_combat_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/end_combat_s2c.rs new file mode 100644 index 00000000..3a70daf3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/end_combat_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +/// Unused by notchian clients. +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EndCombatS2c { + pub duration: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/enter_combat_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/enter_combat_s2c.rs new file mode 100644 index 00000000..82f53330 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/enter_combat_s2c.rs @@ -0,0 +1,5 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +/// Unused by notchian clients. +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EnterCombatS2c; diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entities_destroy_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entities_destroy_s2c.rs new file mode 100644 index 00000000..bf33b88a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entities_destroy_s2c.rs @@ -0,0 +1,8 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntitiesDestroyS2c<'a> { + pub entity_ids: Cow<'a, [VarInt]>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_animation_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_animation_s2c.rs new file mode 100644 index 00000000..6fc5fbf1 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_animation_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityAnimationS2c { + pub entity_id: VarInt, + pub animation: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_attach_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_attach_s2c.rs new file mode 100644 index 00000000..0c1d45c1 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_attach_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityAttachS2c { + pub attached_entity_id: i32, + pub holding_entity_id: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_attributes_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_attributes_s2c.rs new file mode 100644 index 00000000..53a0c6a7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_attributes_s2c.rs @@ -0,0 +1,24 @@ +use uuid::Uuid; +use valence_ident::Ident; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct EntityAttributesS2c { + pub entity_id: VarInt, + pub properties: Vec, +} + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes)] +pub struct AttributeProperty { + pub key: Ident, + pub value: f64, + pub modifiers: Vec, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct AttributeModifier { + pub uuid: Uuid, + pub amount: f64, + pub operation: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_damage_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_damage_s2c.rs new file mode 100644 index 00000000..3158b8e0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_damage_s2c.rs @@ -0,0 +1,24 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityDamageS2c { + /// The ID of the entity taking damage + pub entity_id: VarInt, + /// The ID of the type of damage taken + pub source_type_id: VarInt, + /// The ID + 1 of the entity responsible for the damage, if present. If not + /// present, the value is 0 + pub source_cause_id: VarInt, + /// The ID + 1 of the entity that directly dealt the damage, if present. If + /// not present, the value is 0. If this field is present: + /// * and damage was dealt indirectly, such as by the use of a projectile, + /// this field will contain the ID of such projectile; + /// * and damage was dealt directly, such as by manually attacking, this + /// field will contain the same value as Source Cause ID. + pub source_direct_id: VarInt, + /// The Notchian server sends the Source Position when the damage was dealt + /// by the /damage command and a position was specified + pub source_pos: Option, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_equipment_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_equipment_update_s2c.rs new file mode 100644 index 00000000..b3172c33 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_equipment_update_s2c.rs @@ -0,0 +1,58 @@ +use std::io::Write; + +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Packet, DecodeBytesAuto)] +pub struct EntityEquipmentUpdateS2c { + pub entity_id: VarInt, + pub equipment: Vec, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct EquipmentEntry { + pub slot: i8, + pub item: ItemStack, +} + +impl Encode for EntityEquipmentUpdateS2c { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.entity_id.encode(&mut w)?; + + for i in 0..self.equipment.len() { + let slot = self.equipment[i].slot; + if i != self.equipment.len() - 1 { + (slot | -128).encode(&mut w)?; + } else { + slot.encode(&mut w)?; + } + self.equipment[i].item.encode(&mut w)?; + } + + Ok(()) + } +} + +impl Decode for EntityEquipmentUpdateS2c { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let entity_id = VarInt::decode(r)?; + + let mut equipment = vec![]; + + loop { + let slot = i8::decode(r)?; + let item = ItemStack::decode(r)?; + equipment.push(EquipmentEntry { + slot: slot & 127, + item, + }); + if slot & -128 == 0 { + break; + } + } + + Ok(Self { + entity_id, + equipment, + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_passengers_set_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_passengers_set_s2c.rs new file mode 100644 index 00000000..4bf22d94 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_passengers_set_s2c.rs @@ -0,0 +1,10 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityPassengersSetS2c<'a> { + /// Vehicle's entity id + pub entity_id: VarInt, + pub passengers: Cow<'a, [VarInt]>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_position_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_position_s2c.rs new file mode 100644 index 00000000..8c834326 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_position_s2c.rs @@ -0,0 +1,12 @@ +use valence_math::DVec3; + +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityPositionS2c { + pub entity_id: VarInt, + pub position: DVec3, + pub yaw: ByteAngle, + pub pitch: ByteAngle, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_set_head_yaw_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_set_head_yaw_s2c.rs new file mode 100644 index 00000000..16e35816 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_set_head_yaw_s2c.rs @@ -0,0 +1,7 @@ +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntitySetHeadYawS2c { + pub entity_id: VarInt, + pub head_yaw: ByteAngle, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_spawn_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_spawn_s2c.rs new file mode 100644 index 00000000..836a5530 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_spawn_s2c.rs @@ -0,0 +1,20 @@ +use uuid::Uuid; +use valence_math::DVec3; + +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt, Velocity}; + +/// Sent by the server when a vehicle or other non-living entity is created. +/// +/// wiki : [Spawn Entity](https://wiki.vg/Protocol#Spawn_Experience_Orb) +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntitySpawnS2c { + pub entity_id: VarInt, + pub object_uuid: Uuid, + pub kind: VarInt, // TODO: EntityKind in valence_generated? + pub position: DVec3, + pub pitch: ByteAngle, + pub yaw: ByteAngle, + pub head_yaw: ByteAngle, + pub data: VarInt, + pub velocity: Velocity, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_effect_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_effect_s2c.rs new file mode 100644 index 00000000..6a5f1081 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_effect_s2c.rs @@ -0,0 +1,24 @@ +use bitfield_struct::bitfield; +use valence_nbt::Compound; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityStatusEffectS2c { + pub entity_id: VarInt, + pub effect_id: VarInt, // TODO: effect ID registry. + pub amplifier: u8, + pub duration: VarInt, + pub flags: Flags, + pub factor_codec: Option, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct Flags { + pub is_ambient: bool, + pub show_particles: bool, + pub show_icon: bool, + #[bits(5)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_s2c.rs new file mode 100644 index 00000000..efd15718 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_status_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityStatusS2c { + pub entity_id: i32, + pub entity_status: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_tracker_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_tracker_update_s2c.rs new file mode 100644 index 00000000..12f7de4e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_tracker_update_s2c.rs @@ -0,0 +1,7 @@ +use crate::{DecodeBytes, Encode, Packet, RawBytes, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct EntityTrackerUpdateS2c<'a> { + pub entity_id: VarInt, + pub tracked_values: RawBytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/entity_velocity_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/entity_velocity_update_s2c.rs new file mode 100644 index 00000000..e8005433 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/entity_velocity_update_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt, Velocity}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct EntityVelocityUpdateS2c { + pub entity_id: VarInt, + pub velocity: Velocity, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/experience_bar_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/experience_bar_update_s2c.rs new file mode 100644 index 00000000..14de7405 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/experience_bar_update_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ExperienceBarUpdateS2c { + pub bar: f32, + pub level: VarInt, + pub total_xp: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/experience_orb_spawn_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/experience_orb_spawn_s2c.rs new file mode 100644 index 00000000..1e615b58 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/experience_orb_spawn_s2c.rs @@ -0,0 +1,14 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +/// Spawns one or more experience orbs. +/// +/// wiki : [Spawn Experience Orb](https://wiki.vg/Protocol#Spawn_Experience_Orb) +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ExperienceOrbSpawnS2c { + pub entity_id: VarInt, + pub position: DVec3, + /// The amount of experience this orb will reward once collected. + pub count: i16, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/explosion_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/explosion_s2c.rs new file mode 100644 index 00000000..c9405443 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/explosion_s2c.rs @@ -0,0 +1,13 @@ +use std::borrow::Cow; + +use valence_math::{DVec3, Vec3}; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ExplosionS2c<'a> { + pub pos: DVec3, + pub strength: f32, + pub affected_blocks: Cow<'a, [[i8; 3]]>, + pub player_motion: Vec3, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/features_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/features_s2c.rs new file mode 100644 index 00000000..5d95dac3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/features_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; +use std::collections::BTreeSet; + +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct FeaturesS2c<'a> { + pub features: Cow<'a, BTreeSet>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/full_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/full_c2s.rs new file mode 100644 index 00000000..b58a6a88 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/full_c2s.rs @@ -0,0 +1,12 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::FULL)] +pub struct FullC2s { + pub position: DVec3, + pub yaw: f32, + pub pitch: f32, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/game_join_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/game_join_s2c.rs new file mode 100644 index 00000000..86665b6a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/game_join_s2c.rs @@ -0,0 +1,30 @@ +use std::borrow::Cow; +use std::collections::BTreeSet; + +use valence_ident::Ident; +use valence_nbt::Compound; + +use crate::game_mode::OptGameMode; +use crate::{DecodeBytes, Encode, GameMode, GlobalPos, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct GameJoinS2c<'a> { + pub entity_id: i32, + pub is_hardcore: bool, + pub game_mode: GameMode, + pub previous_game_mode: OptGameMode, + pub dimension_names: Cow<'a, BTreeSet>, + pub registry_codec: Cow<'a, Compound>, + pub dimension_type_name: Ident, + pub dimension_name: Ident, + pub hashed_seed: i64, + pub max_players: VarInt, + pub view_distance: VarInt, + pub simulation_distance: VarInt, + pub reduced_debug_info: bool, + pub enable_respawn_screen: bool, + pub is_debug: bool, + pub is_flat: bool, + pub last_death_location: Option, + pub portal_cooldown: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/game_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/game_message_s2c.rs new file mode 100644 index 00000000..faf49d66 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/game_message_s2c.rs @@ -0,0 +1,12 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct GameMessageS2c<'a> { + pub chat: Cow<'a, Text>, + /// Whether the message is in the actionbar or the chat. + pub overlay: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/game_state_change_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/game_state_change_s2c.rs new file mode 100644 index 00000000..68321363 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/game_state_change_s2c.rs @@ -0,0 +1,23 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct GameStateChangeS2c { + pub kind: GameEventKind, + pub value: f32, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum GameEventKind { + NoRespawnBlockAvailable, + EndRaining, + BeginRaining, + ChangeGameMode, + WinGame, + DemoEvent, + ArrowHitPlayer, + RainLevelChange, + ThunderLevelChange, + PlayPufferfishStingSound, + PlayElderGuardianMobAppearance, + EnableRespawnScreen, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/hand_swing_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/hand_swing_c2s.rs new file mode 100644 index 00000000..0bc08c96 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/hand_swing_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Hand, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct HandSwingC2s { + pub hand: Hand, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/health_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/health_update_s2c.rs new file mode 100644 index 00000000..1e416dfa --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/health_update_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct HealthUpdateS2c { + pub health: f32, + pub food: VarInt, + pub food_saturation: f32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/inventory_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/inventory_s2c.rs new file mode 100644 index 00000000..9eb899d3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/inventory_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct InventoryS2c<'a> { + pub window_id: u8, + pub state_id: VarInt, + pub slots: Cow<'a, [ItemStack]>, + pub carried_item: Cow<'a, ItemStack>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/item_pickup_animation_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/item_pickup_animation_s2c.rs new file mode 100644 index 00000000..b3de113a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/item_pickup_animation_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ItemPickupAnimationS2c { + pub collected_entity_id: VarInt, + pub collector_entity_id: VarInt, + pub pickup_item_count: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/jigsaw_generating_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/jigsaw_generating_c2s.rs new file mode 100644 index 00000000..eb2c88e2 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/jigsaw_generating_c2s.rs @@ -0,0 +1,8 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct JigsawGeneratingC2s { + pub position: BlockPos, + pub levels: VarInt, + pub keep_jigsaws: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_c2s.rs new file mode 100644 index 00000000..3bf810de --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct KeepAliveC2s { + pub id: u64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_s2c.rs new file mode 100644 index 00000000..62385307 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/keep_alive_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct KeepAliveS2c { + pub id: u64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/light_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/light_update_s2c.rs new file mode 100644 index 00000000..902c2af7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/light_update_s2c.rs @@ -0,0 +1,16 @@ +use std::borrow::Cow; + +use crate::array::FixedArray; +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct LightUpdateS2c<'a> { + pub chunk_x: VarInt, + pub chunk_z: VarInt, + pub sky_light_mask: Cow<'a, [u64]>, + pub block_light_mask: Cow<'a, [u64]>, + pub empty_sky_light_mask: Cow<'a, [u64]>, + pub empty_block_light_mask: Cow<'a, [u64]>, + pub sky_light_arrays: Cow<'a, [FixedArray]>, + pub block_light_arrays: Cow<'a, [FixedArray]>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/look_and_on_ground_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/look_and_on_ground_c2s.rs new file mode 100644 index 00000000..f928c257 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/look_and_on_ground_c2s.rs @@ -0,0 +1,9 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::LOOK_AND_ON_GROUND)] +pub struct LookAndOnGroundC2s { + pub yaw: f32, + pub pitch: f32, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/look_at_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/look_at_s2c.rs new file mode 100644 index 00000000..960673da --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/look_at_s2c.rs @@ -0,0 +1,23 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +/// Instructs a client to face an entity. +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct LookAtS2c { + pub feet_or_eyes: FeetOrEyes, + pub target_position: DVec3, + pub entity_to_face: Option, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum FeetOrEyes { + Feet, + Eyes, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct LookAtEntity { + pub entity_id: VarInt, + pub feet_or_eyes: FeetOrEyes, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/map_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/map_update_s2c.rs new file mode 100644 index 00000000..f7a4da02 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/map_update_s2c.rs @@ -0,0 +1,114 @@ +use std::borrow::Cow; +use std::io::Write; + +use valence_bytes::{Bytes, CowBytes}; +use valence_text::Text; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Packet)] +pub struct MapUpdateS2c<'a> { + pub map_id: VarInt, + pub scale: i8, + pub locked: bool, + pub icons: Option>>, + pub data: Option>, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct Icon<'a> { + pub icon_type: IconType, + /// In map coordinates; -128 for furthest left, +127 for furthest right + pub position: [i8; 2], + /// 0 is a vertical icon and increments by 22.5° + pub direction: i8, + pub display_name: Option>, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum IconType { + WhiteArrow, + GreenArrow, + RedArrow, + BlueArrow, + WhiteCross, + RedPointer, + WhiteCircle, + SmallWhiteCircle, + Mansion, + Temple, + WhiteBanner, + OrangeBanner, + MagentaBanner, + LightBlueBanner, + YellowBanner, + LimeBanner, + PinkBanner, + GrayBanner, + LightGrayBanner, + CyanBanner, + PurpleBanner, + BlueBanner, + BrownBanner, + GreenBanner, + RedBanner, + BlackBanner, + TreasureMarker, +} + +#[derive(Clone, PartialEq, Eq, Debug, Encode)] +pub struct Data<'a> { + pub columns: u8, + pub rows: u8, + pub position: [i8; 2], + pub data: CowBytes<'a>, +} + +impl Encode for MapUpdateS2c<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.map_id.encode(&mut w)?; + self.scale.encode(&mut w)?; + self.locked.encode(&mut w)?; + self.icons.encode(&mut w)?; + + match &self.data { + None => 0u8.encode(&mut w)?, + Some(data) => data.encode(&mut w)?, + } + + Ok(()) + } +} + +impl<'a> DecodeBytes for MapUpdateS2c<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let map_id = VarInt::decode_bytes(r)?; + let scale = i8::decode_bytes(r)?; + let locked = bool::decode_bytes(r)?; + let icons = >>>::decode_bytes(r)?; + let columns = u8::decode_bytes(r)?; + + let data = if columns > 0 { + let rows = u8::decode_bytes(r)?; + let position = <[i8; 2]>::decode_bytes(r)?; + let data = CowBytes::decode_bytes(r)?; + + Some(Data { + columns, + rows, + position, + data, + }) + } else { + None + }; + + Ok(Self { + map_id, + scale, + locked, + icons, + data, + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/message_acknowledgment_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/message_acknowledgment_c2s.rs new file mode 100644 index 00000000..b8a4ccb6 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/message_acknowledgment_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct MessageAcknowledgmentC2s { + pub message_count: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/move_relative_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/move_relative_s2c.rs new file mode 100644 index 00000000..f0708783 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/move_relative_s2c.rs @@ -0,0 +1,9 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::MOVE_RELATIVE)] +pub struct MoveRelativeS2c { + pub entity_id: VarInt, + pub delta: [i16; 3], + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/nbt_query_response_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/nbt_query_response_s2c.rs new file mode 100644 index 00000000..f8276d77 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/nbt_query_response_s2c.rs @@ -0,0 +1,9 @@ +use valence_nbt::Compound; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct NbtQueryResponseS2c { + pub transaction_id: VarInt, + pub nbt: Compound, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/on_ground_only_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/on_ground_only_c2s.rs new file mode 100644 index 00000000..328e6cab --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/on_ground_only_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::ON_GROUND_ONLY)] +pub struct OnGroundOnlyC2s { + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/open_horse_screen_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/open_horse_screen_s2c.rs new file mode 100644 index 00000000..736e787f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/open_horse_screen_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct OpenHorseScreenS2c { + pub window_id: u8, + pub slot_count: VarInt, + pub entity_id: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/open_screen_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/open_screen_s2c.rs new file mode 100644 index 00000000..2b481395 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/open_screen_s2c.rs @@ -0,0 +1,40 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct OpenScreenS2c<'a> { + pub window_id: VarInt, + pub window_type: WindowType, + pub window_title: Cow<'a, Text>, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum WindowType { + Generic9x1, + Generic9x2, + Generic9x3, + Generic9x4, + Generic9x5, + Generic9x6, + Generic3x3, + Anvil, + Beacon, + BlastFurnace, + BrewingStand, + Crafting, + Enchantment, + Furnace, + Grindstone, + Hopper, + Lectern, + Loom, + Merchant, + ShulkerBox, + Smithing, + Smoker, + Cartography, + Stonecutter, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/open_written_book_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/open_written_book_s2c.rs new file mode 100644 index 00000000..b983f32b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/open_written_book_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Hand, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct OpenWrittenBookS2c { + pub hand: Hand, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/overlay_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/overlay_message_s2c.rs new file mode 100644 index 00000000..53251e7f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/overlay_message_s2c.rs @@ -0,0 +1,10 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct OverlayMessageS2c<'a> { + pub action_bar_text: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/particle_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/particle_s2c.rs new file mode 100644 index 00000000..1e8d2f0e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/particle_s2c.rs @@ -0,0 +1,441 @@ +use std::borrow::Cow; +use std::io::Write; + +use anyhow::bail; +use valence_generated::block::BlockState; +use valence_math::{DVec3, Vec3}; + +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt, decode_str}; + +#[derive(Clone, Debug, Packet, DecodeBytesAuto)] +pub struct ParticleS2c<'a> { + pub particle: Cow<'a, Particle>, + pub long_distance: bool, + pub position: DVec3, + pub offset: Vec3, + pub max_speed: f32, + pub count: i32, +} + +impl Encode for ParticleS2c<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + VarInt(self.particle.id()).encode(&mut w)?; + self.long_distance.encode(&mut w)?; + self.position.encode(&mut w)?; + self.offset.encode(&mut w)?; + self.max_speed.encode(&mut w)?; + self.count.encode(&mut w)?; + + self.particle.as_ref().encode(w) + } +} + +impl<'a> Decode for ParticleS2c<'a> { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let particle_id = VarInt::decode(r)?.0; + let long_distance = bool::decode(r)?; + let position = Decode::decode(r)?; + let offset = Decode::decode(r)?; + let max_speed = f32::decode(r)?; + let particle_count = i32::decode(r)?; + + Ok(Self { + particle: Cow::Owned(Particle::decode_with_id(particle_id, r)?), + long_distance, + position, + offset, + max_speed, + count: particle_count, + }) + } +} + +#[derive(Clone, PartialEq, Debug)] +pub enum Particle { + AmbientEntityEffect, + AngryVillager, + Block(BlockState), + BlockMarker(BlockState), + Bubble, + Cloud, + Crit, + DamageIndicator, + DragonBreath, + DrippingLava, + FallingLava, + LandingLava, + DrippingWater, + FallingWater, + Dust { + rgb: Vec3, + scale: f32, + }, + DustColorTransition { + from_rgb: Vec3, + scale: f32, + to_rgb: Vec3, + }, + Effect, + ElderGuardian, + EnchantedHit, + Enchant, + EndRod, + EntityEffect, + ExplosionEmitter, + Explosion, + SonicBoom, + FallingDust(BlockState), + Firework, + Fishing, + Flame, + CherryLeaves, + SculkSoul, + SculkCharge { + roll: f32, + }, + SculkChargePop, + SoulFireFlame, + Soul, + Flash, + HappyVillager, + Composter, + Heart, + InstantEffect, + Item(ItemStack), + /// The 'Block' variant of the 'Vibration' particle + VibrationBlock { + block_pos: BlockPos, + ticks: i32, + }, + /// The 'Entity' variant of the 'Vibration' particle + VibrationEntity { + entity_id: i32, + entity_eye_height: f32, + ticks: i32, + }, + ItemSlime, + ItemSnowball, + LargeSmoke, + Lava, + Mycelium, + Note, + Poof, + Portal, + Rain, + Smoke, + Sneeze, + Spit, + SquidInk, + SweepAttack, + TotemOfUndying, + Underwater, + Splash, + Witch, + BubblePop, + CurrentDown, + BubbleColumnUp, + Nautilus, + Dolphin, + CampfireCosySmoke, + CampfireSignalSmoke, + DrippingHoney, + FallingHoney, + LandingHoney, + FallingNectar, + FallingSporeBlossom, + Ash, + CrimsonSpore, + WarpedSpore, + SporeBlossomAir, + DrippingObsidianTear, + FallingObsidianTear, + LandingObsidianTear, + ReversePortal, + WhiteAsh, + SmallFlame, + Snowflake, + DrippingDripstoneLava, + FallingDripstoneLava, + DrippingDripstoneWater, + FallingDripstoneWater, + GlowSquidInk, + Glow, + WaxOn, + WaxOff, + ElectricSpark, + Scrape, + Shriek { + delay: i32, + }, + EggCrack, +} + +impl Particle { + pub const fn id(&self) -> i32 { + match self { + Particle::AmbientEntityEffect => 0, + Particle::AngryVillager => 1, + Particle::Block(_) => 2, + Particle::BlockMarker(_) => 3, + Particle::Bubble => 4, + Particle::Cloud => 5, + Particle::Crit => 6, + Particle::DamageIndicator => 7, + Particle::DragonBreath => 8, + Particle::DrippingLava => 9, + Particle::FallingLava => 10, + Particle::LandingLava => 11, + Particle::DrippingWater => 12, + Particle::FallingWater => 13, + Particle::Dust { .. } => 14, + Particle::DustColorTransition { .. } => 15, + Particle::Effect => 16, + Particle::ElderGuardian => 17, + Particle::EnchantedHit => 18, + Particle::Enchant => 19, + Particle::EndRod => 20, + Particle::EntityEffect => 21, + Particle::ExplosionEmitter => 22, + Particle::Explosion => 23, + Particle::SonicBoom => 24, + Particle::FallingDust(_) => 25, + Particle::Firework => 26, + Particle::Fishing => 27, + Particle::Flame => 28, + Particle::CherryLeaves => 29, + Particle::SculkSoul => 30, + Particle::SculkCharge { .. } => 31, + Particle::SculkChargePop => 32, + Particle::SoulFireFlame => 33, + Particle::Soul => 34, + Particle::Flash => 35, + Particle::HappyVillager => 36, + Particle::Composter => 37, + Particle::Heart => 38, + Particle::InstantEffect => 39, + Particle::Item { .. } => 40, + Particle::VibrationBlock { .. } => 41, + Particle::VibrationEntity { .. } => 41, + Particle::ItemSlime => 42, + Particle::ItemSnowball => 43, + Particle::LargeSmoke => 44, + Particle::Lava => 45, + Particle::Mycelium => 46, + Particle::Note => 47, + Particle::Poof => 48, + Particle::Portal => 49, + Particle::Rain => 50, + Particle::Smoke => 51, + Particle::Sneeze => 52, + Particle::Spit => 53, + Particle::SquidInk => 54, + Particle::SweepAttack => 55, + Particle::TotemOfUndying => 56, + Particle::Underwater => 57, + Particle::Splash => 58, + Particle::Witch => 59, + Particle::BubblePop => 60, + Particle::CurrentDown => 61, + Particle::BubbleColumnUp => 62, + Particle::Nautilus => 63, + Particle::Dolphin => 64, + Particle::CampfireCosySmoke => 65, + Particle::CampfireSignalSmoke => 66, + Particle::DrippingHoney => 67, + Particle::FallingHoney => 68, + Particle::LandingHoney => 69, + Particle::FallingNectar => 70, + Particle::FallingSporeBlossom => 71, + Particle::Ash => 72, + Particle::CrimsonSpore => 73, + Particle::WarpedSpore => 74, + Particle::SporeBlossomAir => 75, + Particle::DrippingObsidianTear => 76, + Particle::FallingObsidianTear => 77, + Particle::LandingObsidianTear => 78, + Particle::ReversePortal => 79, + Particle::WhiteAsh => 80, + Particle::SmallFlame => 81, + Particle::Snowflake => 82, + Particle::DrippingDripstoneLava => 83, + Particle::FallingDripstoneLava => 84, + Particle::DrippingDripstoneWater => 85, + Particle::FallingDripstoneWater => 86, + Particle::GlowSquidInk => 87, + Particle::Glow => 88, + Particle::WaxOn => 89, + Particle::WaxOff => 80, + Particle::ElectricSpark => 91, + Particle::Scrape => 92, + Particle::Shriek { .. } => 93, + Particle::EggCrack => 94, + } + } + + /// Decodes the particle assuming the given particle ID. + pub fn decode_with_id(particle_id: i32, r: &mut &[u8]) -> anyhow::Result { + Ok(match particle_id { + 0 => Particle::AmbientEntityEffect, + 1 => Particle::AngryVillager, + 2 => Particle::Block(BlockState::decode(r)?), + 3 => Particle::BlockMarker(BlockState::decode(r)?), + 4 => Particle::Bubble, + 5 => Particle::Cloud, + 6 => Particle::Crit, + 7 => Particle::DamageIndicator, + 8 => Particle::DragonBreath, + 9 => Particle::DrippingLava, + 10 => Particle::FallingLava, + 11 => Particle::LandingLava, + 12 => Particle::DrippingWater, + 13 => Particle::FallingWater, + 14 => Particle::Dust { + rgb: Decode::decode(r)?, + scale: Decode::decode(r)?, + }, + 15 => Particle::DustColorTransition { + from_rgb: Decode::decode(r)?, + scale: Decode::decode(r)?, + to_rgb: Decode::decode(r)?, + }, + 16 => Particle::Effect, + 17 => Particle::ElderGuardian, + 18 => Particle::EnchantedHit, + 19 => Particle::Enchant, + 20 => Particle::EndRod, + 21 => Particle::EntityEffect, + 22 => Particle::ExplosionEmitter, + 23 => Particle::Explosion, + 24 => Particle::SonicBoom, + 25 => Particle::FallingDust(BlockState::decode(r)?), + 26 => Particle::Firework, + 27 => Particle::Fishing, + 28 => Particle::Flame, + 29 => Particle::CherryLeaves, + 30 => Particle::SculkSoul, + 31 => Particle::SculkCharge { + roll: f32::decode(r)?, + }, + 32 => Particle::SculkChargePop, + 33 => Particle::SoulFireFlame, + 34 => Particle::Soul, + 35 => Particle::Flash, + 36 => Particle::HappyVillager, + 37 => Particle::Composter, + 38 => Particle::Heart, + 39 => Particle::InstantEffect, + 40 => Particle::Item(Decode::decode(r)?), + 41 => match decode_str(r)? { + "block" => Particle::VibrationBlock { + block_pos: BlockPos::decode(r)?, + ticks: VarInt::decode(r)?.0, + }, + "entity" => Particle::VibrationEntity { + entity_id: VarInt::decode(r)?.0, + entity_eye_height: f32::decode(r)?, + ticks: VarInt::decode(r)?.0, + }, + invalid => bail!("invalid vibration position source of \"{invalid}\""), + }, + 42 => Particle::ItemSlime, + 43 => Particle::ItemSnowball, + 44 => Particle::LargeSmoke, + 45 => Particle::Lava, + 46 => Particle::Mycelium, + 47 => Particle::Note, + 48 => Particle::Poof, + 49 => Particle::Portal, + 50 => Particle::Rain, + 51 => Particle::Smoke, + 52 => Particle::Sneeze, + 53 => Particle::Spit, + 54 => Particle::SquidInk, + 55 => Particle::SweepAttack, + 56 => Particle::TotemOfUndying, + 57 => Particle::Underwater, + 58 => Particle::Splash, + 59 => Particle::Witch, + 60 => Particle::BubblePop, + 61 => Particle::CurrentDown, + 62 => Particle::BubbleColumnUp, + 63 => Particle::Nautilus, + 64 => Particle::Dolphin, + 65 => Particle::CampfireCosySmoke, + 66 => Particle::CampfireSignalSmoke, + 67 => Particle::DrippingHoney, + 68 => Particle::FallingHoney, + 69 => Particle::LandingHoney, + 70 => Particle::FallingNectar, + 71 => Particle::FallingSporeBlossom, + 72 => Particle::Ash, + 73 => Particle::CrimsonSpore, + 74 => Particle::WarpedSpore, + 75 => Particle::SporeBlossomAir, + 76 => Particle::DrippingObsidianTear, + 77 => Particle::FallingObsidianTear, + 78 => Particle::LandingObsidianTear, + 79 => Particle::ReversePortal, + 80 => Particle::WhiteAsh, + 81 => Particle::SmallFlame, + 82 => Particle::Snowflake, + 83 => Particle::DrippingDripstoneLava, + 84 => Particle::FallingDripstoneLava, + 85 => Particle::DrippingDripstoneWater, + 86 => Particle::FallingDripstoneWater, + 87 => Particle::GlowSquidInk, + 88 => Particle::Glow, + 89 => Particle::WaxOn, + 90 => Particle::WaxOff, + 91 => Particle::ElectricSpark, + 92 => Particle::Scrape, + 93 => Particle::Shriek { + delay: VarInt::decode(r)?.0, + }, + 94 => Particle::EggCrack, + id => bail!("invalid particle ID of {id}"), + }) + } +} + +/// Encodes the particle without an ID. +impl Encode for Particle { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match self { + Particle::Block(block_state) => block_state.encode(w), + Particle::BlockMarker(block_state) => block_state.encode(w), + Particle::Dust { rgb, scale } => { + rgb.encode(&mut w)?; + scale.encode(w) + } + Particle::DustColorTransition { + from_rgb, + scale, + to_rgb, + } => { + from_rgb.encode(&mut w)?; + scale.encode(&mut w)?; + to_rgb.encode(w) + } + Particle::FallingDust(block_state) => block_state.encode(w), + Particle::SculkCharge { roll } => roll.encode(w), + Particle::Item(stack) => stack.encode(w), + Particle::VibrationBlock { block_pos, ticks } => { + "block".encode(&mut w)?; + block_pos.encode(&mut w)?; + VarInt(*ticks).encode(w) + } + Particle::VibrationEntity { + entity_id, + entity_eye_height, + ticks, + } => { + "entity".encode(&mut w)?; + VarInt(*entity_id).encode(&mut w)?; + entity_eye_height.encode(&mut w)?; + VarInt(*ticks).encode(w) + } + Particle::Shriek { delay } => VarInt(*delay).encode(w), + _ => Ok(()), + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/pick_from_inventory_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/pick_from_inventory_c2s.rs new file mode 100644 index 00000000..55c0ce88 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/pick_from_inventory_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PickFromInventoryC2s { + pub slot_to_use: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/play_ping_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/play_ping_s2c.rs new file mode 100644 index 00000000..8fdf0a35 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/play_ping_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayPingS2c { + pub id: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/play_pong_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/play_pong_c2s.rs new file mode 100644 index 00000000..4aea25a7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/play_pong_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayPongC2s { + pub id: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_from_entity_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_from_entity_s2c.rs new file mode 100644 index 00000000..aa46e34e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_from_entity_s2c.rs @@ -0,0 +1,12 @@ +use crate::sound::SoundCategory; +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlaySoundFromEntityS2c { + pub id: VarInt, + pub category: SoundCategory, + pub entity_id: VarInt, + pub volume: f32, + pub pitch: f32, + pub seed: i64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_s2c.rs new file mode 100644 index 00000000..9e3ac92a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/play_sound_s2c.rs @@ -0,0 +1,14 @@ +use valence_math::IVec3; + +use crate::sound::{SoundCategory, SoundId}; +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct PlaySoundS2c { + pub id: SoundId, + pub category: SoundCategory, + pub position: IVec3, + pub volume: f32, + pub pitch: f32, + pub seed: i64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_abilities_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_abilities_s2c.rs new file mode 100644 index 00000000..9b8f255d --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_abilities_s2c.rs @@ -0,0 +1,22 @@ +use bevy_ecs::prelude::Component; +use bitfield_struct::bitfield; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerAbilitiesS2c { + pub flags: PlayerAbilitiesFlags, + pub flying_speed: f32, + pub fov_modifier: f32, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto, Component)] +pub struct PlayerAbilitiesFlags { + pub invulnerable: bool, + pub flying: bool, + pub allow_flying: bool, + pub instant_break: bool, + #[bits(4)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_action_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_action_c2s.rs new file mode 100644 index 00000000..264bad67 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_action_c2s.rs @@ -0,0 +1,20 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Direction, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerActionC2s { + pub action: PlayerAction, + pub position: BlockPos, + pub direction: Direction, + pub sequence: VarInt, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum PlayerAction { + StartDestroyBlock, + AbortDestroyBlock, + StopDestroyBlock, + DropAllItems, + DropItem, + ReleaseUseItem, + SwapItemWithOffhand, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_action_response_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_action_response_s2c.rs new file mode 100644 index 00000000..7b1dd781 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_action_response_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerActionResponseS2c { + pub sequence: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_input_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_input_c2s.rs new file mode 100644 index 00000000..e0e0a3e8 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_input_c2s.rs @@ -0,0 +1,19 @@ +use bitfield_struct::bitfield; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerInputC2s { + pub sideways: f32, + pub forward: f32, + pub flags: PlayerInputFlags, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct PlayerInputFlags { + pub jump: bool, + pub unmount: bool, + #[bits(6)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_block_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_block_c2s.rs new file mode 100644 index 00000000..546b4496 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_block_c2s.rs @@ -0,0 +1,13 @@ +use valence_math::Vec3; + +use crate::{BlockPos, Decode, DecodeBytesAuto, Direction, Encode, Hand, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerInteractBlockC2s { + pub hand: Hand, + pub position: BlockPos, + pub face: Direction, + pub cursor_pos: Vec3, + pub head_inside_block: bool, + pub sequence: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_entity_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_entity_c2s.rs new file mode 100644 index 00000000..4733bbf9 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_entity_c2s.rs @@ -0,0 +1,17 @@ +use valence_math::Vec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Hand, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerInteractEntityC2s { + pub entity_id: VarInt, + pub interact: EntityInteraction, + pub sneaking: bool, +} + +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum EntityInteraction { + Interact(Hand), + Attack, + InteractAt { target: Vec3, hand: Hand }, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_item_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_item_c2s.rs new file mode 100644 index 00000000..e63fb3c6 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_interact_item_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Hand, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerInteractItemC2s { + pub hand: Hand, + pub sequence: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_list_header_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_list_header_s2c.rs new file mode 100644 index 00000000..19c4d047 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_list_header_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerListHeaderS2c<'a> { + pub header: Cow<'a, Text>, + pub footer: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_list_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_list_s2c.rs new file mode 100644 index 00000000..58ea19c9 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_list_s2c.rs @@ -0,0 +1,136 @@ +use std::borrow::Cow; +use std::io::Write; + +use bitfield_struct::bitfield; +use uuid::Uuid; +use valence_bytes::{Bytes, CowBytes, CowUtf8Bytes}; +use valence_text::Text; + +use crate::profile::Property; +use crate::{DecodeBytes, Encode, GameMode, Packet, VarInt}; + +#[derive(Clone, Debug, Packet)] +pub struct PlayerListS2c<'a> { + pub actions: PlayerListActions, + pub entries: Cow<'a, [PlayerListEntry<'a>]>, +} + +impl<'a> Encode for PlayerListS2c<'a> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + self.actions.0.encode(&mut w)?; + + // Write number of entries. + VarInt(self.entries.len() as i32).encode(&mut w)?; + + for entry in self.entries.as_ref() { + entry.player_uuid.encode(&mut w)?; + + if self.actions.add_player() { + entry.username.encode(&mut w)?; + entry.properties.encode(&mut w)?; + } + + if self.actions.initialize_chat() { + entry.chat_data.encode(&mut w)?; + } + + if self.actions.update_game_mode() { + entry.game_mode.encode(&mut w)?; + } + + if self.actions.update_listed() { + entry.listed.encode(&mut w)?; + } + + if self.actions.update_latency() { + VarInt(entry.ping).encode(&mut w)?; + } + + if self.actions.update_display_name() { + entry.display_name.encode(&mut w)?; + } + } + + Ok(()) + } +} + +impl<'a> DecodeBytes for PlayerListS2c<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let actions = PlayerListActions(u8::decode_bytes(r)?); + + let mut entries = vec![]; + + for _ in 0..VarInt::decode_bytes(r)?.0 { + let mut entry = PlayerListEntry { + player_uuid: Uuid::decode_bytes(r)?, + ..Default::default() + }; + + if actions.add_player() { + entry.username = DecodeBytes::decode_bytes(r)?; + entry.properties = DecodeBytes::decode_bytes(r)?; + } + + if actions.initialize_chat() { + entry.chat_data = DecodeBytes::decode_bytes(r)?; + } + + if actions.update_game_mode() { + entry.game_mode = DecodeBytes::decode_bytes(r)?; + } + + if actions.update_listed() { + entry.listed = DecodeBytes::decode_bytes(r)?; + } + + if actions.update_latency() { + entry.ping = VarInt::decode_bytes(r)?.0; + } + + if actions.update_display_name() { + entry.display_name = DecodeBytes::decode_bytes(r)?; + } + + entries.push(entry); + } + + Ok(Self { + actions, + entries: entries.into(), + }) + } +} + +#[bitfield(u8)] +pub struct PlayerListActions { + pub add_player: bool, + pub initialize_chat: bool, + pub update_game_mode: bool, + pub update_listed: bool, + pub update_latency: bool, + pub update_display_name: bool, + #[bits(2)] + _pad: u8, +} + +#[derive(Clone, Default, Debug)] +pub struct PlayerListEntry<'a> { + pub player_uuid: Uuid, + pub username: CowUtf8Bytes<'a>, + pub properties: Cow<'a, [Property]>, + pub chat_data: Option>, + pub listed: bool, + pub ping: i32, + pub game_mode: GameMode, + pub display_name: Option>, +} + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes)] +pub struct ChatData<'a> { + pub session_id: Uuid, + /// Unix timestamp in milliseconds. + pub key_expiry_time: i64, + pub public_key: CowBytes<'a>, + pub public_key_signature: CowBytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_position_look_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_position_look_s2c.rs new file mode 100644 index 00000000..76c84a0c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_position_look_s2c.rs @@ -0,0 +1,25 @@ +use bitfield_struct::bitfield; +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerPositionLookS2c { + pub position: DVec3, + pub yaw: f32, + pub pitch: f32, + pub flags: PlayerPositionLookFlags, + pub teleport_id: VarInt, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct PlayerPositionLookFlags { + pub x: bool, + pub y: bool, + pub z: bool, + pub y_rot: bool, + pub x_rot: bool, + #[bits(3)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_remove_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_remove_s2c.rs new file mode 100644 index 00000000..cf12943a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_remove_s2c.rs @@ -0,0 +1,10 @@ +use std::borrow::Cow; + +use uuid::Uuid; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerRemoveS2c<'a> { + pub uuids: Cow<'a, [Uuid]>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_respawn_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_respawn_s2c.rs new file mode 100644 index 00000000..1bea98bb --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_respawn_s2c.rs @@ -0,0 +1,18 @@ +use valence_ident::Ident; + +use crate::game_mode::OptGameMode; +use crate::{DecodeBytes, Encode, GameMode, GlobalPos, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes, Packet)] +pub struct PlayerRespawnS2c { + pub dimension_type_name: Ident, + pub dimension_name: Ident, + pub hashed_seed: u64, + pub game_mode: GameMode, + pub previous_game_mode: OptGameMode, + pub is_debug: bool, + pub is_flat: bool, + pub copy_metadata: bool, + pub last_death_location: Option, + pub portal_cooldown: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_session_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_session_c2s.rs new file mode 100644 index 00000000..98b9d666 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_session_c2s.rs @@ -0,0 +1,13 @@ +use uuid::Uuid; +use valence_bytes::CowBytes; + +use crate::{Bounded, DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct PlayerSessionC2s<'a> { + pub session_id: Uuid, + // Public key + pub expires_at: i64, + pub public_key_data: Bounded, 512>, + pub key_signature: Bounded, 4096>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_position_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_position_s2c.rs new file mode 100644 index 00000000..172a6a49 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_position_s2c.rs @@ -0,0 +1,7 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerSpawnPositionS2c { + pub position: BlockPos, + pub angle: f32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_s2c.rs new file mode 100644 index 00000000..e826b23a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/player_spawn_s2c.rs @@ -0,0 +1,27 @@ +use uuid::Uuid; +use valence_math::DVec3; + +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +/// This packet is sent by the server when a player comes into visible range, +/// not when a player joins. +/// +/// This packet must be sent after the Player Info Update packet that adds the +/// player data for the client to use when spawning a player. If the Player Info +/// for the player spawned by this packet is not present when this packet +/// arrives, Notchian clients will not spawn the player entity. The Player Info +/// packet includes skin/cape data. +/// +/// Servers can, however, safely spawn player entities for players not in +/// visible range. The client appears to handle it correctly. +/// +/// wiki : [Spawn Player](https://wiki.vg/Protocol#Spawn_Player) +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct PlayerSpawnS2c { + /// A unique integer ID mostly used in the protocol to identify the player. + pub entity_id: VarInt, + pub player_uuid: Uuid, + pub position: DVec3, + pub yaw: ByteAngle, + pub pitch: ByteAngle, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/position_and_on_ground_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/position_and_on_ground_c2s.rs new file mode 100644 index 00000000..29946bab --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/position_and_on_ground_c2s.rs @@ -0,0 +1,10 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::POSITION_AND_ON_GROUND)] +pub struct PositionAndOnGroundC2s { + pub position: DVec3, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/profileless_chat_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/profileless_chat_message_s2c.rs new file mode 100644 index 00000000..829f2542 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/profileless_chat_message_s2c.rs @@ -0,0 +1,13 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ProfilelessChatMessageS2c<'a> { + pub message: Cow<'a, Text>, + pub chat_type: VarInt, + pub chat_type_name: Cow<'a, Text>, + pub target_name: Option>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/query_block_nbt_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/query_block_nbt_c2s.rs new file mode 100644 index 00000000..8ea1be98 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/query_block_nbt_c2s.rs @@ -0,0 +1,7 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct QueryBlockNbtC2s { + pub transaction_id: VarInt, + pub position: BlockPos, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/query_entity_nbt_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/query_entity_nbt_c2s.rs new file mode 100644 index 00000000..89a033fe --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/query_entity_nbt_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct QueryEntityNbtC2s { + pub transaction_id: VarInt, + pub entity_id: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/recipe_book_data_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/recipe_book_data_c2s.rs new file mode 100644 index 00000000..5b627017 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/recipe_book_data_c2s.rs @@ -0,0 +1,8 @@ +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct RecipeBookDataC2s { + pub recipe_id: Ident, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/recipe_category_options_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/recipe_category_options_c2s.rs new file mode 100644 index 00000000..f19c5bdb --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/recipe_category_options_c2s.rs @@ -0,0 +1,16 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct RecipeCategoryOptionsC2s { + pub book_id: RecipeBookId, + pub book_open: bool, + pub filter_active: bool, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum RecipeBookId { + Crafting, + Furnace, + BlastFurnace, + Smoker, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/remove_entity_status_effect_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/remove_entity_status_effect_s2c.rs new file mode 100644 index 00000000..31f13b9f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/remove_entity_status_effect_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct RemoveEntityStatusEffectS2c { + pub entity_id: VarInt, + pub effect_id: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/remove_message_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/remove_message_s2c.rs new file mode 100644 index 00000000..6e94e6c3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/remove_message_s2c.rs @@ -0,0 +1,7 @@ +use super::chat_message_s2c::MessageSignature; +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct RemoveMessageS2c<'a> { + pub signature: MessageSignature<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/rename_item_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/rename_item_c2s.rs new file mode 100644 index 00000000..54490945 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/rename_item_c2s.rs @@ -0,0 +1,9 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct RenameItemC2s<'a> { + // Surprisingly, this is not bounded as of 1.20.1. + pub item_name: CowUtf8Bytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/request_command_completions_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/request_command_completions_c2s.rs new file mode 100644 index 00000000..6ad1956a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/request_command_completions_c2s.rs @@ -0,0 +1,9 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{Bounded, DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct RequestCommandCompletionsC2s<'a> { + pub transaction_id: VarInt, + pub text: Bounded, 32500>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_send_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_send_s2c.rs new file mode 100644 index 00000000..15defb87 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_send_s2c.rs @@ -0,0 +1,14 @@ +use std::borrow::Cow; + +use valence_bytes::CowUtf8Bytes; +use valence_text::Text; + +use crate::{Bounded, DecodeBytes, Encode, Packet}; + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes, Packet)] +pub struct ResourcePackSendS2c<'a> { + pub url: CowUtf8Bytes<'a>, + pub hash: Bounded, 40>, + pub forced: bool, + pub prompt_message: Option>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_status_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_status_c2s.rs new file mode 100644 index 00000000..6c23d3f3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/resource_pack_status_c2s.rs @@ -0,0 +1,13 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub enum ResourcePackStatusC2s { + /// The client has successfully loaded the server's resource pack. + SuccessfullyLoaded, + /// The client has declined the server's resource pack. + Declined, + /// The client has failed to download the server's resource pack. + FailedDownload, + /// The client has accepted the server's resource pack. + Accepted, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/rotate_and_move_relative_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/rotate_and_move_relative_s2c.rs new file mode 100644 index 00000000..08a71d5b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/rotate_and_move_relative_s2c.rs @@ -0,0 +1,11 @@ +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::ROTATE_AND_MOVE_RELATIVE)] +pub struct RotateAndMoveRelativeS2c { + pub entity_id: VarInt, + pub delta: [i16; 3], + pub yaw: ByteAngle, + pub pitch: ByteAngle, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/rotate_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/rotate_s2c.rs new file mode 100644 index 00000000..cd2d10f2 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/rotate_s2c.rs @@ -0,0 +1,10 @@ +use crate::{ByteAngle, Decode, DecodeBytesAuto, Encode, Packet, VarInt, packet_id}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(id = packet_id::ROTATE)] +pub struct RotateS2c { + pub entity_id: VarInt, + pub yaw: ByteAngle, + pub pitch: ByteAngle, + pub on_ground: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_display_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_display_s2c.rs new file mode 100644 index 00000000..f684acd9 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_display_s2c.rs @@ -0,0 +1,83 @@ +use bevy_ecs::prelude::Component; +use valence_bytes::CowUtf8Bytes; + +use super::team_s2c::TeamColor; +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ScoreboardDisplayS2c<'a> { + pub position: ScoreboardPosition, + pub score_name: CowUtf8Bytes<'a>, +} + +/// Defines where a scoreboard is displayed. +#[derive(Copy, Clone, PartialEq, Eq, Debug, Component, Default, DecodeBytesAuto)] +pub enum ScoreboardPosition { + /// Display the scoreboard in the player list (the one you see when you + /// press tab), as a yellow number next to players' names. + List, + /// Display the scoreboard on the sidebar. + #[default] + Sidebar, + /// Display the scoreboard below players' name tags in the world. + BelowName, + /// Display the scoreboard on the sidebar, visible only to one team. + SidebarTeam(TeamColor), +} + +impl Encode for ScoreboardPosition { + fn encode(&self, w: impl std::io::Write) -> anyhow::Result<()> { + match self { + ScoreboardPosition::List => 0u8.encode(w), + ScoreboardPosition::Sidebar => 1u8.encode(w), + ScoreboardPosition::BelowName => 2u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Black) => 3u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::DarkBlue) => 4u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::DarkGreen) => 5u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::DarkCyan) => 6u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::DarkRed) => 7u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Purple) => 8u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Gold) => 9u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Gray) => 10u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::DarkGray) => 11u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Blue) => 12u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::BrightGreen) => 13u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Cyan) => 14u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Red) => 15u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Pink) => 16u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::Yellow) => 17u8.encode(w), + ScoreboardPosition::SidebarTeam(TeamColor::White) => 18u8.encode(w), + ScoreboardPosition::SidebarTeam(_) => { + Err(anyhow::anyhow!("Invalid scoreboard display position")) + } + } + } +} + +impl Decode for ScoreboardPosition { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let value = u8::decode(r)?; + match value { + 0 => Ok(ScoreboardPosition::List), + 1 => Ok(ScoreboardPosition::Sidebar), + 2 => Ok(ScoreboardPosition::BelowName), + 3 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Black)), + 4 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::DarkBlue)), + 5 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::DarkGreen)), + 6 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::DarkCyan)), + 7 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::DarkRed)), + 8 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Purple)), + 9 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Gold)), + 10 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Gray)), + 11 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::DarkGray)), + 12 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Blue)), + 13 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::BrightGreen)), + 14 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Cyan)), + 15 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Red)), + 16 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Pink)), + 17 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::Yellow)), + 18 => Ok(ScoreboardPosition::SidebarTeam(TeamColor::White)), + _ => Err(anyhow::anyhow!("Invalid scoreboard display position")), + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_objective_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_objective_update_s2c.rs new file mode 100644 index 00000000..3192b10b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_objective_update_s2c.rs @@ -0,0 +1,37 @@ +use std::borrow::Cow; + +use bevy_ecs::prelude::*; +use valence_bytes::CowUtf8Bytes; +use valence_text::Text; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ScoreboardObjectiveUpdateS2c<'a> { + pub objective_name: CowUtf8Bytes<'a>, + pub mode: ObjectiveMode<'a>, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum ObjectiveMode<'a> { + Create { + objective_display_name: Cow<'a, Text>, + render_type: ObjectiveRenderType, + }, + Remove, + Update { + objective_display_name: Cow<'a, Text>, + render_type: ObjectiveRenderType, + }, +} + +#[derive( + Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Component, Default, +)] +pub enum ObjectiveRenderType { + /// Display the value as a number. + #[default] + Integer, + /// Display the value as hearts. + Hearts, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_player_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_player_update_s2c.rs new file mode 100644 index 00000000..9e889af4 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/scoreboard_player_update_s2c.rs @@ -0,0 +1,20 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ScoreboardPlayerUpdateS2c<'a> { + pub entity_name: CowUtf8Bytes<'a>, + pub action: ScoreboardPlayerUpdateAction<'a>, +} + +#[derive(Clone, PartialEq, Debug, Encode, DecodeBytes)] +pub enum ScoreboardPlayerUpdateAction<'a> { + Update { + objective_name: CowUtf8Bytes<'a>, + objective_score: VarInt, + }, + Remove { + objective_name: CowUtf8Bytes<'a>, + }, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_property_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_property_update_s2c.rs new file mode 100644 index 00000000..ae258385 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_property_update_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ScreenHandlerPropertyUpdateS2c { + pub window_id: u8, + pub property: i16, + pub value: i16, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_slot_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_slot_update_s2c.rs new file mode 100644 index 00000000..e23bab6b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/screen_handler_slot_update_s2c.rs @@ -0,0 +1,11 @@ +use std::borrow::Cow; + +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct ScreenHandlerSlotUpdateS2c<'a> { + pub window_id: i8, + pub state_id: VarInt, + pub slot_idx: i16, + pub slot_data: Cow<'a, ItemStack>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/select_advancement_tab_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/select_advancement_tab_s2c.rs new file mode 100644 index 00000000..b95a5fc6 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/select_advancement_tab_s2c.rs @@ -0,0 +1,8 @@ +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct SelectAdvancementTabS2c { + pub identifier: Option, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/select_merchant_trade_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/select_merchant_trade_c2s.rs new file mode 100644 index 00000000..6b13087a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/select_merchant_trade_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SelectMerchantTradeC2s { + pub selected_slot: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/server_metadata_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/server_metadata_s2c.rs new file mode 100644 index 00000000..b6af121a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/server_metadata_s2c.rs @@ -0,0 +1,13 @@ +use std::borrow::Cow; + +use valence_bytes::CowBytes; +use valence_text::Text; + +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct ServerMetadataS2c<'a> { + pub motd: Cow<'a, Text>, + pub icon: Option>, + pub enforce_secure_chat: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/set_camera_entity_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/set_camera_entity_s2c.rs new file mode 100644 index 00000000..58e47e43 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/set_camera_entity_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SetCameraEntityS2c { + pub entity_id: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/set_trade_offers_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/set_trade_offers_s2c.rs new file mode 100644 index 00000000..63ae0d64 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/set_trade_offers_s2c.rs @@ -0,0 +1,25 @@ +use crate::{Decode, DecodeBytesAuto, Encode, ItemStack, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SetTradeOffersS2c { + pub window_id: VarInt, + pub trades: Vec, + pub villager_level: VarInt, + pub experience: VarInt, + pub is_regular_villager: bool, + pub can_restock: bool, +} + +#[derive(Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct TradeOffer { + pub input_one: ItemStack, + pub output_item: ItemStack, + pub input_two: ItemStack, + pub trade_disabled: bool, + pub number_of_trade_uses: i32, + pub max_trade_uses: i32, + pub xp: i32, + pub special_price: i32, + pub price_multiplier: f32, + pub demand: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/sign_editor_open_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/sign_editor_open_s2c.rs new file mode 100644 index 00000000..f2998bf2 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/sign_editor_open_s2c.rs @@ -0,0 +1,6 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SignEditorOpenS2c { + pub location: BlockPos, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/simulation_distance_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/simulation_distance_s2c.rs new file mode 100644 index 00000000..45cae024 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/simulation_distance_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SimulationDistanceS2c { + pub simulation_distance: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/spectator_teleport_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/spectator_teleport_c2s.rs new file mode 100644 index 00000000..ec795700 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/spectator_teleport_c2s.rs @@ -0,0 +1,8 @@ +use uuid::Uuid; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SpectatorTeleportC2s { + pub target: Uuid, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/statistics_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/statistics_s2c.rs new file mode 100644 index 00000000..ebbc0438 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/statistics_s2c.rs @@ -0,0 +1,13 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct StatisticsS2c { + pub statistics: Vec, +} + +#[derive(Copy, Clone, PartialEq, Debug, Encode, Decode, DecodeBytesAuto)] +pub struct Statistic { + pub category_id: VarInt, + pub statistic_id: VarInt, + pub value: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/stop_sound_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/stop_sound_s2c.rs new file mode 100644 index 00000000..10194b59 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/stop_sound_s2c.rs @@ -0,0 +1,52 @@ +use std::io::Write; + +use valence_bytes::Bytes; +use valence_ident::Ident; + +use crate::sound::SoundCategory; +use crate::{DecodeBytes, Encode, Packet}; + +#[derive(Clone, PartialEq, Debug, Packet)] +pub struct StopSoundS2c { + pub source: Option, + pub sound: Option, +} + +impl Encode for StopSoundS2c { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match (self.source, self.sound.as_ref()) { + (Some(source), Some(sound)) => { + 3i8.encode(&mut w)?; + source.encode(&mut w)?; + sound.encode(&mut w)?; + } + (None, Some(sound)) => { + 2i8.encode(&mut w)?; + sound.encode(&mut w)?; + } + (Some(source), None) => { + 1i8.encode(&mut w)?; + source.encode(&mut w)?; + } + _ => 0i8.encode(&mut w)?, + } + + Ok(()) + } +} + +impl DecodeBytes for StopSoundS2c { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let (source, sound) = match i8::decode_bytes(r)? { + 3 => ( + Some(SoundCategory::decode_bytes(r)?), + Some(Ident::decode_bytes(r)?), + ), + 2 => (None, Some(::decode_bytes(r)?)), + 1 => (Some(SoundCategory::decode_bytes(r)?), None), + _ => (None, None), + }; + + Ok(Self { source, sound }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/subtitle_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/subtitle_s2c.rs new file mode 100644 index 00000000..e09a977e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/subtitle_s2c.rs @@ -0,0 +1,10 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct SubtitleS2c<'a> { + pub subtitle_text: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_recipes_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_recipes_s2c.rs new file mode 100644 index 00000000..c65296d5 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_recipes_s2c.rs @@ -0,0 +1,107 @@ +use std::borrow::Cow; +use std::io::Write; + +use anyhow::ensure; +use valence_bytes::CowUtf8Bytes; +use valence_ident::Ident; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, ItemStack, Packet, RawBytes}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct SynchronizeRecipesS2c<'a> { + // TODO: this should be a Vec> + pub recipes: RawBytes<'a>, +} + +#[derive(Clone, Debug, Encode)] +pub struct Recipe<'a> { + pub kind: Ident, + pub recipe_id: Ident, + pub data: RecipeData<'a>, +} + +#[derive(Clone, Debug, Encode)] +pub enum RecipeData<'a> { + CraftingShapeless(CraftingShapedData<'a>), + // TODO: fill in the rest. + CraftingShaped, + CraftingSpecialArmordye, + CraftingSpecialBookcloning, + CraftingSpecialMapcloning, + CraftingSpecialMapextending, + CraftingSpecialFireworkRocket, + CraftingSpecialFireworkStar, + CraftingSpecialFireworkStarFade, + CraftingSpecialRepairitem, + CraftingSpecialTippedarrow, + CraftingSpecialBannerduplicate, + CraftingSpecialShielddecoration, + CraftingSpecialShulkerboxcoloring, + CraftingSpecialSuspiciousStew, + CraftingDecoratedPot, + Smelting, + Blasting, + Smoking, + CampfireCooking, + Stonecutting, + SmithingTransform, + SmithingTrim, +} + +#[derive(Clone, Debug)] +pub struct CraftingShapedData<'a> { + pub width: u32, + pub height: u32, + pub group: CowUtf8Bytes<'a>, + pub category: CraftingShapedCategory, + /// Length must be width * height. + pub ingredients: Cow<'a, [Ingredient<'a>]>, + pub result: ItemStack, + pub show_notification: bool, +} + +impl Encode for CraftingShapedData<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let Self { + width, + height, + group, + category, + ingredients, + result, + show_notification, + } = self; + + width.encode(&mut w)?; + height.encode(&mut w)?; + group.encode(&mut w)?; + category.encode(&mut w)?; + + let len = width + .checked_mul(*height) + .expect("bad shaped recipe dimensions") as usize; + + ensure!( + len == ingredients.len(), + "number of ingredients in shaped recipe must be equal to width * height" + ); + + for ingr in ingredients.as_ref() { + ingr.encode(&mut w)?; + } + + result.encode(&mut w)?; + + show_notification.encode(w) + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum CraftingShapedCategory { + Building, + Redstone, + Equipment, + Misc, +} + +pub type Ingredient<'a> = Cow<'a, [ItemStack]>; diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_tags_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_tags_s2c.rs new file mode 100644 index 00000000..aa10a828 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/synchronize_tags_s2c.rs @@ -0,0 +1,13 @@ +use std::borrow::Cow; +use std::collections::BTreeMap; + +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct SynchronizeTagsS2c<'a> { + pub groups: Cow<'a, RegistryMap>, +} + +pub type RegistryMap = BTreeMap>>; diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/team_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/team_s2c.rs new file mode 100644 index 00000000..39c0c368 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/team_s2c.rs @@ -0,0 +1,233 @@ +use std::borrow::Cow; +use std::io::Write; + +use anyhow::bail; +use bitfield_struct::bitfield; +use valence_bytes::{Bytes, CowUtf8Bytes, Utf8Bytes}; +use valence_text::Text; + +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct TeamS2c<'a> { + pub team_name: CowUtf8Bytes<'a>, + pub mode: Mode<'a>, +} + +#[derive(Clone, PartialEq, Debug)] +pub enum Mode<'a> { + CreateTeam { + team_display_name: Cow<'a, Text>, + friendly_flags: TeamFlags, + name_tag_visibility: NameTagVisibility, + collision_rule: CollisionRule, + team_color: TeamColor, + team_prefix: Cow<'a, Text>, + team_suffix: Cow<'a, Text>, + entities: Vec>, + }, + RemoveTeam, + UpdateTeamInfo { + team_display_name: Cow<'a, Text>, + friendly_flags: TeamFlags, + name_tag_visibility: NameTagVisibility, + collision_rule: CollisionRule, + team_color: TeamColor, + team_prefix: Cow<'a, Text>, + team_suffix: Cow<'a, Text>, + }, + AddEntities { + entities: Vec>, + }, + RemoveEntities { + entities: Vec>, + }, +} + +impl Encode for Mode<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match self { + Mode::CreateTeam { + team_display_name, + friendly_flags, + name_tag_visibility, + collision_rule, + team_color, + team_prefix, + team_suffix, + entities, + } => { + 0i8.encode(&mut w)?; + team_display_name.encode(&mut w)?; + friendly_flags.encode(&mut w)?; + match name_tag_visibility { + NameTagVisibility::Always => "always", + NameTagVisibility::Never => "never", + NameTagVisibility::HideForOtherTeams => "hideForOtherTeams", + NameTagVisibility::HideForOwnTeam => "hideForOwnTeam", + } + .encode(&mut w)?; + match collision_rule { + CollisionRule::Always => "always", + CollisionRule::Never => "never", + CollisionRule::PushOtherTeams => "pushOtherTeams", + CollisionRule::PushOwnTeam => "pushOwnTeam", + } + .encode(&mut w)?; + team_color.encode(&mut w)?; + team_prefix.encode(&mut w)?; + team_suffix.encode(&mut w)?; + entities.encode(&mut w)?; + } + Mode::RemoveTeam => 1i8.encode(&mut w)?, + Mode::UpdateTeamInfo { + team_display_name, + friendly_flags, + name_tag_visibility, + collision_rule, + team_color, + team_prefix, + team_suffix, + } => { + 2i8.encode(&mut w)?; + team_display_name.encode(&mut w)?; + friendly_flags.encode(&mut w)?; + match name_tag_visibility { + NameTagVisibility::Always => "always", + NameTagVisibility::Never => "never", + NameTagVisibility::HideForOtherTeams => "hideForOtherTeams", + NameTagVisibility::HideForOwnTeam => "hideForOwnTeam", + } + .encode(&mut w)?; + match collision_rule { + CollisionRule::Always => "always", + CollisionRule::Never => "never", + CollisionRule::PushOtherTeams => "pushOtherTeams", + CollisionRule::PushOwnTeam => "pushOwnTeam", + } + .encode(&mut w)?; + team_color.encode(&mut w)?; + team_prefix.encode(&mut w)?; + team_suffix.encode(&mut w)?; + } + Mode::AddEntities { entities } => { + 3i8.encode(&mut w)?; + entities.encode(&mut w)?; + } + Mode::RemoveEntities { entities } => { + 4i8.encode(&mut w)?; + entities.encode(&mut w)?; + } + } + Ok(()) + } +} + +impl<'a> DecodeBytes for Mode<'a> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(match i8::decode_bytes(r)? { + 0 => Self::CreateTeam { + team_display_name: DecodeBytes::decode_bytes(r)?, + friendly_flags: DecodeBytes::decode_bytes(r)?, + name_tag_visibility: match Utf8Bytes::decode_bytes(r)?.as_ref() { + "always" => NameTagVisibility::Always, + "never" => NameTagVisibility::Never, + "hideForOtherTeams" => NameTagVisibility::HideForOtherTeams, + "hideForOwnTeam" => NameTagVisibility::HideForOwnTeam, + other => bail!("unknown name tag visibility type \"{other}\""), + }, + collision_rule: match Utf8Bytes::decode_bytes(r)?.as_ref() { + "always" => CollisionRule::Always, + "never" => CollisionRule::Never, + "pushOtherTeams" => CollisionRule::PushOtherTeams, + "pushOwnTeam" => CollisionRule::PushOwnTeam, + other => bail!("unknown collision rule type \"{other}\""), + }, + team_color: DecodeBytes::decode_bytes(r)?, + team_prefix: DecodeBytes::decode_bytes(r)?, + team_suffix: DecodeBytes::decode_bytes(r)?, + entities: DecodeBytes::decode_bytes(r)?, + }, + 1 => Self::RemoveTeam, + 2 => Self::UpdateTeamInfo { + team_display_name: DecodeBytes::decode_bytes(r)?, + friendly_flags: DecodeBytes::decode_bytes(r)?, + name_tag_visibility: match Utf8Bytes::decode_bytes(r)?.as_ref() { + "always" => NameTagVisibility::Always, + "never" => NameTagVisibility::Never, + "hideForOtherTeams" => NameTagVisibility::HideForOtherTeams, + "hideForOwnTeam" => NameTagVisibility::HideForOwnTeam, + other => bail!("unknown name tag visibility type \"{other}\""), + }, + collision_rule: match Utf8Bytes::decode_bytes(r)?.as_ref() { + "always" => CollisionRule::Always, + "never" => CollisionRule::Never, + "pushOtherTeams" => CollisionRule::PushOtherTeams, + "pushOwnTeam" => CollisionRule::PushOwnTeam, + other => bail!("unknown collision rule type \"{other}\""), + }, + team_color: DecodeBytes::decode_bytes(r)?, + team_prefix: DecodeBytes::decode_bytes(r)?, + team_suffix: DecodeBytes::decode_bytes(r)?, + }, + 3 => Self::AddEntities { + entities: DecodeBytes::decode_bytes(r)?, + }, + 4 => Self::RemoveEntities { + entities: DecodeBytes::decode_bytes(r)?, + }, + n => bail!("unknown update teams action of {n}"), + }) + } +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct TeamFlags { + pub friendly_fire: bool, + pub see_invisible_teammates: bool, + #[bits(6)] + _pad: u8, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum NameTagVisibility { + Always, + Never, + HideForOtherTeams, + HideForOwnTeam, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum CollisionRule { + Always, + Never, + PushOtherTeams, + PushOwnTeam, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum TeamColor { + Black, + DarkBlue, + DarkGreen, + DarkCyan, + DarkRed, + Purple, + Gold, + Gray, + DarkGray, + Blue, + BrightGreen, + Cyan, + Red, + Pink, + Yellow, + White, + Obfuscated, + Bold, + Strikethrough, + Underlined, + Italic, + Reset, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/teleport_confirm_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/teleport_confirm_c2s.rs new file mode 100644 index 00000000..1d3c01fa --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/teleport_confirm_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct TeleportConfirmC2s { + pub teleport_id: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/title_fade_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/title_fade_s2c.rs new file mode 100644 index 00000000..f69baf1e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/title_fade_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct TitleFadeS2c { + pub fade_in: i32, + pub stay: i32, + pub fade_out: i32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/title_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/title_s2c.rs new file mode 100644 index 00000000..792866a7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/title_s2c.rs @@ -0,0 +1,10 @@ +use std::borrow::Cow; + +use valence_text::Text; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct TitleS2c<'a> { + pub title_text: Cow<'a, Text>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/unload_chunk_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/unload_chunk_s2c.rs new file mode 100644 index 00000000..83842bd3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/unload_chunk_s2c.rs @@ -0,0 +1,6 @@ +use crate::{ChunkPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UnloadChunkS2c { + pub pos: ChunkPos, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/unlock_recipes_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/unlock_recipes_s2c.rs new file mode 100644 index 00000000..c1527734 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/unlock_recipes_s2c.rs @@ -0,0 +1,70 @@ +use std::io::Write; + +use anyhow::bail; +use valence_bytes::Bytes; +use valence_ident::Ident; + +use crate::{DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, PartialEq, Eq, Debug, Packet)] +pub struct UnlockRecipesS2c { + pub action: UpdateRecipeBookAction, + pub crafting_recipe_book_open: bool, + pub crafting_recipe_book_filter_active: bool, + pub smelting_recipe_book_open: bool, + pub smelting_recipe_book_filter_active: bool, + pub blast_furnace_recipe_book_open: bool, + pub blast_furnace_recipe_book_filter_active: bool, + pub smoker_recipe_book_open: bool, + pub smoker_recipe_book_filter_active: bool, + pub recipe_ids: Vec, +} + +impl DecodeBytes for UnlockRecipesS2c { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let action_id = VarInt::decode_bytes(r)?.0; + + let crafting_recipe_book_open = bool::decode_bytes(r)?; + let crafting_recipe_book_filter_active = bool::decode_bytes(r)?; + let smelting_recipe_book_open = bool::decode_bytes(r)?; + let smelting_recipe_book_filter_active = bool::decode_bytes(r)?; + let blast_furnace_recipe_book_open = bool::decode_bytes(r)?; + let blast_furnace_recipe_book_filter_active = bool::decode_bytes(r)?; + let smoker_recipe_book_open = bool::decode_bytes(r)?; + let smoker_recipe_book_filter_active = bool::decode_bytes(r)?; + let recipe_ids = Vec::decode_bytes(r)?; + + Ok(Self { + action: match action_id { + 0 => UpdateRecipeBookAction::Init { + recipe_ids: Vec::decode_bytes(r)?, + }, + 1 => UpdateRecipeBookAction::Add, + 2 => UpdateRecipeBookAction::Remove, + n => bail!("unknown recipe book action of {n}"), + }, + crafting_recipe_book_open, + crafting_recipe_book_filter_active, + smelting_recipe_book_open, + smelting_recipe_book_filter_active, + blast_furnace_recipe_book_open, + blast_furnace_recipe_book_filter_active, + smoker_recipe_book_open, + smoker_recipe_book_filter_active, + recipe_ids, + }) + } +} + +impl Encode for UnlockRecipesS2c { + fn encode(&self, _w: impl Write) -> anyhow::Result<()> { + todo!() + } +} + +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum UpdateRecipeBookAction { + Init { recipe_ids: Vec }, + Add, + Remove, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_beacon_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_beacon_c2s.rs new file mode 100644 index 00000000..f982a89f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_beacon_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UpdateBeaconC2s { + pub primary_effect: Option, + pub secondary_effect: Option, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_c2s.rs new file mode 100644 index 00000000..2aa70999 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_c2s.rs @@ -0,0 +1,29 @@ +use bitfield_struct::bitfield; +use valence_bytes::CowUtf8Bytes; + +use crate::{BlockPos, Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct UpdateCommandBlockC2s<'a> { + pub position: BlockPos, + pub command: CowUtf8Bytes<'a>, + pub mode: UpdateCommandBlockMode, + pub flags: UpdateCommandBlockFlags, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum UpdateCommandBlockMode { + Sequence, + Auto, + Redstone, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct UpdateCommandBlockFlags { + pub track_output: bool, + pub conditional: bool, + pub automatic: bool, + #[bits(5)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_minecart_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_minecart_c2s.rs new file mode 100644 index 00000000..8c718ece --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_command_block_minecart_c2s.rs @@ -0,0 +1,10 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{DecodeBytes, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct UpdateCommandBlockMinecartC2s<'a> { + pub entity_id: VarInt, + pub command: CowUtf8Bytes<'a>, + pub track_output: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_c2s.rs new file mode 100644 index 00000000..2be3986c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Difficulty, Encode, Packet}; + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UpdateDifficultyC2s { + pub difficulty: Difficulty, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_lock_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_lock_c2s.rs new file mode 100644 index 00000000..119aa0fc --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_difficulty_lock_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UpdateDifficultyLockC2s { + pub locked: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_jigsaw_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_jigsaw_c2s.rs new file mode 100644 index 00000000..86ea63d1 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_jigsaw_c2s.rs @@ -0,0 +1,14 @@ +use valence_bytes::CowUtf8Bytes; +use valence_ident::Ident; + +use crate::{BlockPos, DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct UpdateJigsawC2s<'a> { + pub position: BlockPos, + pub name: Ident, + pub target: Ident, + pub pool: Ident, + pub final_state: CowUtf8Bytes<'a>, + pub joint_type: CowUtf8Bytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_player_abilities_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_player_abilities_c2s.rs new file mode 100644 index 00000000..b2c33a8c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_player_abilities_c2s.rs @@ -0,0 +1,9 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet, PartialEq, Eq)] +pub enum UpdatePlayerAbilitiesC2s { + #[packet(tag = 0b00)] + StopFlying, + #[packet(tag = 0b10)] + StartFlying, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_c2s.rs new file mode 100644 index 00000000..4bdfbfb7 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_c2s.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UpdateSelectedSlotC2s { + pub slot: u16, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_s2c.rs new file mode 100644 index 00000000..feaa329a --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_selected_slot_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct UpdateSelectedSlotS2c { + pub slot: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_sign_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_sign_c2s.rs new file mode 100644 index 00000000..2f26b3c3 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_sign_c2s.rs @@ -0,0 +1,10 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{BlockPos, Bounded, DecodeBytes, Encode, Packet}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct UpdateSignC2s<'a> { + pub position: BlockPos, + pub is_front_text: bool, + pub lines: [Bounded, 384>; 4], +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/update_structure_block_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/update_structure_block_c2s.rs new file mode 100644 index 00000000..e39ce1fc --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/update_structure_block_c2s.rs @@ -0,0 +1,61 @@ +use bitfield_struct::bitfield; +use valence_bytes::CowUtf8Bytes; + +use crate::{BlockPos, Bounded, Decode, DecodeBytes, DecodeBytesAuto, Encode, Packet, VarLong}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +pub struct UpdateStructureBlockC2s<'a> { + pub position: BlockPos, + pub action: Action, + pub mode: Mode, + pub name: CowUtf8Bytes<'a>, + pub offset_xyz: [i8; 3], + pub size_xyz: [i8; 3], + pub mirror: Mirror, + pub rotation: Rotation, + pub metadata: Bounded, 128>, + pub integrity: f32, + pub seed: VarLong, + pub flags: Flags, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Action { + UpdateData, + SaveStructure, + LoadStructure, + DetectSize, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Mode { + Save, + Load, + Corner, + Data, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Mirror { + None, + LeftRight, + FrontBack, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum Rotation { + None, + Clockwise90, + Clockwise180, + Counterclockwise90, +} + +#[bitfield(u8)] +#[derive(PartialEq, Eq, Encode, Decode, DecodeBytesAuto)] +pub struct Flags { + pub ignore_entities: bool, + pub show_air: bool, + pub show_bounding_box: bool, + #[bits(5)] + _pad: u8, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_c2s.rs new file mode 100644 index 00000000..a19a674f --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_c2s.rs @@ -0,0 +1,10 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct VehicleMoveC2s { + pub position: DVec3, + pub yaw: f32, + pub pitch: f32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_s2c.rs new file mode 100644 index 00000000..50a6f987 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/vehicle_move_s2c.rs @@ -0,0 +1,10 @@ +use valence_math::DVec3; + +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct VehicleMoveS2c { + pub position: DVec3, + pub yaw: f32, + pub pitch: f32, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_center_changed_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_center_changed_s2c.rs new file mode 100644 index 00000000..a5072a24 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_center_changed_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderCenterChangedS2c { + pub x_pos: f64, + pub z_pos: f64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_initialize_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_initialize_s2c.rs new file mode 100644 index 00000000..4c1baee8 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_initialize_s2c.rs @@ -0,0 +1,13 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt, VarLong}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderInitializeS2c { + pub x: f64, + pub z: f64, + pub old_diameter: f64, + pub new_diameter: f64, + pub duration_millis: VarLong, + pub portal_teleport_boundary: VarInt, + pub warning_blocks: VarInt, + pub warning_time: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_interpolate_size_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_interpolate_size_s2c.rs new file mode 100644 index 00000000..3bfe9e48 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_interpolate_size_s2c.rs @@ -0,0 +1,8 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarLong}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderInterpolateSizeS2c { + pub old_diameter: f64, + pub new_diameter: f64, + pub duration_millis: VarLong, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_size_changed_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_size_changed_s2c.rs new file mode 100644 index 00000000..5ea501b4 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_size_changed_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderSizeChangedS2c { + pub diameter: f64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_blocks_changed_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_blocks_changed_s2c.rs new file mode 100644 index 00000000..6f399510 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_blocks_changed_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderWarningBlocksChangedS2c { + pub warning_blocks: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_time_changed_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_time_changed_s2c.rs new file mode 100644 index 00000000..db0d5481 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_border_warning_time_changed_s2c.rs @@ -0,0 +1,6 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, VarInt}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldBorderWarningTimeChangedS2c { + pub warning_time: VarInt, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_event_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_event_s2c.rs new file mode 100644 index 00000000..866d6d2e --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_event_s2c.rs @@ -0,0 +1,9 @@ +use crate::{BlockPos, Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldEventS2c { + pub event: i32, + pub location: BlockPos, + pub data: i32, + pub disable_relative_volume: bool, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/play/world_time_update_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/play/world_time_update_s2c.rs new file mode 100644 index 00000000..a8f75edf --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/play/world_time_update_s2c.rs @@ -0,0 +1,11 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +pub struct WorldTimeUpdateS2c { + /// The age of the world in 1/20ths of a second. + pub world_age: i64, + /// The current time of day in 1/20ths of a second. + /// The value should be in the range \[0, 24000]. + /// 6000 is noon, 12000 is sunset, and 18000 is midnight. + pub time_of_day: i64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/status.rs b/vendor/valence/crates/valence_protocol/src/packets/status.rs new file mode 100644 index 00000000..c5d584ae --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/status.rs @@ -0,0 +1,2 @@ +use super::*; + diff --git a/vendor/valence/crates/valence_protocol/src/packets/status/query_ping_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/status/query_ping_c2s.rs new file mode 100644 index 00000000..1720318c --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/status/query_ping_c2s.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, PacketState}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(state = PacketState::Status)] +pub struct QueryPingC2s { + pub payload: u64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/status/query_pong_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/status/query_pong_s2c.rs new file mode 100644 index 00000000..a848881b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/status/query_pong_s2c.rs @@ -0,0 +1,7 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, PacketState}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(state = PacketState::Status)] +pub struct QueryPongS2c { + pub payload: u64, +} diff --git a/vendor/valence/crates/valence_protocol/src/packets/status/query_request_c2s.rs b/vendor/valence/crates/valence_protocol/src/packets/status/query_request_c2s.rs new file mode 100644 index 00000000..60a305c0 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/status/query_request_c2s.rs @@ -0,0 +1,5 @@ +use crate::{Decode, DecodeBytesAuto, Encode, Packet, PacketState}; + +#[derive(Copy, Clone, Debug, Encode, Decode, DecodeBytesAuto, Packet)] +#[packet(state = PacketState::Status)] +pub struct QueryRequestC2s; diff --git a/vendor/valence/crates/valence_protocol/src/packets/status/query_response_s2c.rs b/vendor/valence/crates/valence_protocol/src/packets/status/query_response_s2c.rs new file mode 100644 index 00000000..d2fa4767 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/packets/status/query_response_s2c.rs @@ -0,0 +1,9 @@ +use valence_bytes::CowUtf8Bytes; + +use crate::{DecodeBytes, Encode, Packet, PacketState}; + +#[derive(Clone, Debug, Encode, DecodeBytes, Packet)] +#[packet(state = PacketState::Status)] +pub struct QueryResponseS2c<'a> { + pub json: CowUtf8Bytes<'a>, +} diff --git a/vendor/valence/crates/valence_protocol/src/profile.rs b/vendor/valence/crates/valence_protocol/src/profile.rs new file mode 100644 index 00000000..9ad87d53 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/profile.rs @@ -0,0 +1,59 @@ +use base64::prelude::*; +use serde::{Deserialize, Serialize}; +use url::Url; +use valence_bytes::Utf8Bytes; + +use crate::{DecodeBytes, Encode}; + +/// A property from the game profile. +#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize, Encode, DecodeBytes)] +pub struct Property { + pub name: S, + pub value: S, + pub signature: Option, +} + +/// Contains URLs to the skin and cape of a player. +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct PlayerTextures { + /// URL to the player's skin texture. + pub skin: Url, + /// URL to the player's cape texture. May be absent if the player does not + /// have a cape. + pub cape: Option, +} + +impl PlayerTextures { + /// Constructs player textures from the "textures" property of the game + /// profile. + /// + /// "textures" is a base64 string of JSON data. + pub fn try_from_textures(textures: &str) -> anyhow::Result { + #[derive(Debug, Deserialize)] + struct Textures { + textures: PlayerTexturesPayload, + } + + #[derive(Debug, Deserialize)] + #[serde(rename_all = "UPPERCASE")] + struct PlayerTexturesPayload { + skin: TextureUrl, + #[serde(default)] + cape: Option, + } + + #[derive(Debug, Deserialize)] + struct TextureUrl { + url: Url, + } + + let decoded = BASE64_STANDARD.decode(textures.as_bytes())?; + + let Textures { textures } = serde_json::from_slice(&decoded)?; + + Ok(Self { + skin: textures.skin.url, + cape: textures.cape.map(|t| t.url), + }) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/raw.rs b/vendor/valence/crates/valence_protocol/src/raw.rs new file mode 100644 index 00000000..03b4a394 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/raw.rs @@ -0,0 +1,60 @@ +use std::io::Write; +use std::mem; + +use anyhow::ensure; +use derive_more::{Deref, DerefMut, From, Into}; +use valence_bytes::{Bytes, CowBytes}; + +use crate::{Bounded, DecodeBytes, Encode}; + +/// While [encoding], the contained slice is written directly to the output +/// without any length prefix or metadata. +/// +/// While [decoding], the remainder of the input is returned as the contained +/// slice. The input will be at the EOF state after this is decoded. +/// +/// [encoding]: Encode +/// [decoding]: crate::DecodeBytes +#[derive( + Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug, Deref, DerefMut, From, Into, +)] +pub struct RawBytes<'a>(pub CowBytes<'a>); + +impl Encode for RawBytes<'_> { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + Ok(w.write_all(&self.0)?) + } +} + +impl DecodeBytes for RawBytes<'_> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + Ok(Self(mem::take(r).into())) + } +} + +/// Raises an encoding error if the inner slice is longer than `MAX_BYTES`. +impl Encode for Bounded, MAX_BYTES> { + fn encode(&self, w: impl Write) -> anyhow::Result<()> { + ensure!( + self.len() <= MAX_BYTES, + "cannot encode more than {MAX_BYTES} raw bytes (got {} bytes)", + self.len() + ); + + self.0.encode(w) + } +} + +/// Raises a decoding error if the remainder of the input is larger than +/// `MAX_BYTES`. +impl DecodeBytes for Bounded, MAX_BYTES> { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + ensure!( + r.len() <= MAX_BYTES, + "remainder of input exceeds max of {MAX_BYTES} bytes (got {} bytes)", + r.len() + ); + + Ok(Bounded(RawBytes::decode_bytes(r)?)) + } +} diff --git a/vendor/valence/crates/valence_protocol/src/sound.rs b/vendor/valence/crates/valence_protocol/src/sound.rs new file mode 100644 index 00000000..5dca149b --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/sound.rs @@ -0,0 +1,58 @@ +use std::io::Write; + +use bytes::Bytes; +pub use valence_generated::sound::Sound; +use valence_ident::Ident; + +use crate::var_int::VarInt; +use crate::{Decode, DecodeBytes, DecodeBytesAuto, Encode}; + +#[derive(Clone, PartialEq, Debug)] +pub enum SoundId { + Direct { id: Ident, range: Option }, + Reference { id: VarInt }, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Encode, Decode, DecodeBytesAuto)] +pub enum SoundCategory { + Master, + Music, + Record, + Weather, + Block, + Hostile, + Neutral, + Player, + Ambient, + Voice, +} + +impl Encode for SoundId { + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + match self { + SoundId::Direct { id, range } => { + VarInt(0).encode(&mut w)?; + id.encode(&mut w)?; + range.encode(&mut w)?; + } + SoundId::Reference { id } => VarInt(id.0 + 1).encode(&mut w)?, + } + + Ok(()) + } +} + +impl DecodeBytes for SoundId { + fn decode_bytes(r: &mut Bytes) -> anyhow::Result { + let i = VarInt::decode_bytes(r)?.0; + + if i == 0 { + Ok(SoundId::Direct { + id: Ident::decode_bytes(r)?, + range: >::decode_bytes(r)?, + }) + } else { + Ok(SoundId::Reference { id: VarInt(i - 1) }) + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/var_int.rs b/vendor/valence/crates/valence_protocol/src/var_int.rs new file mode 100644 index 00000000..6a01f14d --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/var_int.rs @@ -0,0 +1,155 @@ +use std::io::{Read, Write}; + +use anyhow::bail; +use byteorder::ReadBytesExt; +use derive_more::{Deref, DerefMut, From, Into}; +use serde::{Deserialize, Serialize}; +use thiserror::Error; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// An `i32` encoded with variable length. +#[derive( + Clone, + Copy, + Default, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Debug, + Deref, + DerefMut, + From, + Into, + Serialize, + Deserialize, + DecodeBytesAuto, +)] +#[serde(transparent)] +#[repr(transparent)] +pub struct VarInt(pub i32); + +impl VarInt { + /// The maximum number of bytes a VarInt could occupy when read from and + /// written to the Minecraft protocol. + pub const MAX_SIZE: usize = 5; + + /// Returns the exact number of bytes this varint will write when + /// [`Encode::encode`] is called, assuming no error occurs. + pub const fn written_size(self) -> usize { + match self.0 { + 0 => 1, + n => (31 - n.leading_zeros() as usize) / 7 + 1, + } + } + + pub fn decode_partial(mut r: impl Read) -> Result { + let mut val = 0; + for i in 0..Self::MAX_SIZE { + let byte = r.read_u8().map_err(|_| VarIntDecodeError::Incomplete)?; + val |= (byte as i32 & 0b01111111) << (i * 7); + if byte & 0b10000000 == 0 { + return Ok(val); + } + } + + Err(VarIntDecodeError::TooLarge) + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug, Error)] +pub enum VarIntDecodeError { + #[error("incomplete VarInt decode")] + Incomplete, + #[error("VarInt is too large")] + TooLarge, +} + +impl Encode for VarInt { + // Adapted from VarInt-Simd encode + // https://github.com/as-com/varint-simd/blob/0f468783da8e181929b01b9c6e9f741c1fe09825/src/encode/mod.rs#L71 + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + let x = self.0 as u64; + let stage1 = (x & 0x000000000000007f) + | ((x & 0x0000000000003f80) << 1) + | ((x & 0x00000000001fc000) << 2) + | ((x & 0x000000000fe00000) << 3) + | ((x & 0x00000000f0000000) << 4); + + let leading = stage1.leading_zeros(); + + let unused_bytes = (leading - 1) >> 3; + let bytes_needed = 8 - unused_bytes; + + // set all but the last MSBs + let msbs = 0x8080808080808080; + let msbmask = 0xffffffffffffffff >> (((8 - bytes_needed + 1) << 3) - 1); + + let merged = stage1 | (msbs & msbmask); + let bytes = merged.to_le_bytes(); + + w.write_all(unsafe { bytes.get_unchecked(..bytes_needed as usize) })?; + + Ok(()) + } +} + +impl Decode for VarInt { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let mut val = 0; + for i in 0..Self::MAX_SIZE { + let byte = r.read_u8()?; + val |= (byte as i32 & 0b01111111) << (i * 7); + if byte & 0b10000000 == 0 { + return Ok(VarInt(val)); + } + } + bail!("VarInt is too large") + } +} + +#[cfg(test)] +mod tests { + use rand::{Rng, rng}; + + use super::*; + + #[test] + fn varint_written_size() { + let mut rng = rng(); + let mut buf = vec![]; + + for n in (0..100_000) + .map(|_| rng.random()) + .chain([0, i32::MIN, i32::MAX]) + .map(VarInt) + { + buf.clear(); + n.encode(&mut buf).unwrap(); + assert_eq!(buf.len(), n.written_size()); + } + } + + #[test] + fn varint_round_trip() { + let mut rng = rng(); + let mut buf = vec![]; + + for n in (0..1_000_000) + .map(|_| rng.random()) + .chain([0, i32::MIN, i32::MAX]) + { + VarInt(n).encode(&mut buf).unwrap(); + + let mut slice = buf.as_slice(); + assert!(slice.len() <= VarInt::MAX_SIZE); + + assert_eq!(n, VarInt::decode(&mut slice).unwrap().0); + + assert!(slice.is_empty()); + buf.clear(); + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/var_long.rs b/vendor/valence/crates/valence_protocol/src/var_long.rs new file mode 100644 index 00000000..0837b9a4 --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/var_long.rs @@ -0,0 +1,156 @@ +use std::io::Write; + +use anyhow::bail; +use byteorder::ReadBytesExt; +use derive_more::{From, Into}; +use serde::{Deserialize, Serialize}; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// An `i64` encoded with variable length. +#[derive( + Clone, + Copy, + Default, + PartialEq, + Eq, + PartialOrd, + Ord, + Hash, + Debug, + From, + Into, + Serialize, + Deserialize, + DecodeBytesAuto, +)] +#[serde(transparent)] +#[repr(transparent)] +pub struct VarLong(pub i64); + +impl VarLong { + /// The maximum number of bytes a `VarLong` can occupy when read from and + /// written to the Minecraft protocol. + pub const MAX_SIZE: usize = 10; + + /// Returns the exact number of bytes this varlong will write when + /// [`Encode::encode`] is called, assuming no error occurs. + pub fn written_size(self) -> usize { + match self.0 { + 0 => 1, + n => (63 - n.leading_zeros() as usize) / 7 + 1, + } + } +} + +impl Encode for VarLong { + // Adapted from VarInt-Simd encode + // https://github.com/as-com/varint-simd/blob/0f468783da8e181929b01b9c6e9f741c1fe09825/src/encode/mod.rs#L71 + #[cfg(all( + any(target_arch = "x86", target_arch = "x86_64"), + not(target_os = "macos") + ))] + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + #[cfg(target_arch = "x86")] + use std::arch::x86::*; + #[cfg(target_arch = "x86_64")] + use std::arch::x86_64::*; + + // Break the number into 7-bit parts and spread them out into a vector + let mut res = [0u64; 2]; + { + let x = self.0 as u64; + + res[0] = unsafe { _pdep_u64(x, 0x7f7f7f7f7f7f7f7f) }; + res[1] = unsafe { _pdep_u64(x >> 56, 0x000000000000017f) }; + } + let stage1: __m128i = unsafe { std::mem::transmute(res) }; + + // Create a mask for where there exist values + // This signed comparison works because all MSBs should be cleared at this point + // Also handle the special case when num == 0 + let minimum = + unsafe { _mm_set_epi8(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xffu8 as i8) }; + let exists = unsafe { _mm_or_si128(_mm_cmpgt_epi8(stage1, _mm_setzero_si128()), minimum) }; + let bits = unsafe { _mm_movemask_epi8(exists) }; + + // Count the number of bytes used + let bytes_needed = 32 - bits.leading_zeros() as u8; // lzcnt on supported CPUs + + // Fill that many bytes into a vector + let ascend = unsafe { _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) }; + let mask = unsafe { _mm_cmplt_epi8(ascend, _mm_set1_epi8(bytes_needed as i8)) }; + + // Shift it down 1 byte so the last MSB is the only one set, and make sure only + // the MSB is set + let shift = unsafe { _mm_bsrli_si128(mask, 1) }; + let msbmask = unsafe { _mm_and_si128(shift, _mm_set1_epi8(128u8 as i8)) }; + + // Merge the MSB bits into the vector + let merged = unsafe { _mm_or_si128(stage1, msbmask) }; + let bytes = unsafe { std::mem::transmute::<__m128i, [u8; 16]>(merged) }; + + w.write_all(unsafe { bytes.get_unchecked(..bytes_needed as usize) })?; + + Ok(()) + } + + #[cfg(any( + not(any(target_arch = "x86", target_arch = "x86_64")), + target_os = "macos" + ))] + fn encode(&self, mut w: impl Write) -> anyhow::Result<()> { + use byteorder::WriteBytesExt; + + let mut val = self.0 as u64; + loop { + if val & 0b1111111111111111111111111111111111111111111111111111111110000000 == 0 { + w.write_u8(val as u8)?; + return Ok(()); + } + w.write_u8(val as u8 & 0b01111111 | 0b10000000)?; + val >>= 7; + } + } +} + +impl Decode for VarLong { + fn decode(r: &mut &[u8]) -> anyhow::Result { + let mut val = 0; + for i in 0..Self::MAX_SIZE { + let byte = r.read_u8()?; + val |= (byte as i64 & 0b01111111) << (i * 7); + if byte & 0b10000000 == 0 { + return Ok(VarLong(val)); + } + } + bail!("VarInt is too large") + } +} + +#[cfg(test)] +mod tests { + use rand::{Rng, rng}; + + use super::*; + + #[test] + fn encode_decode() { + let mut rng = rng(); + let mut buf = vec![]; + + for n in (0..1_000_000) + .map(|_| rng.random()) + .chain([0, i64::MIN, i64::MAX]) + { + VarLong(n).encode(&mut buf).unwrap(); + + let mut slice = buf.as_slice(); + assert!(slice.len() <= VarLong::MAX_SIZE); + + assert_eq!(n, VarLong::decode(&mut slice).unwrap().0); + assert!(slice.is_empty()); + buf.clear(); + } + } +} diff --git a/vendor/valence/crates/valence_protocol/src/velocity.rs b/vendor/valence/crates/valence_protocol/src/velocity.rs new file mode 100644 index 00000000..42dbfebf --- /dev/null +++ b/vendor/valence/crates/valence_protocol/src/velocity.rs @@ -0,0 +1,54 @@ +use std::fmt; + +use derive_more::{From, Into}; + +use crate::{Decode, DecodeBytesAuto, Encode}; + +/// Quantized entity velocity. +#[derive(Copy, Clone, PartialEq, Eq, Encode, Decode, DecodeBytesAuto, From, Into)] +pub struct Velocity(pub [i16; 3]); + +impl Velocity { + /// From meters/second. + pub fn from_ms_f32(ms: [f32; 3]) -> Self { + Self(ms.map(|v| (8000.0 / 20.0 * v) as i16)) + } + + /// From meters/second. + pub fn from_ms_f64(ms: [f64; 3]) -> Self { + Self(ms.map(|v| (8000.0 / 20.0 * v) as i16)) + } + + /// To meters/second. + pub fn to_ms_f32(self) -> [f32; 3] { + self.0.map(|v| v as f32 / (8000.0 / 20.0)) + } + + /// To meters/second. + pub fn to_ms_f64(self) -> [f64; 3] { + self.0.map(|v| v as f64 / (8000.0 / 20.0)) + } +} + +impl fmt::Debug for Velocity { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Velocity { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let [x, y, z] = self.to_ms_f32(); + write!(f, "⟨{x},{y},{z}⟩ m/s") + } +} + +#[cfg(test)] +#[test] +fn velocity_from_ms() { + let val_1 = Velocity::from_ms_f32([(); 3].map(|_| -3.3575)).0[0]; + let val_2 = Velocity::from_ms_f64([(); 3].map(|_| -3.3575)).0[0]; + + assert_eq!(val_1, val_2); + assert_eq!(val_1, -1343); +} diff --git a/vendor/valence/crates/valence_protocol_macros/Cargo.toml b/vendor/valence/crates/valence_protocol_macros/Cargo.toml new file mode 100644 index 00000000..5f9bf935 --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "valence_protocol_macros" +description = "Procedural macros for valence_protocol" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[lib] +proc-macro = true + +[dependencies] +proc-macro2.workspace = true +quote.workspace = true +syn = { workspace = true, features = ["full"] } +heck.workspace = true diff --git a/vendor/valence/crates/valence_protocol_macros/README.md b/vendor/valence/crates/valence_protocol_macros/README.md new file mode 100644 index 00000000..fc74027c --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/README.md @@ -0,0 +1,3 @@ +# valence_protocol_macros + +Procedural macros for `valence_protocol` diff --git a/vendor/valence/crates/valence_protocol_macros/src/decode.rs b/vendor/valence/crates/valence_protocol_macros/src/decode.rs new file mode 100644 index 00000000..1e54fd7e --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/src/decode.rs @@ -0,0 +1,337 @@ +use proc_macro2::TokenStream; +use quote::quote; +use syn::punctuated::Punctuated; +use syn::spanned::Spanned; +use syn::{ + Data, DeriveInput, Error, Fields, PredicateType, Result, Token, TraitBound, TraitBoundModifier, + TypeParamBound, WhereClause, WherePredicate, parse_quote, parse2, +}; + +use crate::{add_trait_bounds, pair_variants_with_discriminants}; + +pub(super) fn derive_decode(item: TokenStream) -> Result { + let mut input = parse2::(item)?; + + let input_name = input.ident; + + match input.data { + Data::Struct(struct_) => { + let decode_fields = match struct_.fields { + Fields::Named(fields) => { + let init = fields.named.iter().map(|f| { + let name = f.ident.as_ref().unwrap(); + let ctx = format!("failed to decode field `{name}` in `{input_name}`"); + quote! { + #name: Decode::decode(_r).context(#ctx)?, + } + }); + + quote! { + Self { + #(#init)* + } + } + } + Fields::Unnamed(fields) => { + let init = (0..fields.unnamed.len()) + .map(|i| { + let ctx = format!("failed to decode field `{i}` in `{input_name}`"); + quote! { + Decode::decode(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + Self(#init) + } + } + Fields::Unit => quote!(Self), + }; + + add_trait_bounds( + &mut input.generics, + quote!(::valence_protocol::__private::Decode), + ); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + Ok(quote! { + #[allow(unused_imports)] + impl #impl_generics ::valence_protocol::__private::Decode for #input_name #ty_generics + #where_clause + { + fn decode(_r: &mut &[u8]) -> ::valence_protocol::__private::Result { + use ::valence_protocol::__private::{Decode, Context, ensure}; + + Ok(#decode_fields) + } + } + }) + } + Data::Enum(enum_) => { + let variants = pair_variants_with_discriminants(enum_.variants)?; + + let decode_arms = variants + .iter() + .map(|(disc, variant)| { + let name = &variant.ident; + + match &variant.fields { + Fields::Named(fields) => { + let fields = fields + .named + .iter() + .map(|f| { + let field = f.ident.as_ref().unwrap(); + let ctx = format!( + "failed to decode field `{field}` in variant `{name}` in \ + `{input_name}`", + ); + quote! { + #field: Decode::decode(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + #disc => Ok(Self::#name { #fields }), + } + } + Fields::Unnamed(fields) => { + let init = (0..fields.unnamed.len()) + .map(|i| { + let ctx = format!( + "failed to decode field `{i}` in variant `{name}` in \ + `{input_name}`", + ); + quote! { + Decode::decode(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + #disc => Ok(Self::#name(#init)), + } + } + Fields::Unit => quote!(#disc => Ok(Self::#name),), + } + }) + .collect::(); + + add_trait_bounds( + &mut input.generics, + quote!(::valence_protocol::__private::Decode), + ); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + Ok(quote! { + #[allow(unused_imports)] + impl #impl_generics ::valence_protocol::__private::Decode for #input_name #ty_generics + #where_clause + { + fn decode(_r: &mut &[u8]) -> ::valence_protocol::__private::Result { + use ::valence_protocol::__private::{Decode, Context, VarInt, bail}; + + let ctx = concat!("failed to decode enum discriminant in `", stringify!(#input_name), "`"); + let disc = VarInt::decode(_r).context(ctx)?.0; + match disc { + #decode_arms + n => bail!("unexpected enum discriminant {} in `{}`", disc, stringify!(#input_name)), + } + } + } + }) + } + Data::Union(u) => Err(Error::new( + u.union_token.span(), + "cannot derive `Decode` on unions", + )), + } +} + +pub(super) fn derive_decode_bytes(item: TokenStream) -> Result { + let mut input = parse2::(item)?; + + let input_name = input.ident; + + match input.data { + Data::Struct(struct_) => { + let decode_fields = match struct_.fields { + Fields::Named(fields) => { + let init = fields.named.iter().map(|f| { + let name = f.ident.as_ref().unwrap(); + let ctx = format!("failed to decode field `{name}` in `{input_name}`"); + quote! { + #name: DecodeBytes::decode_bytes(_r).context(#ctx)?, + } + }); + + quote! { + Self { + #(#init)* + } + } + } + Fields::Unnamed(fields) => { + let init = (0..fields.unnamed.len()) + .map(|i| { + let ctx = format!("failed to decode field `{i}` in `{input_name}`"); + quote! { + DecodeBytes::decode_bytes(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + Self(#init) + } + } + Fields::Unit => quote!(Self), + }; + + add_trait_bounds( + &mut input.generics, + quote!(::valence_protocol::__private::DecodeBytes), + ); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + Ok(quote! { + #[allow(unused_imports)] + impl #impl_generics ::valence_protocol::__private::DecodeBytes for #input_name #ty_generics + #where_clause + { + fn decode_bytes(_r: &mut ::valence_protocol::__private::Bytes) -> ::valence_protocol::__private::Result { + use ::valence_protocol::__private::{DecodeBytes, Context, ensure}; + + Ok(#decode_fields) + } + } + }) + } + Data::Enum(enum_) => { + let variants = pair_variants_with_discriminants(enum_.variants)?; + + let decode_arms = variants + .iter() + .map(|(disc, variant)| { + let name = &variant.ident; + + match &variant.fields { + Fields::Named(fields) => { + let fields = fields + .named + .iter() + .map(|f| { + let field = f.ident.as_ref().unwrap(); + let ctx = format!( + "failed to decode field `{field}` in variant `{name}` in \ + `{input_name}`", + ); + quote! { + #field: DecodeBytes::decode_bytes(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + #disc => Ok(Self::#name { #fields }), + } + } + Fields::Unnamed(fields) => { + let init = (0..fields.unnamed.len()) + .map(|i| { + let ctx = format!( + "failed to decode field `{i}` in variant `{name}` in \ + `{input_name}`", + ); + quote! { + DecodeBytes::decode_bytes(_r).context(#ctx)?, + } + }) + .collect::(); + + quote! { + #disc => Ok(Self::#name(#init)), + } + } + Fields::Unit => quote!(#disc => Ok(Self::#name),), + } + }) + .collect::(); + + add_trait_bounds( + &mut input.generics, + quote!(::valence_protocol::__private::DecodeBytes), + ); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + Ok(quote! { + #[allow(unused_imports)] + impl #impl_generics ::valence_protocol::__private::DecodeBytes for #input_name #ty_generics + #where_clause + { + fn decode_bytes(_r: &mut ::valence_protocol::__private::Bytes) -> ::valence_protocol::__private::Result { + use ::valence_protocol::__private::{DecodeBytes, Context, VarInt, bail}; + + let ctx = concat!("failed to decode enum discriminant in `", stringify!(#input_name), "`"); + let disc = VarInt::decode_bytes(_r).context(ctx)?.0; + match disc { + #decode_arms + n => bail!("unexpected enum discriminant {} in `{}`", disc, stringify!(#input_name)), + } + } + } + }) + } + Data::Union(u) => Err(Error::new( + u.union_token.span(), + "cannot derive `DecodeBytes` on unions", + )), + } +} + +pub(super) fn derive_decode_bytes_auto(item: TokenStream) -> Result { + let input = parse2::(item)?; + + let input_name = input.ident; + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + let mut where_clause = where_clause.cloned().unwrap_or_else(|| WhereClause { + where_token: ::default(), + predicates: Punctuated::new(), + }); + + // Require the type to implement Decode + where_clause + .predicates + .push(WherePredicate::Type(PredicateType { + lifetimes: None, + bounded_ty: parse_quote!(#input_name #ty_generics), + colon_token: ::default(), + bounds: Punctuated::from_iter(std::iter::once(TypeParamBound::Trait(TraitBound { + paren_token: None, + modifier: TraitBoundModifier::None, + lifetimes: None, + path: parse_quote!(::valence_protocol::__private::Decode), + }))), + })); + + Ok(quote! { + impl #impl_generics ::valence_protocol::__private::DecodeBytes for #input_name #ty_generics + #where_clause + { + fn decode_bytes(r: &mut ::valence_protocol::__private::Bytes) -> ::valence_protocol::__private::Result { + ::valence_protocol::__private::decode_bytes_auto(r) + } + + fn decode_from_owned(r: T) -> ::anyhow::Result<(Self, usize)> where T: ::std::convert::AsRef<[u8]> + ::std::marker::Send + 'static { + ::decode_and_len(r.as_ref()) + } + } + }) +} diff --git a/vendor/valence/crates/valence_protocol_macros/src/encode.rs b/vendor/valence/crates/valence_protocol_macros/src/encode.rs new file mode 100644 index 00000000..1e927008 --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/src/encode.rs @@ -0,0 +1,165 @@ +use proc_macro2::{Ident, Span, TokenStream}; +use quote::quote; +use syn::spanned::Spanned; +use syn::{Data, DeriveInput, Error, Fields, LitInt, Result, parse2}; + +use crate::{add_trait_bounds, pair_variants_with_discriminants}; + +pub(super) fn derive_encode(item: TokenStream) -> Result { + let mut input = parse2::(item)?; + + let input_name = input.ident; + + add_trait_bounds( + &mut input.generics, + quote!(::valence_protocol::__private::Encode), + ); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + match input.data { + Data::Struct(struct_) => { + let encode_fields = match &struct_.fields { + Fields::Named(fields) => fields + .named + .iter() + .map(|f| { + let name = &f.ident.as_ref().unwrap(); + let ctx = format!("failed to encode field `{name}` in `{input_name}`"); + quote! { + self.#name.encode(&mut _w).context(#ctx)?; + } + }) + .collect(), + Fields::Unnamed(fields) => (0..fields.unnamed.len()) + .map(|i| { + let lit = LitInt::new(&i.to_string(), Span::call_site()); + let ctx = format!("failed to encode field `{lit}` in `{input_name}`"); + quote! { + self.#lit.encode(&mut _w).context(#ctx)?; + } + }) + .collect(), + Fields::Unit => TokenStream::new(), + }; + + Ok(quote! { + #[allow(unused_imports)] + impl #impl_generics ::valence_protocol::__private::Encode for #input_name #ty_generics + #where_clause + { + fn encode(&self, mut _w: impl ::std::io::Write) -> ::valence_protocol::__private::Result<()> { + use ::valence_protocol::__private::{Encode, Context}; + + #encode_fields + + Ok(()) + } + } + }) + } + Data::Enum(enum_) => { + let variants = pair_variants_with_discriminants(enum_.variants)?; + + let encode_arms = variants + .iter() + .map(|(disc, variant)| { + let variant_name = &variant.ident; + + let disc_ctx = format!( + "failed to encode enum discriminant {disc} for variant `{variant_name}` \ + in `{input_name}`", + ); + + match &variant.fields { + Fields::Named(fields) => { + let field_names = fields + .named + .iter() + .map(|f| f.ident.as_ref().unwrap()) + .collect::>(); + + let encode_fields = field_names + .iter() + .map(|name| { + let ctx = format!( + "failed to encode field `{name}` in variant \ + `{variant_name}` in `{input_name}`", + ); + + quote! { + #name.encode(&mut _w).context(#ctx)?; + } + }) + .collect::(); + + quote! { + Self::#variant_name { #(#field_names,)* } => { + VarInt(#disc).encode(&mut _w).context(#disc_ctx)?; + + #encode_fields + Ok(()) + } + } + } + Fields::Unnamed(fields) => { + let field_names = (0..fields.unnamed.len()) + .map(|i| Ident::new(&format!("_{i}"), Span::call_site())) + .collect::>(); + + let encode_fields = field_names + .iter() + .map(|name| { + let ctx = format!( + "failed to encode field `{name}` in variant \ + `{variant_name}` in `{input_name}`" + ); + + quote! { + #name.encode(&mut _w).context(#ctx)?; + } + }) + .collect::(); + + quote! { + Self::#variant_name(#(#field_names,)*) => { + VarInt(#disc).encode(&mut _w).context(#disc_ctx)?; + + #encode_fields + Ok(()) + } + } + } + Fields::Unit => quote! { + Self::#variant_name => Ok( + VarInt(#disc) + .encode(&mut _w) + .context(#disc_ctx)? + ), + }, + } + }) + .collect::(); + + Ok(quote! { + #[allow(unused_imports, unreachable_code)] + impl #impl_generics ::valence_protocol::__private::Encode for #input_name #ty_generics + #where_clause + { + fn encode(&self, mut _w: impl ::std::io::Write) -> ::valence_protocol::__private::Result<()> { + use ::valence_protocol::__private::{Encode, VarInt, Context}; + + match self { + #encode_arms + _ => unreachable!(), + } + } + } + }) + } + Data::Union(u) => Err(Error::new( + u.union_token.span(), + "cannot derive `Encode` on unions", + )), + } +} diff --git a/vendor/valence/crates/valence_protocol_macros/src/lib.rs b/vendor/valence/crates/valence_protocol_macros/src/lib.rs new file mode 100644 index 00000000..037d8647 --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/src/lib.rs @@ -0,0 +1,113 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use proc_macro::TokenStream as StdTokenStream; +use proc_macro2::TokenStream; +use syn::{Attribute, GenericParam, Generics, LitInt, Result, Variant, parse_quote}; + +mod decode; +mod encode; +mod packet; + +#[proc_macro_derive(Encode, attributes(packet))] +pub fn derive_encode(item: StdTokenStream) -> StdTokenStream { + match encode::derive_encode(item.into()) { + Ok(tokens) => tokens.into(), + Err(e) => e.into_compile_error().into(), + } +} + +#[proc_macro_derive(Decode, attributes(packet))] +pub fn derive_decode(item: StdTokenStream) -> StdTokenStream { + match decode::derive_decode(item.into()) { + Ok(tokens) => tokens.into(), + Err(e) => e.into_compile_error().into(), + } +} + +#[proc_macro_derive(DecodeBytes, attributes(packet))] +pub fn derive_decode_bytes(item: StdTokenStream) -> StdTokenStream { + match decode::derive_decode_bytes(item.into()) { + Ok(tokens) => tokens.into(), + Err(e) => e.into_compile_error().into(), + } +} + +#[proc_macro_derive(DecodeBytesAuto, attributes(packet))] +pub fn derive_decode_bytes_auto(item: StdTokenStream) -> StdTokenStream { + match decode::derive_decode_bytes_auto(item.into()) { + Ok(tokens) => tokens.into(), + Err(e) => e.into_compile_error().into(), + } +} + +#[proc_macro_derive(Packet, attributes(packet))] +pub fn derive_packet(item: StdTokenStream) -> StdTokenStream { + match packet::derive_packet(item.into()) { + Ok(tokens) => tokens.into(), + Err(e) => e.into_compile_error().into(), + } +} + +fn pair_variants_with_discriminants( + variants: impl IntoIterator, +) -> Result> { + let mut discriminant = 0; + variants + .into_iter() + .map(|v| { + if let Some(i) = parse_tag_attr(&v.attrs)? { + discriminant = i; + } + + let pair = (discriminant, v); + discriminant += 1; + Ok(pair) + }) + .collect::>() +} + +fn parse_tag_attr(attrs: &[Attribute]) -> Result> { + for attr in attrs { + if attr.path().is_ident("packet") { + let mut res = 0; + + attr.parse_nested_meta(|meta| { + if meta.path.is_ident("tag") { + res = meta.value()?.parse::()?.base10_parse::()?; + Ok(()) + } else { + Err(meta.error("unrecognized argument")) + } + })?; + + return Ok(Some(res)); + } + } + + Ok(None) +} + +fn add_trait_bounds(generics: &mut Generics, trait_: TokenStream) { + for param in &mut generics.params { + if let GenericParam::Type(type_param) = param { + type_param.bounds.push(parse_quote!(#trait_)) + } + } +} diff --git a/vendor/valence/crates/valence_protocol_macros/src/packet.rs b/vendor/valence/crates/valence_protocol_macros/src/packet.rs new file mode 100644 index 00000000..fd13b92b --- /dev/null +++ b/vendor/valence/crates/valence_protocol_macros/src/packet.rs @@ -0,0 +1,128 @@ +use heck::ToShoutySnakeCase; +use proc_macro2::{Ident, Span, TokenStream}; +use quote::quote; +use syn::spanned::Spanned; +use syn::{Attribute, DeriveInput, Error, Expr, LitInt, LitStr, Result, parse_quote, parse2}; + +use crate::add_trait_bounds; + +pub(super) fn derive_packet(item: TokenStream) -> Result { + let mut input = parse2::(item)?; + + let packet_attr = parse_packet_helper_attr(&input.attrs)?.unwrap_or_default(); + + let name = input.ident.clone(); + + let name_str = if let Some(attr_name) = packet_attr.name { + attr_name.value() + } else { + name.to_string() + }; + + let packet_id: Expr = match packet_attr.id { + Some(expr) => expr, + None => match syn::parse_str::(&name_str.to_shouty_snake_case()) { + Ok(ident) => parse_quote!(::valence_protocol::packet_id::#ident), + Err(_) => { + return Err(Error::new( + packet_attr.span, + "missing valid `id = ...` value from `packet` attr", + )); + } + }, + }; + + add_trait_bounds(&mut input.generics, quote!(::std::fmt::Debug)); + + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); + + let side = if let Some(side_attr) = packet_attr.side { + side_attr + } else if name_str.to_lowercase().ends_with("s2c") { + parse_quote!(::valence_protocol::PacketSide::Clientbound) + } else if name_str.to_lowercase().ends_with("c2s") { + parse_quote!(::valence_protocol::PacketSide::Serverbound) + } else { + return Err(Error::new( + packet_attr.span, + "missing `side = PacketSide::...` value from `packet` attribute", + )); + }; + + let state = packet_attr + .state + .unwrap_or_else(|| parse_quote!(::valence_protocol::PacketState::Play)); + + Ok(quote! { + impl #impl_generics ::valence_protocol::__private::Packet for #name #ty_generics + #where_clause + { + const ID: i32 = #packet_id; + const NAME: &'static str = #name_str; + const SIDE: ::valence_protocol::PacketSide = #side; + const STATE: ::valence_protocol::PacketState = #state; + } + }) +} + +struct PacketAttr { + span: Span, + id: Option, + tag: Option, + name: Option, + side: Option, + state: Option, +} + +impl Default for PacketAttr { + fn default() -> Self { + Self { + span: Span::call_site(), + id: Default::default(), + tag: Default::default(), + name: Default::default(), + side: Default::default(), + state: Default::default(), + } + } +} + +fn parse_packet_helper_attr(attrs: &[Attribute]) -> Result> { + for attr in attrs { + if attr.path().is_ident("packet") { + let mut res = PacketAttr { + span: attr.span(), + id: None, + tag: None, + name: None, + side: None, + state: None, + }; + + attr.parse_nested_meta(|meta| { + if meta.path.is_ident("id") { + res.id = Some(meta.value()?.parse::()?); + Ok(()) + } else if meta.path.is_ident("tag") { + res.tag = Some(meta.value()?.parse::()?.base10_parse::()?); + Ok(()) + } else if meta.path.is_ident("name") { + res.name = Some(meta.value()?.parse::()?); + Ok(()) + } else if meta.path.is_ident("side") { + res.side = Some(meta.value()?.parse::()?); + Ok(()) + } else if meta.path.is_ident("state") { + res.state = Some(meta.value()?.parse::()?); + Ok(()) + } else { + Err(meta.error("unrecognized packet argument")) + } + })?; + + return Ok(Some(res)); + } + } + + Ok(None) +} diff --git a/vendor/valence/crates/valence_registry/Cargo.toml b/vendor/valence/crates/valence_registry/Cargo.toml new file mode 100644 index 00000000..8d75d1d2 --- /dev/null +++ b/vendor/valence/crates/valence_registry/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "valence_registry" +description = "Dynamic registries for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_app.workspace = true +bevy_ecs.workspace = true +indexmap.workspace = true +serde_json.workspace = true +serde.workspace = true +tracing.workspace = true +valence_protocol.workspace = true +anyhow.workspace = true +valence_ident.workspace = true +valence_nbt = { workspace = true, features = ["serde"] } +valence_server_common.workspace = true diff --git a/vendor/valence/crates/valence_registry/README.md b/vendor/valence/crates/valence_registry/README.md new file mode 100644 index 00000000..088afc7c --- /dev/null +++ b/vendor/valence/crates/valence_registry/README.md @@ -0,0 +1,3 @@ +# valence_registry + +Contains Minecraft's networked registries. This includes the registry codec sent to clients during the initial join. diff --git a/vendor/valence/crates/valence_registry/extracted/registry_codec.dat b/vendor/valence/crates/valence_registry/extracted/registry_codec.dat new file mode 100644 index 00000000..63e4a3a4 Binary files /dev/null and b/vendor/valence/crates/valence_registry/extracted/registry_codec.dat differ diff --git a/vendor/valence/crates/valence_registry/extracted/tags.json b/vendor/valence/crates/valence_registry/extracted/tags.json new file mode 100644 index 00000000..69aadfb4 --- /dev/null +++ b/vendor/valence/crates/valence_registry/extracted/tags.json @@ -0,0 +1,6684 @@ +{ + "minecraft:banner_pattern": { + "minecraft:no_item_required": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34 + ], + "minecraft:pattern_item/creeper": [ + 36 + ], + "minecraft:pattern_item/flower": [ + 38 + ], + "minecraft:pattern_item/globe": [ + 35 + ], + "minecraft:pattern_item/mojang": [ + 39 + ], + "minecraft:pattern_item/piglin": [ + 40 + ], + "minecraft:pattern_item/skull": [ + 37 + ] + }, + "minecraft:block": { + "minecraft:acacia_logs": [ + 50, + 70, + 60, + 78 + ], + "minecraft:all_hanging_signs": [ + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 227, + 228, + 226, + 229 + ], + "minecraft:all_signs": [ + 186, + 187, + 188, + 189, + 191, + 192, + 828, + 829, + 193, + 194, + 190, + 199, + 200, + 201, + 202, + 204, + 205, + 830, + 831, + 206, + 207, + 203, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 227, + 228, + 226, + 229 + ], + "minecraft:ancient_city_replaceable": [ + 970, + 983, + 979, + 985, + 981, + 984, + 982, + 986, + 971, + 988, + 989, + 137 + ], + "minecraft:animals_spawnable_on": [ + 8 + ], + "minecraft:anvil": [ + 408, + 409, + 410 + ], + "minecraft:axolotls_spawnable_on": [ + 251 + ], + "minecraft:azalea_grows_on": [ + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 34, + 36, + 35, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 249, + 912 + ], + "minecraft:azalea_root_replaceable": [ + 1, + 2, + 4, + 6, + 909, + 970, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 36, + 251, + 37, + 34, + 249, + 912 + ], + "minecraft:bamboo_blocks": [ + 56, + 65 + ], + "minecraft:bamboo_plantable_on": [ + 34, + 36, + 35, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 727, + 726, + 37, + 38 + ], + "minecraft:banners": [ + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534 + ], + "minecraft:base_stone_nether": [ + 256, + 259, + 849 + ], + "minecraft:base_stone_overworld": [ + 1, + 2, + 4, + 6, + 909, + 970 + ], + "minecraft:beacon_base_blocks": [ + 840, + 347, + 181, + 163, + 164 + ], + "minecraft:beds": [ + 117, + 118, + 114, + 115, + 112, + 110, + 116, + 106, + 111, + 108, + 105, + 104, + 109, + 113, + 103, + 107 + ], + "minecraft:bee_growables": [ + 601, + 383, + 384, + 183, + 316, + 315, + 598, + 599, + 788, + 956, + 957 + ], + "minecraft:beehives": [ + 836, + 837 + ], + "minecraft:big_dripleaf_placeable": [ + 251, + 963, + 9, + 8, + 11, + 10, + 323, + 968, + 969, + 55, + 184 + ], + "minecraft:birch_logs": [ + 48, + 68, + 58, + 76 + ], + "c:bookshelves": [ + 167 + ], + "c:budding_blocks": [ + 904 + ], + "c:buds": [ + 908, + 907, + 906 + ], + "minecraft:buttons": [ + 385, + 386, + 387, + 388, + 389, + 391, + 824, + 825, + 392, + 393, + 390, + 246, + 864 + ], + "minecraft:campfires": [ + 786, + 787 + ], + "minecraft:candle_cakes": [ + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902 + ], + "minecraft:candles": [ + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885 + ], + "minecraft:cauldrons": [ + 331, + 332, + 333, + 334 + ], + "minecraft:cave_vines": [ + 957, + 956 + ], + "minecraft:ceiling_hanging_signs": [ + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218 + ], + "minecraft:cherry_logs": [ + 51, + 71, + 61, + 79 + ], + "c:chests": [ + 177, + 344, + 411 + ], + "minecraft:climbable": [ + 196, + 317, + 772, + 805, + 806, + 807, + 808, + 956, + 957 + ], + "c:clusters": [ + 905 + ], + "minecraft:coal_ores": [ + 43, + 44 + ], + "minecraft:combination_step_sound_blocks": [ + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493, + 961, + 247, + 797, + 796, + 809 + ], + "minecraft:completes_find_tree_tutorial": [ + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79, + 798, + 799, + 800, + 801, + 789, + 790, + 791, + 792, + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87, + 608, + 795 + ], + "minecraft:convertable_to_mud": [ + 9, + 10, + 968 + ], + "minecraft:copper_ores": [ + 923, + 924 + ], + "minecraft:coral_blocks": [ + 688, + 689, + 690, + 691, + 692 + ], + "minecraft:coral_plants": [ + 698, + 699, + 700, + 701, + 702 + ], + "minecraft:corals": [ + 698, + 699, + 700, + 701, + 702, + 708, + 709, + 710, + 711, + 712 + ], + "minecraft:crimson_stems": [ + 798, + 799, + 800, + 801 + ], + "minecraft:crops": [ + 601, + 383, + 384, + 183, + 316, + 315, + 598, + 599 + ], + "minecraft:crystal_sound_blocks": [ + 903, + 904 + ], + "minecraft:dampens_vibrations": [ + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493 + ], + "minecraft:dark_oak_logs": [ + 52, + 72, + 62, + 80 + ], + "minecraft:dead_bush_may_place_on": [ + 34, + 36, + 35, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55 + ], + "minecraft:deepslate_ore_replaceables": [ + 970, + 909 + ], + "minecraft:diamond_ores": [ + 179, + 180 + ], + "minecraft:dirt": [ + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55 + ], + "minecraft:doors": [ + 195, + 583, + 584, + 585, + 586, + 588, + 826, + 827, + 589, + 590, + 587, + 232 + ], + "minecraft:dragon_immune": [ + 464, + 31, + 335, + 336, + 603, + 351, + 604, + 605, + 832, + 833, + 146, + 170, + 842, + 337, + 309, + 843, + 1001 + ], + "minecraft:dragon_transparent": [ + 465, + 173, + 174 + ], + "minecraft:dripstone_replaceable_blocks": [ + 1, + 2, + 4, + 6, + 909, + 970 + ], + "minecraft:emerald_ores": [ + 342, + 343 + ], + "minecraft:enchantment_power_provider": [ + 167 + ], + "minecraft:enchantment_power_transmitter": [ + 0, + 32, + 33, + 123, + 124, + 125, + 126, + 127, + 173, + 174, + 247, + 317, + 318, + 465, + 501, + 502, + 611, + 729, + 730, + 731, + 796, + 797, + 809, + 967 + ], + "minecraft:enderman_holdable": [ + 147, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 160, + 159, + 148, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 34, + 36, + 37, + 161, + 162, + 166, + 250, + 251, + 255, + 265, + 312, + 803, + 802, + 809, + 794, + 793, + 796 + ], + "minecraft:fall_damage_resetting": [ + 196, + 317, + 772, + 805, + 806, + 807, + 808, + 956, + 957, + 788, + 122 + ], + "minecraft:features_cannot_replace": [ + 31, + 175, + 177, + 336, + 1001 + ], + "minecraft:fence_gates": [ + 570, + 568, + 572, + 569, + 319, + 567, + 820, + 821, + 573, + 574, + 571 + ], + "minecraft:fences": [ + 254, + 578, + 580, + 575, + 576, + 577, + 816, + 817, + 581, + 582, + 579, + 326 + ], + "minecraft:fire": [ + 173, + 174 + ], + "minecraft:flower_pots": [ + 355, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 366, + 357, + 358, + 359, + 360, + 361, + 363, + 379, + 380, + 381, + 365, + 382, + 376, + 377, + 378, + 728, + 844, + 845, + 846, + 847, + 995, + 996, + 364, + 362, + 356 + ], + "minecraft:flowers": [ + 147, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 160, + 159, + 148, + 497, + 498, + 500, + 499, + 600, + 91, + 960, + 30, + 87, + 962 + ], + "minecraft:foxes_spawnable_on": [ + 8, + 247, + 249, + 11, + 10 + ], + "minecraft:frog_prefer_jump_to": [ + 324, + 964 + ], + "minecraft:frogs_spawnable_on": [ + 8, + 969, + 54, + 55 + ], + "minecraft:geode_invalid_blocks": [ + 31, + 32, + 33, + 248, + 496, + 724 + ], + "c:glass_blocks": [ + 94, + 276, + 284, + 270, + 280, + 281, + 278, + 282, + 272, + 277, + 274, + 271, + 275, + 279, + 283, + 911, + 269, + 273 + ], + "c:glass_panes": [ + 311, + 448, + 456, + 442, + 452, + 453, + 450, + 454, + 444, + 449, + 446, + 443, + 447, + 451, + 455, + 441, + 445 + ], + "minecraft:goats_spawnable_on": [ + 8, + 1, + 247, + 249, + 496, + 37 + ], + "minecraft:gold_ores": [ + 39, + 45, + 40 + ], + "minecraft:guarded_by_piglins": [ + 163, + 774, + 177, + 344, + 860, + 411, + 994, + 613, + 629, + 625, + 626, + 623, + 621, + 627, + 617, + 622, + 619, + 616, + 615, + 620, + 624, + 628, + 614, + 618, + 39, + 45, + 40 + ], + "minecraft:hoglin_repellents": [ + 794, + 845, + 264, + 843 + ], + "minecraft:ice": [ + 248, + 496, + 724, + 606 + ], + "minecraft:impermeable": [ + 94, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 911 + ], + "minecraft:infiniburn_end": [ + 256, + 607, + 31 + ], + "minecraft:infiniburn_nether": [ + 256, + 607 + ], + "minecraft:infiniburn_overworld": [ + 256, + 607 + ], + "minecraft:inside_step_sound_blocks": [ + 912, + 916, + 318, + 324, + 908, + 962 + ], + "minecraft:invalid_spawn_inside": [ + 335, + 603 + ], + "minecraft:iron_ores": [ + 41, + 42 + ], + "minecraft:jungle_logs": [ + 49, + 69, + 59, + 77 + ], + "minecraft:lapis_ores": [ + 95, + 96 + ], + "minecraft:lava_pool_stone_cannot_replace": [ + 31, + 175, + 177, + 336, + 1001, + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87, + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79, + 798, + 799, + 800, + 801, + 789, + 790, + 791, + 792 + ], + "minecraft:leaves": [ + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87 + ], + "minecraft:logs": [ + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79, + 798, + 799, + 800, + 801, + 789, + 790, + 791, + 792 + ], + "minecraft:logs_that_burn": [ + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79 + ], + "minecraft:lush_ground_replaceable": [ + 1, + 2, + 4, + 6, + 909, + 970, + 957, + 956, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 251, + 37, + 34 + ], + "minecraft:maintains_farmland": [ + 315, + 313, + 316, + 314, + 601, + 383, + 384, + 598, + 148, + 599, + 183 + ], + "minecraft:mangrove_logs": [ + 53, + 73, + 64, + 81 + ], + "minecraft:mangrove_logs_can_grow_through": [ + 969, + 55, + 54, + 89, + 53, + 30, + 961, + 317 + ], + "minecraft:mangrove_roots_can_grow_through": [ + 969, + 55, + 54, + 961, + 317, + 30, + 247 + ], + "minecraft:mineable/axe": [ + 102, + 314, + 313, + 959, + 727, + 774, + 836, + 837, + 601, + 965, + 964, + 167, + 306, + 161, + 786, + 383, + 777, + 265, + 957, + 956, + 177, + 593, + 592, + 340, + 834, + 182, + 803, + 415, + 125, + 124, + 778, + 318, + 123, + 967, + 266, + 253, + 196, + 502, + 780, + 324, + 773, + 316, + 312, + 308, + 328, + 384, + 315, + 255, + 307, + 162, + 772, + 966, + 781, + 787, + 958, + 252, + 788, + 501, + 411, + 808, + 807, + 317, + 794, + 806, + 805, + 183, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 570, + 568, + 572, + 569, + 319, + 567, + 820, + 821, + 573, + 574, + 571, + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79, + 798, + 799, + 800, + 801, + 789, + 790, + 791, + 792, + 13, + 14, + 15, + 16, + 17, + 19, + 810, + 811, + 20, + 21, + 18, + 23, + 24, + 25, + 26, + 27, + 29, + 960, + 30, + 28, + 186, + 187, + 188, + 189, + 191, + 192, + 828, + 829, + 193, + 194, + 190, + 199, + 200, + 201, + 202, + 204, + 205, + 830, + 831, + 206, + 207, + 203, + 385, + 386, + 387, + 388, + 389, + 391, + 824, + 825, + 392, + 393, + 390, + 195, + 583, + 584, + 585, + 586, + 588, + 826, + 827, + 589, + 590, + 587, + 254, + 578, + 580, + 575, + 576, + 577, + 816, + 817, + 581, + 582, + 579, + 233, + 234, + 235, + 236, + 237, + 239, + 814, + 815, + 240, + 241, + 238, + 539, + 540, + 541, + 542, + 543, + 545, + 812, + 813, + 546, + 547, + 544, + 176, + 348, + 349, + 350, + 457, + 459, + 822, + 823, + 460, + 461, + 458, + 289, + 287, + 291, + 288, + 285, + 286, + 818, + 819, + 292, + 293, + 290, + 54, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 227, + 228, + 226, + 229, + 22, + 548, + 462, + 56, + 65, + 168 + ], + "minecraft:mineable/hoe": [ + 608, + 795, + 477, + 680, + 835, + 804, + 92, + 93, + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 913, + 914, + 963, + 961, + 915, + 917, + 916, + 918, + 962, + 87 + ], + "minecraft:mineable/pickaxe": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 12, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 163, + 164, + 165, + 169, + 170, + 175, + 179, + 180, + 181, + 185, + 198, + 231, + 232, + 242, + 243, + 256, + 259, + 260, + 294, + 295, + 296, + 297, + 309, + 310, + 320, + 321, + 325, + 326, + 327, + 329, + 330, + 337, + 341, + 342, + 343, + 344, + 347, + 412, + 413, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 494, + 495, + 535, + 536, + 537, + 538, + 549, + 550, + 551, + 552, + 553, + 554, + 555, + 556, + 558, + 559, + 560, + 561, + 562, + 563, + 564, + 565, + 566, + 594, + 595, + 596, + 597, + 607, + 609, + 610, + 612, + 630, + 631, + 632, + 633, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 683, + 684, + 685, + 686, + 687, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 697, + 703, + 704, + 705, + 706, + 707, + 713, + 714, + 715, + 716, + 717, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 775, + 776, + 779, + 782, + 783, + 784, + 785, + 793, + 802, + 840, + 841, + 842, + 843, + 848, + 849, + 850, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 860, + 861, + 862, + 863, + 866, + 867, + 868, + 909, + 910, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 970, + 971, + 972, + 973, + 975, + 976, + 977, + 979, + 980, + 981, + 983, + 984, + 985, + 987, + 988, + 989, + 991, + 992, + 993, + 994, + 248, + 496, + 724, + 128, + 121, + 129, + 905, + 908, + 907, + 906, + 903, + 904, + 301, + 305, + 304, + 990, + 300, + 303, + 302, + 246, + 864, + 353, + 354, + 759, + 760, + 761, + 762, + 763, + 764, + 766, + 767, + 768, + 769, + 770, + 771, + 851, + 859, + 865, + 974, + 978, + 982, + 986, + 765, + 613, + 629, + 625, + 626, + 623, + 621, + 627, + 617, + 622, + 619, + 616, + 615, + 620, + 624, + 628, + 614, + 618, + 408, + 409, + 410, + 331, + 332, + 333, + 334, + 197, + 119, + 120, + 423, + 725, + 299, + 322, + 557, + 298 + ], + "minecraft:mineable/shovel": [ + 251, + 9, + 10, + 11, + 184, + 8, + 37, + 323, + 34, + 36, + 249, + 247, + 257, + 602, + 662, + 663, + 664, + 665, + 666, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 258, + 968, + 55, + 969, + 35, + 38 + ], + "minecraft:mooshrooms_spawnable_on": [ + 323 + ], + "minecraft:moss_replaceable": [ + 1, + 2, + 4, + 6, + 909, + 970, + 957, + 956, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55 + ], + "minecraft:mushroom_grow_block": [ + 323, + 11, + 802, + 793 + ], + "minecraft:needs_diamond_tool": [ + 170, + 842, + 840, + 843, + 841 + ], + "minecraft:needs_iron_tool": [ + 181, + 179, + 180, + 342, + 343, + 347, + 163, + 994, + 39, + 40, + 242, + 243 + ], + "minecraft:needs_stone_tool": [ + 164, + 992, + 41, + 42, + 97, + 95, + 96, + 922, + 993, + 923, + 924, + 936, + 932, + 928, + 920, + 934, + 930, + 926, + 919, + 933, + 929, + 925, + 921, + 935, + 931, + 927, + 937, + 952, + 948, + 944, + 938, + 950, + 946, + 942, + 939, + 951, + 947, + 943, + 940, + 949, + 945, + 941, + 953 + ], + "minecraft:nether_carver_replaceables": [ + 1, + 2, + 4, + 6, + 909, + 970, + 256, + 259, + 849, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 802, + 793, + 608, + 795, + 257, + 258 + ], + "minecraft:nylium": [ + 802, + 793 + ], + "minecraft:oak_logs": [ + 46, + 66, + 63, + 74 + ], + "minecraft:occludes_vibration_signals": [ + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145 + ], + "c:ores": [ + 242, + 243, + 923, + 924, + 39, + 45, + 40, + 41, + 42, + 43, + 44, + 342, + 343, + 95, + 96, + 179, + 180, + 417 + ], + "minecraft:overworld_carver_replaceables": [ + 1, + 2, + 4, + 6, + 909, + 970, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 34, + 36, + 35, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 41, + 42, + 923, + 924, + 32, + 37, + 38, + 99, + 535, + 910, + 247, + 496, + 992, + 993 + ], + "minecraft:overworld_natural_logs": [ + 50, + 48, + 46, + 49, + 47, + 52, + 53, + 51 + ], + "minecraft:parrots_spawnable_on": [ + 8, + 0, + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87, + 52, + 72, + 62, + 80, + 46, + 66, + 63, + 74, + 50, + 70, + 60, + 78, + 48, + 68, + 58, + 76, + 49, + 69, + 59, + 77, + 47, + 67, + 57, + 75, + 53, + 73, + 64, + 81, + 51, + 71, + 61, + 79, + 798, + 799, + 800, + 801, + 789, + 790, + 791, + 792 + ], + "minecraft:piglin_repellents": [ + 174, + 261, + 785, + 262, + 787 + ], + "minecraft:planks": [ + 13, + 14, + 15, + 16, + 17, + 19, + 810, + 811, + 20, + 21, + 18 + ], + "minecraft:polar_bears_spawnable_on_alternate": [ + 248 + ], + "minecraft:portals": [ + 264, + 335, + 603 + ], + "minecraft:pressure_plates": [ + 412, + 413, + 233, + 234, + 235, + 236, + 237, + 239, + 814, + 815, + 240, + 241, + 238, + 231, + 863 + ], + "minecraft:prevent_mob_spawning_inside": [ + 197, + 119, + 120, + 423 + ], + "c:quartz_ores": [ + 417 + ], + "minecraft:rabbits_spawnable_on": [ + 8, + 247, + 249, + 34 + ], + "minecraft:rails": [ + 197, + 119, + 120, + 423 + ], + "c:red_sandstone_blocks": [ + 535, + 536, + 537, + 566 + ], + "c:red_sandstone_slabs": [ + 560, + 561, + 747 + ], + "c:red_sandstone_stairs": [ + 538, + 733 + ], + "minecraft:redstone_ores": [ + 242, + 243 + ], + "minecraft:replaceable": [ + 0, + 32, + 33, + 123, + 124, + 125, + 126, + 127, + 173, + 174, + 247, + 317, + 318, + 465, + 501, + 502, + 611, + 729, + 730, + 731, + 796, + 797, + 809, + 967 + ], + "minecraft:replaceable_by_trees": [ + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87, + 123, + 124, + 125, + 317, + 318, + 497, + 498, + 499, + 500, + 501, + 502, + 967, + 600, + 32, + 126, + 127, + 796, + 797, + 809 + ], + "minecraft:sand": [ + 34, + 36, + 35 + ], + "c:sandstone_blocks": [ + 99, + 100, + 101, + 564, + 535, + 536, + 537, + 566 + ], + "c:sandstone_slabs": [ + 551, + 552, + 752, + 560, + 561, + 747 + ], + "c:sandstone_stairs": [ + 341, + 739, + 538, + 733 + ], + "minecraft:saplings": [ + 23, + 24, + 25, + 26, + 27, + 29, + 959, + 960, + 30, + 28 + ], + "minecraft:sculk_replaceable": [ + 1, + 2, + 4, + 6, + 909, + 970, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 802, + 793, + 256, + 259, + 849, + 34, + 36, + 37, + 257, + 258, + 910, + 991, + 251, + 955, + 337, + 535, + 99 + ], + "minecraft:sculk_replaceable_world_gen": [ + 1, + 2, + 4, + 6, + 909, + 970, + 9, + 8, + 11, + 10, + 323, + 968, + 963, + 969, + 55, + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 802, + 793, + 256, + 259, + 849, + 34, + 36, + 37, + 257, + 258, + 910, + 991, + 251, + 955, + 337, + 535, + 99, + 983, + 979, + 971, + 988, + 989, + 975 + ], + "c:shulker_boxes": [ + 613, + 625, + 626, + 623, + 621, + 627, + 617, + 622, + 619, + 616, + 615, + 620, + 624, + 628, + 614, + 618, + 629 + ], + "minecraft:shulker_boxes": [ + 613, + 629, + 625, + 626, + 623, + 621, + 627, + 617, + 622, + 619, + 616, + 615, + 620, + 624, + 628, + 614, + 618 + ], + "minecraft:signs": [ + 186, + 187, + 188, + 189, + 191, + 192, + 828, + 829, + 193, + 194, + 190, + 199, + 200, + 201, + 202, + 204, + 205, + 830, + 831, + 206, + 207, + 203 + ], + "minecraft:slabs": [ + 539, + 540, + 541, + 542, + 543, + 545, + 812, + 813, + 546, + 547, + 544, + 548, + 549, + 550, + 556, + 551, + 562, + 559, + 560, + 555, + 554, + 558, + 553, + 473, + 474, + 475, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 552, + 561, + 852, + 857, + 862, + 973, + 977, + 981, + 985, + 950, + 951, + 952, + 933, + 934, + 935, + 936, + 949, + 557 + ], + "minecraft:small_dripleaf_placeable": [ + 251, + 963 + ], + "minecraft:small_flowers": [ + 147, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 160, + 159, + 148 + ], + "minecraft:smelts_to_glass": [ + 34, + 36 + ], + "minecraft:snaps_goat_horn": [ + 50, + 48, + 46, + 49, + 47, + 52, + 53, + 51, + 1, + 496, + 41, + 43, + 923, + 342 + ], + "minecraft:sniffer_diggable_block": [ + 9, + 8, + 11, + 10, + 968, + 963, + 969, + 55 + ], + "minecraft:sniffer_egg_hatch_boost": [ + 963 + ], + "minecraft:snow": [ + 247, + 249, + 912 + ], + "minecraft:snow_layer_can_survive_on": [ + 838, + 257, + 969 + ], + "minecraft:snow_layer_cannot_survive_on": [ + 248, + 496, + 464 + ], + "minecraft:soul_fire_base_blocks": [ + 257, + 258 + ], + "minecraft:soul_speed_blocks": [ + 257, + 258 + ], + "minecraft:spruce_logs": [ + 47, + 67, + 57, + 75 + ], + "minecraft:stairs": [ + 176, + 348, + 349, + 350, + 457, + 459, + 822, + 823, + 460, + 461, + 458, + 462, + 198, + 341, + 327, + 321, + 320, + 596, + 422, + 538, + 471, + 470, + 472, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 850, + 858, + 861, + 972, + 976, + 980, + 984, + 929, + 930, + 931, + 932, + 946, + 947, + 948, + 945, + 322 + ], + "minecraft:standing_signs": [ + 186, + 187, + 188, + 189, + 191, + 192, + 828, + 829, + 193, + 194, + 190 + ], + "minecraft:stone_bricks": [ + 294, + 295, + 296, + 297 + ], + "minecraft:stone_buttons": [ + 246, + 864 + ], + "minecraft:stone_ore_replaceables": [ + 1, + 2, + 4, + 6 + ], + "minecraft:stone_pressure_plates": [ + 231, + 863 + ], + "minecraft:strider_warm_blocks": [ + 33 + ], + "minecraft:sword_efficient": [ + 85, + 82, + 83, + 88, + 86, + 84, + 90, + 91, + 89, + 87, + 23, + 24, + 25, + 26, + 27, + 29, + 959, + 960, + 30, + 28, + 147, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 160, + 159, + 148, + 601, + 383, + 384, + 183, + 316, + 315, + 598, + 599, + 123, + 124, + 125, + 317, + 318, + 497, + 498, + 499, + 500, + 501, + 502, + 967, + 600, + 161, + 162, + 252, + 255, + 265, + 266, + 312, + 313, + 314, + 324, + 340, + 788, + 956, + 957, + 958, + 961, + 962, + 964, + 965, + 966, + 328, + 794, + 796, + 797, + 803, + 805, + 806, + 807, + 808, + 809, + 592, + 593 + ], + "minecraft:tall_flowers": [ + 497, + 498, + 500, + 499, + 600 + ], + "minecraft:terracotta": [ + 494, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440 + ], + "minecraft:trail_ruins_replaceable": [ + 37 + ], + "minecraft:trapdoors": [ + 289, + 287, + 291, + 288, + 285, + 286, + 818, + 819, + 292, + 293, + 290, + 466 + ], + "c:uncolored_sandstone_blocks": [ + 99, + 100, + 101, + 564 + ], + "c:uncolored_sandstone_slabs": [ + 551, + 552, + 752 + ], + "c:uncolored_sandstone_stairs": [ + 341, + 739 + ], + "minecraft:underwater_bonemeals": [ + 126, + 698, + 699, + 700, + 701, + 702, + 708, + 709, + 710, + 711, + 712, + 718, + 719, + 720, + 721, + 722 + ], + "minecraft:unstable_bottom_center": [ + 570, + 568, + 572, + 569, + 319, + 567, + 820, + 821, + 573, + 574, + 571 + ], + "minecraft:valid_spawn": [ + 8, + 11 + ], + "minecraft:vibration_resonators": [ + 903 + ], + "c:villager_job_sites": [ + 774, + 776, + 330, + 777, + 331, + 333, + 332, + 334, + 834, + 778, + 779, + 780, + 773, + 781, + 775, + 782 + ], + "minecraft:wall_corals": [ + 718, + 719, + 720, + 721, + 722 + ], + "minecraft:wall_hanging_signs": [ + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 227, + 228, + 226, + 229 + ], + "minecraft:wall_post_override": [ + 171, + 261, + 244, + 346, + 186, + 187, + 188, + 189, + 191, + 192, + 828, + 829, + 193, + 194, + 190, + 199, + 200, + 201, + 202, + 204, + 205, + 830, + 831, + 206, + 207, + 203, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 412, + 413, + 233, + 234, + 235, + 236, + 237, + 239, + 814, + 815, + 240, + 241, + 238, + 231, + 863 + ], + "minecraft:wall_signs": [ + 199, + 200, + 201, + 202, + 204, + 205, + 830, + 831, + 206, + 207, + 203 + ], + "minecraft:walls": [ + 353, + 354, + 759, + 760, + 761, + 762, + 763, + 764, + 766, + 767, + 768, + 769, + 770, + 771, + 851, + 859, + 865, + 974, + 978, + 982, + 986, + 765 + ], + "minecraft:warped_stems": [ + 789, + 790, + 791, + 792 + ], + "minecraft:wart_blocks": [ + 608, + 795 + ], + "minecraft:wither_immune": [ + 464, + 31, + 335, + 336, + 603, + 351, + 604, + 605, + 832, + 833, + 146, + 465, + 1001 + ], + "minecraft:wither_summon_base_blocks": [ + 257, + 258 + ], + "minecraft:wolves_spawnable_on": [ + 8, + 247, + 249 + ], + "c:wooden_barrels": [ + 774 + ], + "minecraft:wooden_buttons": [ + 385, + 386, + 387, + 388, + 389, + 391, + 824, + 825, + 392, + 393, + 390 + ], + "minecraft:wooden_doors": [ + 195, + 583, + 584, + 585, + 586, + 588, + 826, + 827, + 589, + 590, + 587 + ], + "minecraft:wooden_fences": [ + 254, + 578, + 580, + 575, + 576, + 577, + 816, + 817, + 581, + 582, + 579 + ], + "minecraft:wooden_pressure_plates": [ + 233, + 234, + 235, + 236, + 237, + 239, + 814, + 815, + 240, + 241, + 238 + ], + "minecraft:wooden_slabs": [ + 539, + 540, + 541, + 542, + 543, + 545, + 812, + 813, + 546, + 547, + 544 + ], + "minecraft:wooden_stairs": [ + 176, + 348, + 349, + 350, + 457, + 459, + 822, + 823, + 460, + 461, + 458 + ], + "minecraft:wooden_trapdoors": [ + 289, + 287, + 291, + 288, + 285, + 286, + 818, + 819, + 292, + 293, + 290 + ], + "minecraft:wool": [ + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145 + ], + "minecraft:wool_carpets": [ + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493 + ] + }, + "minecraft:cat_variant": { + "minecraft:default_spawns": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9 + ], + "minecraft:full_moon_spawns": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ] + }, + "minecraft:damage_type": { + "minecraft:always_hurts_ender_dragons": [ + 13, + 7, + 32, + 1 + ], + "minecraft:always_most_significant_fall": [ + 29 + ], + "minecraft:always_triggers_silverfish": [ + 24 + ], + "minecraft:avoids_guardian_thorns": [ + 24, + 38, + 13, + 7, + 32, + 1 + ], + "minecraft:burns_armor_stands": [ + 28 + ], + "minecraft:bypasses_armor": [ + 28, + 20, + 3, + 5, + 14, + 16, + 42, + 4, + 35, + 8, + 15, + 34, + 24, + 21, + 29, + 17, + 33, + 30 + ], + "minecraft:bypasses_effects": [ + 35 + ], + "minecraft:bypasses_enchantments": [ + 33 + ], + "minecraft:bypasses_invulnerability": [ + 29, + 17 + ], + "minecraft:bypasses_resistance": [ + 29, + 17 + ], + "minecraft:bypasses_shield": [ + 28, + 20, + 3, + 5, + 14, + 16, + 42, + 4, + 35, + 8, + 15, + 34, + 24, + 21, + 29, + 17, + 33, + 30, + 9, + 11 + ], + "minecraft:damages_helmet": [ + 9, + 10, + 11 + ], + "minecraft:ignites_armor_stands": [ + 19 + ], + "minecraft:is_drowning": [ + 5 + ], + "minecraft:is_explosion": [ + 13, + 7, + 32, + 1 + ], + "minecraft:is_fall": [ + 8, + 34 + ], + "minecraft:is_fire": [ + 19, + 28, + 22, + 18, + 41, + 12 + ], + "minecraft:is_freezing": [ + 15 + ], + "minecraft:is_lightning": [ + 23 + ], + "minecraft:is_projectile": [ + 0, + 40, + 27, + 41, + 12, + 43, + 39 + ], + "minecraft:no_anger": [ + 26 + ], + "minecraft:no_impact": [ + 5 + ], + "minecraft:witch_resistant_to": [ + 24, + 21, + 33, + 38 + ], + "minecraft:wither_immune_to": [ + 5 + ] + }, + "minecraft:enchantment": { + "c:entity_defense_enhancement": [ + 2, + 0, + 3, + 4, + 1, + 5 + ], + "c:entity_movement_enhancement": [ + 12, + 8, + 11 + ], + "c:fortune": [ + 23 + ], + "c:looting": [ + 18 + ], + "c:weapon_damage_enhancement": [ + 15, + 31, + 14, + 24, + 13 + ] + }, + "minecraft:entity_type": { + "minecraft:arrows": [ + 3, + 94 + ], + "minecraft:axolotl_always_hostiles": [ + 23, + 46, + 25 + ], + "minecraft:axolotl_hunt_targets": [ + 105, + 78, + 81, + 16, + 96, + 44, + 99 + ], + "minecraft:beehive_inhabitors": [ + 6 + ], + "c:boats": [ + 9, + 13 + ], + "c:bosses": [ + 27, + 113 + ], + "minecraft:dismounts_underwater": [ + 10, + 15, + 21, + 49, + 60, + 66, + 72, + 80, + 95, + 98, + 103, + 119 + ], + "minecraft:fall_damage_immune": [ + 53, + 91, + 83, + 0, + 5, + 6, + 7, + 11, + 15, + 41, + 71, + 62, + 67, + 70, + 113 + ], + "minecraft:freeze_hurts_extra_types": [ + 98, + 7, + 62 + ], + "minecraft:freeze_immune_entity_types": [ + 97, + 76, + 91, + 113 + ], + "minecraft:frog_food": [ + 88, + 62 + ], + "minecraft:impact_projectiles": [ + 3, + 94, + 92, + 57, + 89, + 24, + 104, + 22, + 115 + ], + "c:minecarts": [ + 64, + 102, + 14, + 40, + 17, + 48, + 93 + ], + "minecraft:powder_snow_walkable_mobs": [ + 79, + 30, + 85, + 38 + ], + "minecraft:raiders": [ + 31, + 75, + 80, + 109, + 51, + 112 + ], + "minecraft:skeletons": [ + 86, + 97, + 114 + ] + }, + "minecraft:fluid": { + "c:lava": [ + 4, + 3 + ], + "minecraft:lava": [ + 4, + 3 + ], + "c:water": [ + 2, + 1 + ], + "minecraft:water": [ + 2, + 1 + ] + }, + "minecraft:game_event": { + "minecraft:allay_can_listen": [ + 34 + ], + "minecraft:ignore_vibrations_sneaking": [ + 27, + 37, + 42, + 43, + 30, + 29 + ], + "minecraft:shrieker_can_listen": [ + 38 + ], + "minecraft:vibrations": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 0, + 4, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 25, + 26, + 27, + 28, + 29, + 33, + 34, + 35, + 36, + 37, + 39, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 24 + ], + "minecraft:warden_can_listen": [ + 1, + 2, + 3, + 5, + 6, + 7, + 8, + 0, + 4, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 25, + 26, + 27, + 28, + 29, + 33, + 34, + 35, + 36, + 37, + 39, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 40, + 38 + ] + }, + "minecraft:instrument": { + "minecraft:goat_horns": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "minecraft:regular_goat_horns": [ + 0, + 1, + 2, + 3 + ], + "minecraft:screaming_goat_horns": [ + 4, + 5, + 6, + 7 + ] + }, + "minecraft:item": { + "minecraft:acacia_logs": [ + 114, + 148, + 127, + 137 + ], + "minecraft:anvil": [ + 397, + 398, + 399 + ], + "minecraft:arrows": [ + 761, + 1114, + 1113 + ], + "c:axes": [ + 800, + 790, + 780, + 785, + 795, + 805 + ], + "minecraft:axes": [ + 800, + 785, + 790, + 805, + 780, + 795 + ], + "minecraft:axolotl_tempt_items": [ + 878 + ], + "minecraft:bamboo_blocks": [ + 122, + 143 + ], + "minecraft:banners": [ + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102 + ], + "minecraft:beacon_payment_items": [ + 775, + 765, + 764, + 774, + 770 + ], + "minecraft:beds": [ + 938, + 939, + 935, + 936, + 933, + 931, + 937, + 927, + 932, + 929, + 926, + 925, + 930, + 934, + 924, + 928 + ], + "minecraft:birch_logs": [ + 112, + 146, + 125, + 135 + ], + "c:black_dyes": [ + 919 + ], + "c:blue_dyes": [ + 915 + ], + "minecraft:boats": [ + 736, + 738, + 740, + 742, + 744, + 748, + 750, + 752, + 746, + 737, + 739, + 741, + 743, + 745, + 749, + 751, + 753, + 747 + ], + "minecraft:bookshelf_books": [ + 885, + 1047, + 1068, + 1046, + 1120 + ], + "c:bookshelves": [ + 264 + ], + "c:bows": [ + 1143, + 760 + ], + "minecraft:breaks_decorated_pots": [ + 797, + 782, + 787, + 802, + 777, + 792, + 800, + 785, + 790, + 805, + 780, + 795, + 799, + 784, + 789, + 804, + 779, + 794, + 798, + 783, + 788, + 803, + 778, + 793, + 801, + 786, + 791, + 806, + 781, + 796, + 1139 + ], + "c:brown_dyes": [ + 916 + ], + "c:budding_blocks": [ + 73 + ], + "c:buds": [ + 1207, + 1208, + 1209 + ], + "minecraft:buttons": [ + 662, + 663, + 664, + 665, + 666, + 668, + 671, + 672, + 669, + 670, + 667, + 660, + 661 + ], + "minecraft:candles": [ + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206 + ], + "minecraft:cherry_logs": [ + 115, + 149, + 128, + 138 + ], + "minecraft:chest_boats": [ + 737, + 739, + 741, + 743, + 745, + 749, + 751, + 753, + 747 + ], + "c:chests": [ + 277, + 359, + 656 + ], + "minecraft:cluster_max_harvestables": [ + 799, + 789, + 794, + 804, + 784, + 779 + ], + "c:clusters": [ + 1210 + ], + "c:coal": [ + 762, + 763 + ], + "minecraft:coal_ores": [ + 49, + 50 + ], + "minecraft:coals": [ + 762, + 763 + ], + "minecraft:compasses": [ + 888, + 889 + ], + "minecraft:completes_find_tree_tutorial": [ + 116, + 150, + 129, + 139, + 110, + 144, + 123, + 133, + 114, + 148, + 127, + 137, + 112, + 146, + 125, + 135, + 113, + 147, + 126, + 136, + 111, + 145, + 124, + 134, + 117, + 151, + 130, + 140, + 115, + 149, + 128, + 138, + 120, + 131, + 152, + 141, + 121, + 132, + 153, + 142, + 157, + 154, + 155, + 160, + 158, + 156, + 162, + 163, + 161, + 159, + 495, + 496 + ], + "c:copper_ingots": [ + 772 + ], + "minecraft:copper_ores": [ + 53, + 54 + ], + "minecraft:creeper_drop_music_discs": [ + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133 + ], + "minecraft:creeper_igniters": [ + 758, + 1045 + ], + "minecraft:crimson_stems": [ + 120, + 131, + 152, + 141 + ], + "c:cyan_dyes": [ + 913 + ], + "minecraft:dampens_vibrations": [ + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439 + ], + "minecraft:dark_oak_logs": [ + 116, + 150, + 129, + 139 + ], + "minecraft:decorated_pot_ingredients": [ + 881, + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1254 + ], + "minecraft:decorated_pot_sherds": [ + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1254 + ], + "minecraft:diamond_ores": [ + 63, + 64 + ], + "c:diamonds": [ + 764 + ], + "minecraft:dirt": [ + 15, + 14, + 17, + 16, + 342, + 18, + 225, + 19, + 119 + ], + "minecraft:doors": [ + 689, + 690, + 691, + 692, + 693, + 695, + 698, + 699, + 696, + 697, + 694, + 688 + ], + "c:dusts": [ + 894, + 635 + ], + "c:dyes": [ + 919, + 915, + 916, + 917, + 918, + 904, + 908, + 912, + 907, + 909, + 906, + 905, + 910, + 913, + 911, + 914 + ], + "minecraft:emerald_ores": [ + 59, + 60 + ], + "c:emeralds": [ + 765 + ], + "c:empty_buckets": [ + 868 + ], + "c:entity_water_buckets": [ + 879, + 877, + 875, + 878, + 876, + 880 + ], + "minecraft:fence_gates": [ + 716, + 714, + 718, + 715, + 712, + 713, + 721, + 722, + 719, + 720, + 717 + ], + "minecraft:fences": [ + 289, + 293, + 295, + 290, + 291, + 292, + 298, + 299, + 296, + 297, + 294, + 347 + ], + "minecraft:fishes": [ + 895, + 899, + 896, + 900, + 898, + 897 + ], + "minecraft:flowers": [ + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 443, + 444, + 446, + 445, + 210, + 163, + 176, + 42, + 159, + 224 + ], + "c:foods": [ + 759, + 809, + 815, + 841, + 842, + 844, + 845, + 895, + 896, + 897, + 898, + 899, + 900, + 940, + 943, + 944, + 947, + 948, + 949, + 950, + 951, + 959, + 1051, + 1052, + 1053, + 1054, + 1056, + 1065, + 1072, + 1073, + 1074, + 1085, + 1086, + 1104, + 1108, + 1110, + 1144, + 1165, + 1166, + 1173 + ], + "minecraft:fox_food": [ + 1165, + 1166 + ], + "minecraft:freeze_immune_wearables": [ + 819, + 818, + 817, + 816, + 1081 + ], + "c:gems": [ + 764, + 765, + 768, + 766 + ], + "c:glass_blocks": [ + 166, + 456, + 464, + 450, + 460, + 461, + 458, + 462, + 452, + 457, + 454, + 451, + 455, + 459, + 463, + 167, + 449, + 453 + ], + "c:glass_panes": [ + 335, + 472, + 480, + 466, + 476, + 477, + 474, + 478, + 468, + 473, + 470, + 467, + 471, + 475, + 479, + 465, + 469 + ], + "c:gold_ingots": [ + 774 + ], + "minecraft:gold_ores": [ + 55, + 65, + 56 + ], + "c:gray_dyes": [ + 911 + ], + "c:green_dyes": [ + 917 + ], + "minecraft:hanging_signs": [ + 857, + 858, + 859, + 861, + 862, + 860, + 863, + 866, + 867, + 864, + 865 + ], + "c:hoes": [ + 801, + 791, + 781, + 786, + 796, + 806 + ], + "minecraft:hoes": [ + 801, + 786, + 791, + 806, + 781, + 796 + ], + "minecraft:ignored_by_piglin_babies": [ + 873 + ], + "c:ingots": [ + 772, + 774, + 770, + 775 + ], + "c:iron_ingots": [ + 770 + ], + "minecraft:iron_ores": [ + 51, + 52 + ], + "minecraft:jungle_logs": [ + 113, + 147, + 126, + 136 + ], + "c:lapis": [ + 766 + ], + "minecraft:lapis_ores": [ + 61, + 62 + ], + "c:lava_buckets": [ + 870 + ], + "minecraft:leaves": [ + 157, + 154, + 155, + 160, + 158, + 156, + 162, + 163, + 161, + 159 + ], + "minecraft:lectern_books": [ + 1047, + 1046 + ], + "c:light_blue_dyes": [ + 907 + ], + "c:light_gray_dyes": [ + 912 + ], + "c:lime_dyes": [ + 909 + ], + "minecraft:logs": [ + 116, + 150, + 129, + 139, + 110, + 144, + 123, + 133, + 114, + 148, + 127, + 137, + 112, + 146, + 125, + 135, + 113, + 147, + 126, + 136, + 111, + 145, + 124, + 134, + 117, + 151, + 130, + 140, + 115, + 149, + 128, + 138, + 120, + 131, + 152, + 141, + 121, + 132, + 153, + 142 + ], + "minecraft:logs_that_burn": [ + 116, + 150, + 129, + 139, + 110, + 144, + 123, + 133, + 114, + 148, + 127, + 137, + 112, + 146, + 125, + 135, + 113, + 147, + 126, + 136, + 111, + 145, + 124, + 134, + 117, + 151, + 130, + 140, + 115, + 149, + 128, + 138 + ], + "c:magenta_dyes": [ + 906 + ], + "minecraft:mangrove_logs": [ + 117, + 151, + 130, + 140 + ], + "c:milk_buckets": [ + 874 + ], + "minecraft:music_discs": [ + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1137, + 1134, + 1136, + 1135 + ], + "c:netherite_ingots": [ + 775 + ], + "minecraft:non_flammable_wood": [ + 121, + 132, + 153, + 142, + 120, + 131, + 152, + 141, + 32, + 33, + 240, + 241, + 686, + 687, + 298, + 299, + 710, + 711, + 721, + 722, + 371, + 372, + 671, + 672, + 698, + 699, + 855, + 856, + 867, + 866 + ], + "minecraft:noteblock_top_instruments": [ + 1060, + 1057, + 1061, + 1062, + 1058, + 1063, + 1059 + ], + "c:nuggets": [ + 955, + 1119 + ], + "minecraft:oak_logs": [ + 110, + 144, + 123, + 133 + ], + "c:orange_dyes": [ + 905 + ], + "c:ores": [ + 57, + 58, + 53, + 54, + 55, + 65, + 56, + 51, + 52, + 49, + 50, + 59, + 60, + 61, + 62, + 63, + 64, + 66 + ], + "c:pickaxes": [ + 799, + 789, + 779, + 784, + 794, + 804 + ], + "minecraft:pickaxes": [ + 799, + 784, + 789, + 804, + 779, + 794 + ], + "minecraft:piglin_food": [ + 841, + 842 + ], + "minecraft:piglin_loved": [ + 55, + 65, + 56, + 76, + 1180, + 675, + 774, + 1162, + 892, + 1056, + 966, + 844, + 845, + 832, + 833, + 834, + 835, + 1079, + 787, + 789, + 788, + 790, + 791, + 773, + 71 + ], + "minecraft:piglin_repellents": [ + 309, + 1164, + 1168 + ], + "c:pink_dyes": [ + 910 + ], + "minecraft:planks": [ + 23, + 24, + 25, + 26, + 27, + 29, + 32, + 33, + 30, + 31, + 28 + ], + "c:potions": [ + 1115, + 1112, + 957 + ], + "c:purple_dyes": [ + 914 + ], + "c:quartz": [ + 767 + ], + "c:quartz_ores": [ + 66 + ], + "minecraft:rails": [ + 725, + 723, + 724, + 726 + ], + "c:raw_copper_blocks": [ + 70 + ], + "c:raw_copper_ores": [ + 771 + ], + "c:raw_gold_blocks": [ + 71 + ], + "c:raw_gold_ores": [ + 773 + ], + "c:raw_iron_blocks": [ + 69 + ], + "c:raw_iron_ores": [ + 769 + ], + "c:raw_ores": [ + 769, + 771, + 773 + ], + "c:red_dyes": [ + 918 + ], + "c:red_sandstone_blocks": [ + 488, + 489, + 490, + 260 + ], + "c:red_sandstone_slabs": [ + 253, + 254, + 618 + ], + "c:red_sandstone_stairs": [ + 491, + 600 + ], + "c:redstone_dusts": [ + 635 + ], + "minecraft:redstone_ores": [ + 57, + 58 + ], + "minecraft:sand": [ + 44, + 47, + 45 + ], + "c:sandstone_blocks": [ + 169, + 170, + 171, + 261, + 488, + 489, + 490, + 260 + ], + "c:sandstone_slabs": [ + 244, + 245, + 623, + 253, + 254, + 618 + ], + "c:sandstone_stairs": [ + 358, + 606, + 491, + 600 + ], + "minecraft:saplings": [ + 35, + 36, + 37, + 38, + 39, + 41, + 175, + 176, + 42, + 40 + ], + "c:shears": [ + 942 + ], + "c:shields": [ + 1116 + ], + "c:shovels": [ + 798, + 788, + 778, + 783, + 793, + 803 + ], + "minecraft:shovels": [ + 798, + 783, + 788, + 803, + 778, + 793 + ], + "c:shulker_boxes": [ + 500, + 512, + 513, + 510, + 508, + 514, + 504, + 509, + 506, + 503, + 502, + 507, + 511, + 515, + 501, + 505, + 516 + ], + "minecraft:signs": [ + 846, + 847, + 848, + 850, + 849, + 852, + 855, + 856, + 853, + 854, + 851 + ], + "minecraft:slabs": [ + 230, + 231, + 232, + 233, + 234, + 236, + 240, + 241, + 237, + 238, + 235, + 239, + 242, + 243, + 249, + 244, + 255, + 252, + 253, + 248, + 247, + 251, + 246, + 256, + 257, + 258, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 628, + 629, + 245, + 254, + 1178, + 1186, + 1182, + 630, + 631, + 633, + 632, + 108, + 107, + 106, + 93, + 92, + 91, + 90, + 109, + 250 + ], + "minecraft:small_flowers": [ + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209 + ], + "minecraft:smelts_to_glass": [ + 44, + 47 + ], + "minecraft:sniffer_food": [ + 1106 + ], + "minecraft:soul_fire_base_blocks": [ + 304, + 305 + ], + "c:spears": [ + 1139 + ], + "minecraft:spruce_logs": [ + 111, + 145, + 124, + 134 + ], + "minecraft:stairs": [ + 361, + 362, + 363, + 364, + 365, + 367, + 371, + 372, + 368, + 369, + 366, + 370, + 282, + 358, + 348, + 340, + 339, + 275, + 404, + 491, + 485, + 484, + 486, + 599, + 600, + 601, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 1179, + 1187, + 1183, + 613, + 614, + 616, + 615, + 89, + 88, + 87, + 86, + 104, + 103, + 102, + 105, + 341 + ], + "minecraft:stone_bricks": [ + 318, + 319, + 320, + 321 + ], + "minecraft:stone_buttons": [ + 660, + 661 + ], + "minecraft:stone_crafting_materials": [ + 22, + 1177, + 9 + ], + "minecraft:stone_tool_materials": [ + 22, + 1177, + 9 + ], + "c:swords": [ + 797, + 787, + 777, + 782, + 792, + 802 + ], + "minecraft:swords": [ + 797, + 782, + 787, + 802, + 777, + 792 + ], + "minecraft:tall_flowers": [ + 443, + 444, + 446, + 445, + 210 + ], + "minecraft:terracotta": [ + 440, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420 + ], + "minecraft:tools": [ + 797, + 782, + 787, + 802, + 777, + 792, + 800, + 785, + 790, + 805, + 780, + 795, + 799, + 784, + 789, + 804, + 779, + 794, + 798, + 783, + 788, + 803, + 778, + 793, + 801, + 786, + 791, + 806, + 781, + 796, + 1139 + ], + "minecraft:trapdoors": [ + 705, + 703, + 707, + 704, + 701, + 702, + 710, + 711, + 708, + 709, + 706, + 700 + ], + "minecraft:trim_materials": [ + 770, + 772, + 774, + 766, + 765, + 764, + 775, + 635, + 767, + 768 + ], + "minecraft:trim_templates": [ + 1223, + 1229, + 1221, + 1224, + 1220, + 1222, + 1228, + 1226, + 1219, + 1225, + 1227, + 1230, + 1231, + 1232, + 1233, + 1234 + ], + "minecraft:trimmable_armor": [ + 836, + 837, + 838, + 839, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 824, + 825, + 826, + 827, + 820, + 821, + 822, + 823, + 816, + 817, + 818, + 819, + 756 + ], + "c:uncolored_sandstone_blocks": [ + 169, + 170, + 171, + 261 + ], + "c:uncolored_sandstone_slabs": [ + 244, + 245, + 623 + ], + "c:uncolored_sandstone_stairs": [ + 358, + 606 + ], + "c:villager_job_sites": [ + 1154, + 1156, + 963, + 1157, + 964, + 1153, + 1158, + 1159, + 648, + 1145, + 1160, + 1155, + 1161 + ], + "minecraft:villager_plantable_seeds": [ + 813, + 1052, + 1051, + 1109, + 1106, + 1107 + ], + "minecraft:walls": [ + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 392, + 391, + 393, + 394, + 396, + 395, + 383 + ], + "minecraft:warped_stems": [ + 121, + 132, + 153, + 142 + ], + "minecraft:wart_blocks": [ + 495, + 496 + ], + "c:water_buckets": [ + 869 + ], + "c:white_dyes": [ + 904 + ], + "c:wooden_barrels": [ + 1154 + ], + "minecraft:wooden_buttons": [ + 662, + 663, + 664, + 665, + 666, + 668, + 671, + 672, + 669, + 670, + 667 + ], + "minecraft:wooden_doors": [ + 689, + 690, + 691, + 692, + 693, + 695, + 698, + 699, + 696, + 697, + 694 + ], + "minecraft:wooden_fences": [ + 289, + 293, + 295, + 290, + 291, + 292, + 298, + 299, + 296, + 297, + 294 + ], + "minecraft:wooden_pressure_plates": [ + 677, + 678, + 679, + 680, + 681, + 683, + 686, + 687, + 684, + 685, + 682 + ], + "minecraft:wooden_slabs": [ + 230, + 231, + 232, + 233, + 234, + 236, + 240, + 241, + 237, + 238, + 235 + ], + "minecraft:wooden_stairs": [ + 361, + 362, + 363, + 364, + 365, + 367, + 371, + 372, + 368, + 369, + 366 + ], + "minecraft:wooden_trapdoors": [ + 705, + 703, + 707, + 704, + 701, + 702, + 710, + 711, + 708, + 709, + 706 + ], + "minecraft:wool": [ + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195 + ], + "minecraft:wool_carpets": [ + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439 + ], + "c:yellow_dyes": [ + 908 + ] + }, + "minecraft:painting_variant": { + "minecraft:placeable": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 29 + ] + }, + "minecraft:point_of_interest_type": { + "minecraft:acquirable_job_site": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "minecraft:bee_home": [ + 15, + 16 + ], + "minecraft:village": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14 + ] + }, + "minecraft:worldgen/biome": { + "minecraft:allows_surface_slime_spawns": [ + 53, + 31 + ], + "minecraft:allows_tropical_fish_spawns_at_any_height": [ + 30 + ], + "c:aquatic": [ + 11, + 12, + 9, + 13, + 35, + 29, + 22, + 6, + 57, + 40, + 24 + ], + "c:aquatic_icy": [ + 24, + 11, + 22 + ], + "c:badlands": [ + 63, + 19, + 0 + ], + "c:beach": [ + 3, + 44, + 51 + ], + "c:birch_forest": [ + 4, + 36 + ], + "c:caves": [ + 10, + 15, + 30 + ], + "c:climate_cold": [ + 45, + 25, + 27, + 54, + 47, + 38, + 37, + 23, + 26 + ], + "c:climate_dry": [ + 34, + 48, + 7, + 58, + 2, + 63, + 19, + 0, + 14, + 41, + 42, + 62 + ], + "c:climate_hot": [ + 1, + 28, + 49, + 41, + 42, + 62, + 14, + 63, + 19, + 0, + 50, + 33, + 34, + 48, + 7, + 58, + 2 + ], + "c:climate_temperate": [ + 21, + 52, + 53, + 51, + 8, + 59, + 4, + 36, + 32, + 39 + ], + "c:climate_wet": [ + 11, + 12, + 9, + 13, + 35, + 29, + 22, + 6, + 57, + 40, + 24, + 31, + 53, + 30, + 1, + 28, + 49 + ], + "c:dead": [], + "c:deep_ocean": [ + 11, + 12, + 9, + 13 + ], + "c:desert": [ + 14 + ], + "c:end_islands": [], + "c:extreme_hills": [ + 60, + 61 + ], + "c:floral": [ + 52, + 32, + 20 + ], + "c:flower_forests": [ + 20 + ], + "c:forest": [ + 21, + 20, + 4, + 36, + 8, + 25 + ], + "minecraft:has_closer_water_fog": [ + 53, + 31 + ], + "minecraft:has_structure/ancient_city": [ + 10 + ], + "minecraft:has_structure/bastion_remnant": [ + 7, + 34, + 48, + 58 + ], + "minecraft:has_structure/buried_treasure": [ + 3, + 44 + ], + "minecraft:has_structure/desert_pyramid": [ + 14 + ], + "minecraft:has_structure/end_city": [ + 17, + 18 + ], + "minecraft:has_structure/igloo": [ + 47, + 45, + 46 + ], + "minecraft:has_structure/jungle_temple": [ + 1, + 28 + ], + "minecraft:has_structure/mineshaft": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57, + 40, + 24, + 3, + 44, + 32, + 23, + 27, + 50, + 46, + 5, + 61, + 59, + 60, + 54, + 47, + 37, + 38, + 1, + 28, + 49, + 21, + 20, + 4, + 36, + 8, + 25, + 51, + 33, + 26, + 62, + 14, + 41, + 45, + 39, + 52, + 53, + 31, + 42, + 15, + 30 + ], + "minecraft:has_structure/mineshaft_mesa": [ + 0, + 19, + 63 + ], + "minecraft:has_structure/nether_fortress": [ + 34, + 48, + 7, + 58, + 2 + ], + "minecraft:has_structure/nether_fossil": [ + 48 + ], + "minecraft:has_structure/ocean_monument": [ + 11, + 9, + 13, + 12 + ], + "minecraft:has_structure/ocean_ruin_cold": [ + 22, + 6, + 35, + 11, + 9, + 13 + ], + "minecraft:has_structure/ocean_ruin_warm": [ + 29, + 57, + 12 + ], + "minecraft:has_structure/pillager_outpost": [ + 14, + 39, + 41, + 45, + 54, + 32, + 23, + 27, + 50, + 46, + 5, + 25 + ], + "minecraft:has_structure/ruined_portal_desert": [ + 14 + ], + "minecraft:has_structure/ruined_portal_jungle": [ + 1, + 28, + 49 + ], + "minecraft:has_structure/ruined_portal_mountain": [ + 0, + 19, + 63, + 61, + 59, + 60, + 42, + 62, + 51, + 32, + 23, + 27, + 50, + 46, + 5 + ], + "minecraft:has_structure/ruined_portal_nether": [ + 34, + 48, + 7, + 58, + 2 + ], + "minecraft:has_structure/ruined_portal_ocean": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57 + ], + "minecraft:has_structure/ruined_portal_standard": [ + 3, + 44, + 40, + 24, + 54, + 47, + 37, + 38, + 21, + 20, + 4, + 36, + 8, + 25, + 33, + 26, + 15, + 30, + 41, + 45, + 39, + 52 + ], + "minecraft:has_structure/ruined_portal_swamp": [ + 53, + 31 + ], + "minecraft:has_structure/shipwreck": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57 + ], + "minecraft:has_structure/shipwreck_beached": [ + 3, + 44 + ], + "minecraft:has_structure/stronghold": [ + 33, + 11, + 22, + 9, + 6, + 13, + 35, + 12, + 29, + 57, + 51, + 53, + 31, + 46, + 45, + 44, + 60, + 25, + 61, + 47, + 59, + 54, + 39, + 32, + 3, + 21, + 38, + 20, + 4, + 8, + 42, + 41, + 28, + 0, + 14, + 63, + 27, + 50, + 24, + 40, + 26, + 37, + 52, + 36, + 49, + 1, + 19, + 62, + 5, + 23, + 15, + 30, + 10 + ], + "minecraft:has_structure/swamp_hut": [ + 53 + ], + "minecraft:has_structure/trail_ruins": [ + 54, + 47, + 37, + 38, + 36, + 28 + ], + "minecraft:has_structure/village_desert": [ + 14 + ], + "minecraft:has_structure/village_plains": [ + 39, + 32 + ], + "minecraft:has_structure/village_savanna": [ + 41 + ], + "minecraft:has_structure/village_snowy": [ + 45 + ], + "minecraft:has_structure/village_taiga": [ + 54 + ], + "minecraft:has_structure/woodland_mansion": [ + 8 + ], + "c:icy": [ + 23, + 26 + ], + "c:in_nether": [ + 34, + 48, + 7, + 58, + 2 + ], + "c:in_overworld": [ + 33, + 11, + 22, + 9, + 6, + 13, + 35, + 12, + 29, + 57, + 51, + 53, + 31, + 46, + 45, + 44, + 60, + 25, + 61, + 47, + 59, + 54, + 39, + 32, + 3, + 21, + 38, + 20, + 4, + 8, + 42, + 41, + 28, + 0, + 14, + 63, + 27, + 50, + 24, + 40, + 26, + 37, + 52, + 36, + 49, + 1, + 19, + 62, + 5, + 23, + 15, + 30, + 10 + ], + "c:in_the_end": [ + 55, + 17, + 18, + 43, + 16 + ], + "minecraft:increased_fire_burnout": [ + 1, + 33, + 31, + 46, + 23, + 27, + 53, + 28 + ], + "minecraft:is_badlands": [ + 0, + 19, + 63 + ], + "minecraft:is_beach": [ + 3, + 44 + ], + "minecraft:is_deep_ocean": [ + 11, + 9, + 13, + 12 + ], + "minecraft:is_end": [ + 55, + 17, + 18, + 43, + 16 + ], + "minecraft:is_forest": [ + 21, + 20, + 4, + 36, + 8, + 25 + ], + "minecraft:is_hill": [ + 61, + 59, + 60 + ], + "minecraft:is_jungle": [ + 1, + 28, + 49 + ], + "minecraft:is_mountain": [ + 32, + 23, + 27, + 50, + 46, + 5 + ], + "minecraft:is_nether": [ + 34, + 48, + 7, + 58, + 2 + ], + "minecraft:is_ocean": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57 + ], + "minecraft:is_overworld": [ + 33, + 11, + 22, + 9, + 6, + 13, + 35, + 12, + 29, + 57, + 51, + 53, + 31, + 46, + 45, + 44, + 60, + 25, + 61, + 47, + 59, + 54, + 39, + 32, + 3, + 21, + 38, + 20, + 4, + 8, + 42, + 41, + 28, + 0, + 14, + 63, + 27, + 50, + 24, + 40, + 26, + 37, + 52, + 36, + 49, + 1, + 19, + 62, + 5, + 23, + 15, + 30, + 10 + ], + "minecraft:is_river": [ + 40, + 24 + ], + "minecraft:is_savanna": [ + 41, + 42, + 62 + ], + "minecraft:is_taiga": [ + 54, + 47, + 37, + 38 + ], + "c:jungle": [ + 1, + 28, + 49 + ], + "c:mesa": [ + 63, + 19, + 0 + ], + "minecraft:mineshaft_blocking": [ + 10 + ], + "minecraft:more_frequent_drowned_spawns": [ + 40, + 24 + ], + "c:mountain": [ + 32, + 23, + 27, + 50, + 46, + 5 + ], + "c:mountain_peak": [ + 23, + 27, + 50 + ], + "c:mountain_slope": [ + 46 + ], + "c:mushroom": [ + 33 + ], + "c:nether_forests": [ + 58, + 7 + ], + "c:ocean": [ + 11, + 12, + 9, + 13, + 35, + 29, + 22, + 6, + 57 + ], + "c:plains": [ + 52, + 39 + ], + "minecraft:plays_underwater_music": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57, + 40, + 24 + ], + "minecraft:polar_bears_spawn_on_alternate_blocks": [ + 22, + 11 + ], + "minecraft:produces_corals_from_bonemeal": [ + 57 + ], + "minecraft:reduce_water_ambient_spawns": [ + 40, + 24 + ], + "minecraft:required_ocean_monument_surrounding": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57, + 40, + 24 + ], + "c:river": [ + 40, + 24 + ], + "c:savanna": [ + 41, + 42, + 62 + ], + "c:shallow_ocean": [ + 35, + 29, + 22, + 6, + 57 + ], + "minecraft:snow_golem_melts": [ + 0, + 2, + 7, + 14, + 19, + 34, + 41, + 42, + 48, + 58, + 62, + 63 + ], + "c:snowy": [ + 44, + 45, + 46, + 47 + ], + "c:snowy_plains": [ + 45 + ], + "minecraft:spawns_cold_variant_frogs": [ + 45, + 26, + 23, + 27, + 46, + 22, + 11, + 25, + 10, + 24, + 47, + 44, + 55, + 17, + 18, + 43, + 16 + ], + "minecraft:spawns_gold_rabbits": [ + 14 + ], + "minecraft:spawns_snow_foxes": [ + 45, + 26, + 22, + 47, + 24, + 44, + 23, + 27, + 46, + 25 + ], + "minecraft:spawns_warm_variant_frogs": [ + 14, + 57, + 1, + 28, + 49, + 41, + 42, + 62, + 34, + 48, + 7, + 58, + 2, + 0, + 19, + 63, + 31 + ], + "minecraft:spawns_white_rabbits": [ + 45, + 26, + 22, + 47, + 24, + 44, + 23, + 27, + 46, + 25 + ], + "c:stony_shores": [ + 51 + ], + "minecraft:stronghold_biased_to": [ + 39, + 52, + 45, + 26, + 14, + 21, + 20, + 4, + 8, + 36, + 37, + 38, + 54, + 47, + 41, + 42, + 61, + 60, + 59, + 62, + 28, + 49, + 1, + 0, + 19, + 63, + 32, + 25, + 46, + 23, + 27, + 50, + 33, + 15, + 30 + ], + "c:swamp": [ + 31, + 53 + ], + "c:taiga": [ + 54, + 47, + 37, + 38 + ], + "c:tree_coniferous": [ + 25, + 54, + 47, + 37, + 38 + ], + "c:tree_deciduous": [ + 21, + 59, + 20, + 4, + 8, + 36 + ], + "c:tree_jungle": [ + 1, + 28, + 49 + ], + "c:tree_savanna": [ + 41, + 42, + 62 + ], + "c:underground": [ + 10, + 15, + 30 + ], + "c:vegetation_dense": [ + 1, + 28, + 49, + 52 + ], + "c:vegetation_sparse": [ + 41, + 42, + 62, + 14, + 30 + ], + "c:void": [ + 56 + ], + "c:wasteland": [], + "minecraft:water_on_map_outlines": [ + 11, + 9, + 13, + 12, + 22, + 35, + 6, + 29, + 57, + 40, + 24, + 53, + 31 + ], + "c:windswept": [ + 61, + 60, + 59, + 62 + ], + "minecraft:without_patrol_spawns": [ + 33 + ], + "minecraft:without_wandering_trader_spawns": [ + 56 + ], + "minecraft:without_zombie_sieges": [ + 33 + ] + } +} \ No newline at end of file diff --git a/vendor/valence/crates/valence_registry/src/biome.rs b/vendor/valence/crates/valence_registry/src/biome.rs new file mode 100644 index 00000000..a72cf132 --- /dev/null +++ b/vendor/valence/crates/valence_registry/src/biome.rs @@ -0,0 +1,154 @@ +//! Contains biomes and the biome registry. Minecraft's default biomes are added +//! to the registry by default. +//! +//! ### **NOTE:** +//! - Modifying the biome registry after the server has started can +//! break invariants within instances and clients! Make sure there are no +//! instances or clients spawned before mutating. +//! - A biome named "minecraft:plains" must exist. Otherwise, vanilla clients +//! will be disconnected. + +use std::ops::{Deref, DerefMut}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use serde::{Deserialize, Serialize}; +use tracing::error; +use valence_ident::{Ident, ident}; +use valence_nbt::serde::CompoundSerializer; + +use crate::codec::{RegistryCodec, RegistryValue}; +use crate::{Registry, RegistryIdx, RegistrySet}; + +pub struct BiomePlugin; + +impl Plugin for BiomePlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_systems(PreStartup, load_default_biomes) + .add_systems(PostUpdate, update_biome_registry.before(RegistrySet)); + } +} + +fn load_default_biomes(mut reg: ResMut, codec: Res) { + let mut helper = move || -> anyhow::Result<()> { + for value in codec.registry(BiomeRegistry::KEY) { + let biome = Biome::deserialize(value.element.clone())?; + + reg.insert(value.name.clone(), biome); + } + + // Move "plains" to the front so that `BiomeId::default()` is the ID of plains. + reg.swap_to_front(ident!("plains")); + + Ok(()) + }; + + if let Err(e) = helper() { + error!("failed to load default biomes from registry codec: {e:#}"); + } +} + +fn update_biome_registry(reg: Res, mut codec: ResMut) { + if reg.is_changed() { + let biomes = codec.registry_mut(BiomeRegistry::KEY); + + biomes.clear(); + + biomes.extend(reg.iter().map(|(_, name, biome)| { + RegistryValue { + name, + element: biome + .serialize(CompoundSerializer) + .expect("failed to serialize biome"), + } + })); + } +} + +#[derive(Resource, Default, Debug)] +pub struct BiomeRegistry { + reg: Registry, +} + +impl BiomeRegistry { + pub const KEY: Ident = ident!("worldgen/biome"); +} + +impl Deref for BiomeRegistry { + type Target = Registry; + + fn deref(&self) -> &Self::Target { + &self.reg + } +} + +impl DerefMut for BiomeRegistry { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.reg + } +} + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)] +pub struct BiomeId(u32); + +impl BiomeId { + pub const DEFAULT: Self = BiomeId(0); +} + +impl RegistryIdx for BiomeId { + const MAX: usize = u32::MAX as _; + + #[inline] + fn to_index(self) -> usize { + self.0 as _ + } + + #[inline] + fn from_index(idx: usize) -> Self { + Self(idx as _) + } +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct Biome { + pub downfall: f32, + pub effects: BiomeEffects, + pub has_precipitation: bool, + pub temperature: f32, + // TODO: more stuff. +} + +#[derive(Serialize, Deserialize, Clone, Debug)] +pub struct BiomeEffects { + pub fog_color: u32, + pub sky_color: u32, + pub water_color: u32, + pub water_fog_color: u32, + #[serde(skip_serializing_if = "Option::is_none")] + pub grass_color: Option, + // TODO: more stuff. +} + +impl Default for Biome { + fn default() -> Self { + Self { + downfall: 0.4, + effects: BiomeEffects::default(), + has_precipitation: true, + temperature: 0.8, + } + } +} + +impl Default for BiomeEffects { + fn default() -> Self { + Self { + fog_color: 12638463, + sky_color: 7907327, + water_color: 4159204, + water_fog_color: 329011, + grass_color: None, + } + } +} diff --git a/vendor/valence/crates/valence_registry/src/codec.rs b/vendor/valence/crates/valence_registry/src/codec.rs new file mode 100644 index 00000000..1592dc20 --- /dev/null +++ b/vendor/valence/crates/valence_registry/src/codec.rs @@ -0,0 +1,137 @@ +use std::collections::BTreeMap; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use tracing::error; +use valence_ident::Ident; +use valence_nbt::{Compound, List, Value, compound}; + +use crate::RegistrySet; + +pub(super) fn build(app: &mut App) { + app.init_resource::() + .add_systems(PostUpdate, cache_registry_codec.in_set(RegistrySet)); +} + +/// Contains the registry codec sent to all players while joining. This contains +/// information for biomes and dimensions among other things. +/// +/// Generally, end users should not manipulate the registry codec directly. Use +/// one of the other registry resources instead. +#[derive(Resource, Debug)] +pub struct RegistryCodec { + pub registries: BTreeMap>, + // TODO: store this in binary form? + cached_codec: Compound, +} + +#[derive(Clone, Debug)] +pub struct RegistryValue { + pub name: Ident, + pub element: Compound, +} + +impl RegistryCodec { + pub fn cached_codec(&self) -> &Compound { + &self.cached_codec + } + + pub fn registry(&self, registry_key: Ident) -> &Vec { + self.registries + .get(registry_key.as_str()) + .unwrap_or_else(|| panic!("missing registry for {registry_key}")) + } + + pub fn registry_mut(&mut self, registry_key: Ident) -> &mut Vec { + self.registries + .get_mut(registry_key.as_str()) + .unwrap_or_else(|| panic!("missing registry for {registry_key}")) + } +} + +impl Default for RegistryCodec { + fn default() -> Self { + let codec = include_bytes!("../extracted/registry_codec.dat"); + let compound = valence_nbt::from_binary(&mut codec.as_slice()) + .expect("failed to decode vanilla registry codec") + .0; + + let mut registries = BTreeMap::new(); + + for (k, v) in compound { + let reg_name: Ident = Ident::new(k).expect("invalid registry name"); + let mut reg_values = vec![]; + + let Value::Compound(mut outer) = v else { + error!("registry {reg_name} is not a compound"); + continue; + }; + + let values = match outer.remove("value") { + Some(Value::List(List::Compound(values))) => values, + Some(Value::List(List::End)) => continue, + _ => { + error!("missing \"value\" compound in {reg_name}"); + continue; + } + }; + + for mut value in values { + let Some(Value::String(name)) = value.remove("name") else { + error!("missing \"name\" string in value for {reg_name}"); + continue; + }; + + let name = match Ident::new(name) { + Ok(n) => n, + Err(e) => { + error!("invalid registry value name \"{}\"", e.0); + continue; + } + }; + + let Some(Value::Compound(element)) = value.remove("element") else { + error!("missing \"element\" compound in value for {reg_name}"); + continue; + }; + + reg_values.push(RegistryValue { name, element }); + } + + registries.insert(reg_name, reg_values); + } + + Self { + registries, + // Cache will be created later. + cached_codec: Compound::new(), + } + } +} + +fn cache_registry_codec(codec: ResMut) { + if codec.is_changed() { + let codec = codec.into_inner(); + + codec.cached_codec.clear(); + + for (reg_name, reg) in &codec.registries { + let mut value = vec![]; + + for (id, v) in reg.iter().enumerate() { + value.push(compound! { + "id" => id as i32, + "name" => v.name.as_str(), + "element" => v.element.clone(), + }); + } + + let registry = compound! { + "type" => reg_name.as_str(), + "value" => List::Compound(value), + }; + + codec.cached_codec.insert(reg_name.as_str(), registry); + } + } +} diff --git a/vendor/valence/crates/valence_registry/src/dimension_type.rs b/vendor/valence/crates/valence_registry/src/dimension_type.rs new file mode 100644 index 00000000..ced9c69d --- /dev/null +++ b/vendor/valence/crates/valence_registry/src/dimension_type.rs @@ -0,0 +1,196 @@ +//! Contains dimension types and the dimension type registry. Minecraft's +//! default dimensions are added to the registry by default. +//! +//! ### **NOTE:** +//! - Modifying the dimension type registry after the server has started can +//! break invariants within instances and clients! Make sure there are no +//! instances or clients spawned before mutating. + +use std::ops::{Deref, DerefMut}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use serde::{Deserialize, Serialize}; +use tracing::error; +use valence_ident::{Ident, ident}; +use valence_nbt::serde::CompoundSerializer; + +use crate::codec::{RegistryCodec, RegistryValue}; +use crate::{Registry, RegistryIdx, RegistrySet}; +pub struct DimensionTypePlugin; + +impl Plugin for DimensionTypePlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_systems(PreStartup, load_default_dimension_types) + .add_systems( + PostUpdate, + update_dimension_type_registry.before(RegistrySet), + ); + } +} + +/// Loads the default dimension types from the registry codec. +fn load_default_dimension_types(mut reg: ResMut, codec: Res) { + let mut helper = move || -> anyhow::Result<()> { + for value in codec.registry(DimensionTypeRegistry::KEY) { + let mut dimension_type = DimensionType::deserialize(value.element.clone())?; + + // HACK: We don't have a lighting engine implemented. To avoid shrouding the + // world in darkness, give all dimensions the max ambient light. + dimension_type.ambient_light = 1.0; + + reg.insert(value.name.clone(), dimension_type); + } + + Ok(()) + }; + + if let Err(e) = helper() { + error!("failed to load default dimension types from registry codec: {e:#}"); + } +} + +/// Updates the registry codec as the dimension type registry is modified by +/// users. +fn update_dimension_type_registry( + reg: Res, + mut codec: ResMut, +) { + if reg.is_changed() { + let dimension_types = codec.registry_mut(DimensionTypeRegistry::KEY); + + dimension_types.clear(); + + dimension_types.extend(reg.iter().map(|(_, name, dim)| { + RegistryValue { + name, + element: dim + .serialize(CompoundSerializer) + .expect("failed to serialize dimension type"), + } + })); + } +} + +#[derive(Resource, Default, Debug)] +pub struct DimensionTypeRegistry { + reg: Registry, +} + +impl DimensionTypeRegistry { + pub const KEY: Ident = ident!("dimension_type"); +} + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Default, Debug)] +pub struct DimensionTypeId(u16); + +impl RegistryIdx for DimensionTypeId { + const MAX: usize = u16::MAX as _; + + fn to_index(self) -> usize { + self.0 as _ + } + + fn from_index(idx: usize) -> Self { + Self(idx as _) + } +} + +impl Deref for DimensionTypeRegistry { + type Target = Registry; + + fn deref(&self) -> &Self::Target { + &self.reg + } +} + +impl DerefMut for DimensionTypeRegistry { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.reg + } +} + +#[derive(Serialize, Deserialize, Clone, PartialEq, Debug)] +#[serde(deny_unknown_fields)] +pub struct DimensionType { + pub ambient_light: f32, + pub bed_works: bool, + pub coordinate_scale: f64, + pub effects: DimensionEffects, + #[serde(skip_serializing_if = "Option::is_none")] + pub fixed_time: Option, + pub has_ceiling: bool, + pub has_raids: bool, + pub has_skylight: bool, + pub height: i32, + pub infiniburn: String, + pub logical_height: i32, + pub min_y: i32, + pub monster_spawn_block_light_limit: i32, + pub monster_spawn_light_level: MonsterSpawnLightLevel, + pub natural: bool, + pub piglin_safe: bool, + pub respawn_anchor_works: bool, + pub ultrawarm: bool, +} + +impl Default for DimensionType { + fn default() -> Self { + Self { + ambient_light: 0.0, + bed_works: true, + coordinate_scale: 1.0, + effects: DimensionEffects::default(), + fixed_time: None, + has_ceiling: false, + has_raids: true, + has_skylight: true, + height: 384, + infiniburn: "#minecraft:infiniburn_overworld".into(), + logical_height: 384, + min_y: -64, + monster_spawn_block_light_limit: 0, + monster_spawn_light_level: MonsterSpawnLightLevel::Int(7), + natural: true, + piglin_safe: false, + respawn_anchor_works: false, + ultrawarm: false, + } + } +} + +/// Determines what skybox/fog effects to use in dimensions. +#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Default, Debug)] +pub enum DimensionEffects { + #[serde(rename = "minecraft:overworld")] + #[default] + Overworld, + #[serde(rename = "minecraft:the_nether")] + TheNether, + #[serde(rename = "minecraft:the_end")] + TheEnd, +} + +#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(untagged)] +pub enum MonsterSpawnLightLevel { + Int(i32), + Tagged(MonsterSpawnLightLevelTagged), +} + +#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(tag = "type", content = "value")] +pub enum MonsterSpawnLightLevelTagged { + #[serde(rename = "minecraft:uniform")] + Uniform { + min_inclusive: i32, + max_inclusive: i32, + }, +} + +impl From for MonsterSpawnLightLevel { + fn from(value: i32) -> Self { + Self::Int(value) + } +} diff --git a/vendor/valence/crates/valence_registry/src/lib.rs b/vendor/valence/crates/valence_registry/src/lib.rs new file mode 100644 index 00000000..cf9f0a46 --- /dev/null +++ b/vendor/valence/crates/valence_registry/src/lib.rs @@ -0,0 +1,189 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +pub mod biome; +pub mod codec; +pub mod dimension_type; +pub mod tags; + +use std::fmt::Debug; +use std::hash::Hash; +use std::marker::PhantomData; +use std::ops::{Index, IndexMut}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +pub use biome::BiomeRegistry; +pub use codec::RegistryCodec; +pub use dimension_type::DimensionTypeRegistry; +use indexmap::IndexMap; +use indexmap::map::Entry; +pub use tags::TagsRegistry; +use valence_ident::Ident; + +pub struct RegistryPlugin; + +/// The [`SystemSet`] where the [`RegistryCodec`] and [`TagsRegistry`] caches +/// are rebuilt. Systems that modify the registry codec or tags registry should +/// run _before_ this. +/// +/// This set lives in [`PostUpdate`]. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct RegistrySet; + +impl Plugin for RegistryPlugin { + fn build(&self, app: &mut App) { + app.configure_sets(PostUpdate, RegistrySet); + + codec::build(app); + tags::build(app); + } +} + +#[derive(Clone, Debug)] +pub struct Registry { + items: IndexMap, + _marker: PhantomData, +} + +impl Registry { + pub fn new() -> Self { + Self { + items: IndexMap::new(), + _marker: PhantomData, + } + } + + pub fn insert(&mut self, name: impl Into, item: V) -> Option { + if self.items.len() >= I::MAX { + // Too many items in the registry. + return None; + } + + let len = self.items.len(); + + match self.items.entry(name.into()) { + Entry::Occupied(_) => None, + Entry::Vacant(ve) => { + ve.insert(item); + Some(I::from_index(len)) + } + } + } + + pub fn swap_to_front(&mut self, name: Ident) { + if let Some(idx) = self.items.get_index_of(name.as_str()) { + self.items.swap_indices(0, idx); + } + } + + pub fn remove(&mut self, name: Ident) -> Option { + self.items.shift_remove(name.as_str()) + } + + pub fn clear(&mut self) { + self.items.clear(); + } + + pub fn get(&self, name: Ident) -> Option<&V> { + self.items.get(name.as_str()) + } + + pub fn get_mut(&mut self, name: Ident) -> Option<&mut V> { + self.items.get_mut(name.as_str()) + } + + pub fn index_of(&self, name: Ident) -> Option { + self.items.get_index_of(name.as_str()).map(I::from_index) + } + + pub fn iter(&self) -> impl DoubleEndedIterator + ExactSizeIterator + '_ { + self.items + .iter() + .enumerate() + .map(|(i, (k, v))| (I::from_index(i), k.clone(), v)) + } + + pub fn iter_mut( + &mut self, + ) -> impl DoubleEndedIterator + ExactSizeIterator + '_ { + self.items + .iter_mut() + .enumerate() + .map(|(i, (k, v))| (I::from_index(i), k.clone(), v)) + } +} + +impl Index for Registry { + type Output = V; + + fn index(&self, index: I) -> &Self::Output { + self.items + .get_index(index.to_index()) + .unwrap_or_else(|| panic!("out of bounds registry index of {}", index.to_index())) + .1 + } +} + +impl IndexMut for Registry { + fn index_mut(&mut self, index: I) -> &mut Self::Output { + self.items + .get_index_mut(index.to_index()) + .unwrap_or_else(|| panic!("out of bounds registry index of {}", index.to_index())) + .1 + } +} + +impl Index for Registry { + type Output = V; + + fn index(&self, index: Ident) -> &Self::Output { + if let Some(item) = self.items.get(index.as_str()) { + item + } else { + panic!("missing registry item with name '{index}'") + } + } +} + +impl IndexMut for Registry { + fn index_mut(&mut self, index: Ident) -> &mut Self::Output { + if let Some(item) = self.items.get_mut(index.as_str()) { + item + } else { + panic!("missing registry item with name '{index}'") + } + } +} + +impl Default for Registry { + fn default() -> Self { + Self { + items: IndexMap::new(), + _marker: PhantomData, + } + } +} + +pub trait RegistryIdx: Copy + Clone + PartialEq + Eq + PartialOrd + Ord + Hash + Debug { + const MAX: usize; + + fn to_index(self) -> usize; + fn from_index(idx: usize) -> Self; +} diff --git a/vendor/valence/crates/valence_registry/src/tags.rs b/vendor/valence/crates/valence_registry/src/tags.rs new file mode 100644 index 00000000..612b0e1e --- /dev/null +++ b/vendor/valence/crates/valence_registry/src/tags.rs @@ -0,0 +1,72 @@ +use std::borrow::Cow; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_protocol::encode::{PacketWriter, WritePacket}; +use valence_protocol::packets::play::SynchronizeTagsS2c; +pub use valence_protocol::packets::play::synchronize_tags_s2c::RegistryMap; +use valence_server_common::Server; + +use crate::RegistrySet; + +#[derive(Debug, Resource, Default)] +pub struct TagsRegistry { + pub registries: RegistryMap, + cached_packet: Vec, +} + +pub(super) fn build(app: &mut App) { + app.init_resource::() + .add_systems(PreStartup, init_tags_registry) + .add_systems(PostUpdate, cache_tags_packet.in_set(RegistrySet)); +} + +impl TagsRegistry { + fn build_synchronize_tags(&self) -> SynchronizeTagsS2c { + SynchronizeTagsS2c { + groups: Cow::Borrowed(&self.registries), + } + } + + /// Returns bytes of the cached [`SynchronizeTagsS2c`] packet. + pub fn sync_tags_packet(&self) -> &[u8] { + &self.cached_packet + } +} + +fn init_tags_registry(mut tags: ResMut) { + let registries = serde_json::from_str::(include_str!("../extracted/tags.json")) + .expect("tags.json must have expected structure"); + + tags.registries = registries; +} + +pub(crate) fn cache_tags_packet(server: Res, tags: ResMut) { + if tags.is_changed() { + let tags = tags.into_inner(); + let packet = tags.build_synchronize_tags(); + let mut bytes = vec![]; + let mut writer = PacketWriter::new(&mut bytes, server.compression_threshold()); + + writer.write_packet(&packet); + tags.cached_packet = bytes; + } +} + +#[cfg(test)] +mod tests { + /* TODO: move this to src/tests/ + #[test] + fn smoke_test() { + let mut app = bevy_app::App::new(); + app.add_plugins(RegistryPlugin); + // app.insert_resource(Server::default()); + app.update(); + + let tags_registry = app.world.get_resource::().unwrap(); + let packet = tags_registry.build_synchronize_tags(); + assert!(!packet.registries.is_empty()); + assert!(!tags_registry.cached_packet.is_empty()); + } + */ +} diff --git a/vendor/valence/crates/valence_scoreboard/Cargo.toml b/vendor/valence/crates/valence_scoreboard/Cargo.toml new file mode 100644 index 00000000..93c25fb2 --- /dev/null +++ b/vendor/valence/crates/valence_scoreboard/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "valence_scoreboard" +description = "Scoreboard support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_app.workspace = true +bevy_ecs.workspace = true +derive_more.workspace = true +valence_server.workspace = true +tracing.workspace = true diff --git a/vendor/valence/crates/valence_scoreboard/README.md b/vendor/valence/crates/valence_scoreboard/README.md new file mode 100644 index 00000000..886df9e3 --- /dev/null +++ b/vendor/valence/crates/valence_scoreboard/README.md @@ -0,0 +1,23 @@ +# valence_scoreboard + +This crate provides functionality for creating and managing scoreboards. In Minecraft, a scoreboard references an [`Objective`], which is a mapping from strings to scores. Typically, the string is a player name, and the score is a number of points, but the string can be any arbitrary string <= 40 chars, and the score can be any integer. + +In Valence, scoreboards obey the rules implied by [`EntityLayer`]s, meaning that every Objective must have an [`EntityLayerId`] associated with it. Scoreboards are only transmitted to clients if the [`EntityLayer`] is visible to the client. + +To create a scoreboard, spawn an [`ObjectiveBundle`]. The [`Objective`] component represents the identifier that the client uses to reference the scoreboard. + +Example: + +```rust +# use bevy_ecs::prelude::*; +use valence_scoreboard::*; +use valence_server::protocol::text::IntoText; + +fn spawn_scoreboard(mut commands: Commands) { + commands.spawn(ObjectiveBundle { + name: Objective::new("foo"), + display: ObjectiveDisplay("Foo".bold()), + ..Default::default() + }); +} +``` diff --git a/vendor/valence/crates/valence_scoreboard/src/components.rs b/vendor/valence/crates/valence_scoreboard/src/components.rs new file mode 100644 index 00000000..46974782 --- /dev/null +++ b/vendor/valence/crates/valence_scoreboard/src/components.rs @@ -0,0 +1,121 @@ +use std::collections::HashMap; + +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +use valence_server::entity::EntityLayerId; +use valence_server::protocol::packets::play::scoreboard_display_s2c::ScoreboardPosition; +use valence_server::protocol::packets::play::scoreboard_objective_update_s2c::ObjectiveRenderType; +use valence_server::text::IntoText; +use valence_server::Text; + +/// A string that identifies an objective. There is one scoreboard per +/// objective.It's generally not safe to modify this after it's been created. +/// Limited to 16 characters. +/// +/// Directly analogous to an Objective's Name. +#[derive(Debug, Clone, PartialEq, Eq, Hash, Component, Deref)] +pub struct Objective(pub(crate) String); + +impl Objective { + pub fn new(name: impl Into) -> Self { + let name = name.into(); + debug_assert!( + name.len() <= 16, + "Objective name {} is too long ({} > 16)", + name, + name.len() + ); + Self(name) + } + + pub fn name(&self) -> &str { + &self.0 + } +} + +/// Optional display name for an objective. If not present, the objective's name +/// is used. +#[derive(Debug, Clone, PartialEq, Component, Deref, DerefMut)] +pub struct ObjectiveDisplay(pub Text); + +/// A mapping of keys to their scores. +#[derive(Debug, Clone, Component, Default)] +pub struct ObjectiveScores(pub(crate) HashMap); + +impl ObjectiveScores { + pub fn new() -> Self { + Default::default() + } + + pub fn with_map(map: impl Into>) -> Self { + Self(map.into()) + } + + pub fn get(&self, key: &str) -> Option<&i32> { + self.0.get(key) + } + + pub fn get_mut(&mut self, key: &str) -> Option<&mut i32> { + self.0.get_mut(key) + } + + pub fn insert(&mut self, key: impl Into, value: i32) -> Option { + self.0.insert(key.into(), value) + } +} + +#[derive(Debug, Clone, Default, PartialEq, Component)] +pub struct OldObjectiveScores(pub(crate) HashMap); + +impl OldObjectiveScores { + pub fn diff<'a>(&'a self, scores: &'a ObjectiveScores) -> Vec<&'a str> { + let mut diff = Vec::new(); + + for (key, value) in &self.0 { + if scores.0.get(key) != Some(value) { + diff.push(key.as_str()); + } + } + + let new_keys = scores + .0 + .keys() + .filter(|key| !self.0.contains_key(key.as_str())) + .map(|key| key.as_str()); + + let removed_keys = self + .0 + .keys() + .filter(|key| !scores.0.contains_key(key.as_str())) + .map(|key| key.as_str()); + + diff.extend(new_keys); + diff.extend(removed_keys); + diff + } +} + +#[derive(Bundle)] +pub struct ObjectiveBundle { + pub name: Objective, + pub display: ObjectiveDisplay, + pub render_type: ObjectiveRenderType, + pub scores: ObjectiveScores, + pub old_scores: OldObjectiveScores, + pub position: ScoreboardPosition, + pub layer: EntityLayerId, +} + +impl Default for ObjectiveBundle { + fn default() -> Self { + Self { + name: Objective::new(""), + display: ObjectiveDisplay("".into_text()), + render_type: Default::default(), + scores: Default::default(), + old_scores: Default::default(), + position: Default::default(), + layer: Default::default(), + } + } +} diff --git a/vendor/valence/crates/valence_scoreboard/src/lib.rs b/vendor/valence/crates/valence_scoreboard/src/lib.rs new file mode 100644 index 00000000..6dee4416 --- /dev/null +++ b/vendor/valence/crates/valence_scoreboard/src/lib.rs @@ -0,0 +1,292 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::type_complexity)] + +mod components; +use std::collections::BTreeSet; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +pub use components::*; +use tracing::{debug, warn}; +use valence_server::client::{Client, OldVisibleEntityLayers, VisibleEntityLayers}; +use valence_server::entity::EntityLayerId; +use valence_server::layer::UpdateLayersPreClientSet; +use valence_server::protocol::packets::play::scoreboard_display_s2c::ScoreboardPosition; +use valence_server::protocol::packets::play::scoreboard_objective_update_s2c::{ + ObjectiveMode, ObjectiveRenderType, +}; +use valence_server::protocol::packets::play::scoreboard_player_update_s2c::ScoreboardPlayerUpdateAction; +use valence_server::protocol::packets::play::{ + ScoreboardDisplayS2c, ScoreboardObjectiveUpdateS2c, ScoreboardPlayerUpdateS2c, +}; +use valence_server::protocol::{VarInt, WritePacket}; +use valence_server::text::IntoText; +use valence_server::{Despawned, EntityLayer}; + +/// Provides all necessary systems to manage scoreboards. +pub struct ScoreboardPlugin; + +impl Plugin for ScoreboardPlugin { + fn build(&self, app: &mut App) { + app.configure_sets(PostUpdate, ScoreboardSet.before(UpdateLayersPreClientSet)); + + app.add_systems( + PostUpdate, + ( + create_or_update_objectives, + display_objectives.after(create_or_update_objectives), + ) + .in_set(ScoreboardSet), + ) + .add_systems( + PostUpdate, + remove_despawned_objectives.in_set(ScoreboardSet), + ) + .add_systems(PostUpdate, handle_new_clients.in_set(ScoreboardSet)) + .add_systems( + PostUpdate, + update_scores + .after(create_or_update_objectives) + .after(handle_new_clients) + .in_set(ScoreboardSet), + ); + } +} + +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct ScoreboardSet; + +fn create_or_update_objectives( + objectives: Query< + ( + Ref, + &ObjectiveDisplay, + &ObjectiveRenderType, + &EntityLayerId, + ), + Or<(Changed, Changed)>, + >, + mut layers: Query<&mut EntityLayer>, +) { + for (objective, display, render_type, entity_layer) in objectives.iter() { + if objective.name().is_empty() { + warn!("Objective name is empty"); + } + let mode = if objective.is_added() { + ObjectiveMode::Create { + objective_display_name: (&display.0).into_cow_text(), + render_type: *render_type, + } + } else { + ObjectiveMode::Update { + objective_display_name: (&display.0).into_cow_text(), + render_type: *render_type, + } + }; + + let Ok(mut layer) = layers.get_mut(entity_layer.0) else { + warn!( + "No layer found for entity layer ID {:?}, can't update scoreboard objective", + entity_layer + ); + continue; + }; + + layer.write_packet(&ScoreboardObjectiveUpdateS2c { + objective_name: &objective.0, + mode, + }); + } +} + +/// Must occur after `create_or_update_objectives`. +fn display_objectives( + objectives: Query< + (&Objective, Ref, &EntityLayerId), + Changed, + >, + mut layers: Query<&mut EntityLayer>, +) { + for (objective, position, entity_layer) in objectives.iter() { + let packet = ScoreboardDisplayS2c { + score_name: &objective.0, + position: *position, + }; + + let Ok(mut layer) = layers.get_mut(entity_layer.0) else { + warn!( + "No layer found for entity layer ID {:?}, can't update scoreboard display", + entity_layer + ); + continue; + }; + + layer.write_packet(&packet); + } +} + +fn remove_despawned_objectives( + mut commands: Commands, + objectives: Query<(Entity, &Objective, &EntityLayerId), With>, + mut layers: Query<&mut EntityLayer>, +) { + for (entity, objective, entity_layer) in objectives.iter() { + commands.entity(entity).despawn(); + let Ok(mut layer) = layers.get_mut(entity_layer.0) else { + warn!( + "No layer found for entity layer ID {:?}, can't remove scoreboard objective", + entity_layer + ); + continue; + }; + + layer.write_packet(&ScoreboardObjectiveUpdateS2c { + objective_name: &objective.0, + mode: ObjectiveMode::Remove, + }); + } +} + +fn handle_new_clients( + mut clients: Query< + (&mut Client, &VisibleEntityLayers, &OldVisibleEntityLayers), + Or<(Added, Changed)>, + >, + objectives: Query< + ( + &Objective, + &ObjectiveDisplay, + &ObjectiveRenderType, + &ScoreboardPosition, + &ObjectiveScores, + &EntityLayerId, + ), + Without, + >, +) { + // Remove objectives from the old visible layers that are not in the new visible + // layers. + for (mut client, visible_layers, old_visible_layers) in clients.iter_mut() { + let removed_layers: BTreeSet<_> = old_visible_layers + .get() + .difference(&visible_layers.0) + .collect(); + + for (objective, _, _, _, _, layer) in objectives.iter() { + if !removed_layers.contains(&layer.0) { + continue; + } + client.write_packet(&ScoreboardObjectiveUpdateS2c { + objective_name: &objective.0, + mode: ObjectiveMode::Remove, + }); + } + } + + // Add objectives from the new visible layers that are not in the old visible + // layers, or send all objectives if the client is new. + for (mut client, visible_layers, old_visible_layers) in clients.iter_mut() { + // not sure how to avoid the clone here + let added_layers = if client.is_added() { + debug!("client is new, sending all objectives"); + visible_layers.0.clone() + } else { + visible_layers + .0 + .difference(old_visible_layers.get()) + .copied() + .collect::>() + }; + + for (objective, display, render_type, position, scores, layer) in objectives.iter() { + if !added_layers.contains(&layer.0) { + continue; + } + + client.write_packet(&ScoreboardObjectiveUpdateS2c { + objective_name: &objective.0, + mode: ObjectiveMode::Create { + objective_display_name: (&display.0).into_cow_text(), + render_type: *render_type, + }, + }); + client.write_packet(&ScoreboardDisplayS2c { + score_name: &objective.0, + position: *position, + }); + + for (key, score) in &scores.0 { + let packet = ScoreboardPlayerUpdateS2c { + entity_name: key, + action: ScoreboardPlayerUpdateAction::Update { + objective_name: &objective.0, + objective_score: VarInt(*score), + }, + }; + + client.write_packet(&packet); + } + } + } +} + +fn update_scores( + mut objectives: Query< + ( + &Objective, + &ObjectiveScores, + &mut OldObjectiveScores, + &EntityLayerId, + ), + (Changed, Without), + >, + mut layers: Query<&mut EntityLayer>, +) { + for (objective, scores, mut old_scores, entity_layer) in objectives.iter_mut() { + let Ok(mut layer) = layers.get_mut(entity_layer.0) else { + warn!( + "No layer found for entity layer ID {:?}, can't update scores", + entity_layer + ); + continue; + }; + + for changed_key in old_scores.diff(scores) { + let action = match scores.0.get(changed_key) { + Some(score) => ScoreboardPlayerUpdateAction::Update { + objective_name: &objective.0, + objective_score: VarInt(*score), + }, + None => ScoreboardPlayerUpdateAction::Remove { + objective_name: &objective.0, + }, + }; + + let packet = ScoreboardPlayerUpdateS2c { + entity_name: changed_key, + action, + }; + + layer.write_packet(&packet); + } + + old_scores.0 = scores.0.clone(); + } +} diff --git a/vendor/valence/crates/valence_server/Cargo.toml b/vendor/valence/crates/valence_server/Cargo.toml new file mode 100644 index 00000000..25189c36 --- /dev/null +++ b/vendor/valence/crates/valence_server/Cargo.toml @@ -0,0 +1,33 @@ +[package] +name = "valence_server" +description = "The core of the Valence server" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +anyhow.workspace = true +bevy_app.workspace = true +bevy_ecs.workspace = true +bevy_utils.workspace = true # Needed for `ScheduleLabel` derive macro. +bitfield-struct.workspace = true +bytes.workspace = true +derive_more = { workspace = true, features = ["deref", "deref_mut", "from", "into"] } +valence_math.workspace = true +rand.workspace = true +tracing.workspace = true +uuid.workspace = true +byteorder.workspace = true +valence_bytes.workspace = true +valence_server_common.workspace = true +valence_entity.workspace = true +valence_nbt.workspace = true +valence_registry.workspace = true +valence_protocol.workspace = true +valence_generated.workspace = true +rustc-hash.workspace = true +parking_lot.workspace = true +arrayvec.workspace = true diff --git a/vendor/valence/crates/valence_server/README.md b/vendor/valence/crates/valence_server/README.md new file mode 100644 index 00000000..13c1fdc9 --- /dev/null +++ b/vendor/valence/crates/valence_server/README.md @@ -0,0 +1,5 @@ +# valence_server + +Defines the "core" of the Valence server that plugins depend on. If a plugin module here is large enough, it may be split off into its own crate to reduce compile times. + +The contents of `valence_server` are re-exported from the main `valence` crate, so end users should not interact with this crate directly. diff --git a/vendor/valence/crates/valence_server/src/abilities.rs b/vendor/valence/crates/valence_server/src/abilities.rs new file mode 100644 index 00000000..792715d5 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/abilities.rs @@ -0,0 +1,175 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +pub use valence_protocol::packets::play::player_abilities_s2c::PlayerAbilitiesFlags; +use valence_protocol::packets::play::{PlayerAbilitiesS2c, UpdatePlayerAbilitiesC2s}; +use valence_protocol::{GameMode, WritePacket}; + +use crate::client::{Client, UpdateClientsSet, update_game_mode}; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +/// [`Component`] that stores the player's flying speed ability. +/// +/// [`Default`] value: `0.05`. +#[derive(Component, Deref, DerefMut)] +pub struct FlyingSpeed(pub f32); + +impl Default for FlyingSpeed { + fn default() -> Self { + Self(0.05) + } +} + +/// [`Component`] that stores the player's field of view modifier ability. +/// The lower the value, the higher the field of view. +/// +/// [`Default`] value: `0.1`. +#[derive(Component, Deref, DerefMut)] +pub struct FovModifier(pub f32); + +impl Default for FovModifier { + fn default() -> Self { + Self(0.1) + } +} + +/// Send if the client sends [`UpdatePlayerAbilitiesC2s::StartFlying`] +#[derive(Event)] +pub struct PlayerStartFlyingEvent { + pub client: Entity, +} + +/// Send if the client sends [`UpdatePlayerAbilitiesC2s::StopFlying`] +#[derive(Event)] +pub struct PlayerStopFlyingEvent { + pub client: Entity, +} + +/// Order of execution: +/// 1. `update_game_mode`: Watch [`GameMode`] changes => Send +/// `GameStateChangeS2c` to update the client's gamemode +/// +/// 2. `update_client_player_abilities`: Watch [`PlayerAbilitiesFlags`], +/// [`FlyingSpeed`] and [`FovModifier`] changes => Send [`PlayerAbilitiesS2c`] +/// to update the client's abilities +/// +/// 3. `update_player_abilities`: Watch +/// [`GameMode`] changes => Update [`PlayerAbilitiesFlags`] according to the +/// [`GameMode`] +/// +/// 4. `update_server_player_abilities`: Watch +/// [`UpdatePlayerAbilitiesC2s`] packets => Update [`PlayerAbilitiesFlags`] +/// according to the packet +pub struct AbilitiesPlugin; + +impl Plugin for AbilitiesPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_event::() + .add_systems( + PostUpdate, + ( + update_client_player_abilities, + update_player_abilities.before(update_client_player_abilities), + ) + .in_set(UpdateClientsSet) + .after(update_game_mode), + ) + .add_systems(EventLoopPreUpdate, update_server_player_abilities); + } +} + +fn update_client_player_abilities( + mut clients_query: Query< + ( + &mut Client, + &PlayerAbilitiesFlags, + &FlyingSpeed, + &FovModifier, + ), + Or<( + Changed, + Changed, + Changed, + )>, + >, +) { + for (mut client, flags, flying_speed, fov_modifier) in clients_query.iter_mut() { + client.write_packet(&PlayerAbilitiesS2c { + flags: *flags, + flying_speed: flying_speed.0, + fov_modifier: fov_modifier.0, + }) + } +} + +/// /!\ This system does not trigger change detection on +/// [`PlayerAbilitiesFlags`] +fn update_player_abilities( + mut player_start_flying_event_writer: EventWriter, + mut player_stop_flying_event_writer: EventWriter, + mut client_query: Query<(Entity, &mut PlayerAbilitiesFlags, &GameMode), Changed>, +) { + for (entity, mut mut_flags, gamemode) in client_query.iter_mut() { + let flags = mut_flags.bypass_change_detection(); + match gamemode { + GameMode::Creative => { + flags.set_invulnerable(true); + flags.set_allow_flying(true); + flags.set_instant_break(true); + } + GameMode::Spectator => { + flags.set_invulnerable(true); + flags.set_allow_flying(true); + flags.set_instant_break(false); + flags.set_flying(true); + player_start_flying_event_writer.send(PlayerStartFlyingEvent { client: entity }); + } + GameMode::Survival => { + flags.set_invulnerable(false); + flags.set_allow_flying(false); + flags.set_instant_break(false); + flags.set_flying(false); + player_stop_flying_event_writer.send(PlayerStopFlyingEvent { client: entity }); + } + GameMode::Adventure => { + flags.set_invulnerable(false); + flags.set_allow_flying(false); + flags.set_instant_break(false); + flags.set_flying(false); + player_stop_flying_event_writer.send(PlayerStopFlyingEvent { client: entity }); + } + } + } +} + +/// /!\ This system does not trigger change detection on +/// [`PlayerAbilitiesFlags`] +fn update_server_player_abilities( + mut packet_events: EventReader, + mut player_start_flying_event_writer: EventWriter, + mut player_stop_flying_event_writer: EventWriter, + mut client_query: Query<&mut PlayerAbilitiesFlags>, +) { + for packets in packet_events.read() { + if let Some(pkt) = packets.decode::() { + if let Ok(mut mut_flags) = client_query.get_mut(packets.client) { + let flags = mut_flags.bypass_change_detection(); + match pkt { + UpdatePlayerAbilitiesC2s::StartFlying => { + flags.set_flying(true); + player_start_flying_event_writer.send(PlayerStartFlyingEvent { + client: packets.client, + }); + } + UpdatePlayerAbilitiesC2s::StopFlying => { + flags.set_flying(false); + player_stop_flying_event_writer.send(PlayerStopFlyingEvent { + client: packets.client, + }); + } + } + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/action.rs b/vendor/valence/crates/valence_server/src/action.rs new file mode 100644 index 00000000..b0f462c6 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/action.rs @@ -0,0 +1,106 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::Deref; +use valence_protocol::packets::play::player_action_c2s::PlayerAction; +use valence_protocol::packets::play::{PlayerActionC2s, PlayerActionResponseS2c}; +use valence_protocol::{BlockPos, Direction, VarInt, WritePacket}; + +use crate::client::{Client, UpdateClientsSet}; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct ActionPlugin; + +impl Plugin for ActionPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_player_action) + .add_systems( + PostUpdate, + acknowledge_player_actions.in_set(UpdateClientsSet), + ); + } +} + +#[derive(Event, Copy, Clone, Debug)] +pub struct DiggingEvent { + pub client: Entity, + pub position: BlockPos, + pub direction: Direction, + pub state: DiggingState, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum DiggingState { + Start, + Abort, + Stop, +} + +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref)] +pub struct ActionSequence(i32); + +impl ActionSequence { + pub fn update(&mut self, val: i32) { + self.0 = self.0.max(val); + } + + pub fn get(&self) -> i32 { + self.0 + } +} + +fn handle_player_action( + mut clients: Query<&mut ActionSequence>, + mut packets: EventReader, + mut digging_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut seq) = clients.get_mut(packet.client) { + seq.update(pkt.sequence.0); + } + + // TODO: check that digging is happening within configurable distance to client. + // TODO: check that blocks are being broken at the appropriate speeds. + + match pkt.action { + PlayerAction::StartDestroyBlock => digging_events.send(DiggingEvent { + client: packet.client, + position: pkt.position, + direction: pkt.direction, + state: DiggingState::Start, + }), + PlayerAction::AbortDestroyBlock => digging_events.send(DiggingEvent { + client: packet.client, + position: pkt.position, + direction: pkt.direction, + state: DiggingState::Abort, + }), + PlayerAction::StopDestroyBlock => digging_events.send(DiggingEvent { + client: packet.client, + position: pkt.position, + direction: pkt.direction, + state: DiggingState::Stop, + }), + PlayerAction::DropAllItems => {} + PlayerAction::DropItem => {} + PlayerAction::ReleaseUseItem => {} + PlayerAction::SwapItemWithOffhand => {} + } + } + } +} + +fn acknowledge_player_actions( + mut clients: Query<(&mut Client, &mut ActionSequence), Changed>, +) { + for (mut client, mut action_seq) in &mut clients { + if action_seq.0 != 0 { + client.write_packet(&PlayerActionResponseS2c { + sequence: VarInt(action_seq.0), + }); + + action_seq.0 = 0; + } + } +} diff --git a/vendor/valence/crates/valence_server/src/brand.rs b/vendor/valence/crates/valence_server/src/brand.rs new file mode 100644 index 00000000..ff8d377a --- /dev/null +++ b/vendor/valence/crates/valence_server/src/brand.rs @@ -0,0 +1,30 @@ +use valence_bytes::CowBytes; +use valence_protocol::packets::play::CustomPayloadS2c; +use valence_protocol::raw::RawBytes; +use valence_protocol::{Bounded, Encode, VarInt, WritePacket, ident}; + +pub trait SetBrand { + /// Sets the brand of the server. + /// + /// The Brand is displayed to the client in the F3 screen + /// and is often used to display the server name. + /// Any valid &str can be used. + /// + /// However, the legacy formatting codes are used, + /// which means that while color and other formatting can technically be + /// used, it needs to use the § character, which needs to be encoded as + /// 0xC2, 0xA7. + fn set_brand(&mut self, brand: &str); +} + +impl SetBrand for T { + fn set_brand(&mut self, brand: &str) { + let mut buf = vec![]; + let _ = VarInt(brand.len() as _).encode(&mut buf); + buf.extend_from_slice(brand.as_bytes()); + self.write_packet(&CustomPayloadS2c { + channel: ident!("minecraft:brand"), + data: Bounded(RawBytes(CowBytes::from(buf))), + }); + } +} diff --git a/vendor/valence/crates/valence_server/src/chunk_view.rs b/vendor/valence/crates/valence_server/src/chunk_view.rs new file mode 100644 index 00000000..134949fa --- /dev/null +++ b/vendor/valence/crates/valence_server/src/chunk_view.rs @@ -0,0 +1,102 @@ +use valence_generated::chunk_view::{CHUNK_VIEW_LUT, EXTRA_VIEW_RADIUS, MAX_VIEW_DIST}; +use valence_protocol::ChunkPos; + +/// Represents the set of all chunk positions that a client can see, defined by +/// a center chunk position `pos` and view distance `dist`. +#[derive(Copy, Clone, PartialEq, Eq, Default, Debug)] +pub struct ChunkView { + /// The center position of this chunk view. + pub pos: ChunkPos, + dist: u8, +} + +impl ChunkView { + /// Creates a new chunk view. `dist` is clamped to the range + /// 0..[MAX_VIEW_DIST]. + pub const fn new(pos: ChunkPos, dist: u8) -> Self { + Self { + pos, + dist: if dist > MAX_VIEW_DIST { + MAX_VIEW_DIST + } else { + dist + }, + } + } + + pub const fn with_dist(self, dist: u8) -> Self { + Self::new(self.pos, dist) + } + + pub const fn dist(self) -> u8 { + self.dist + } + + pub const fn contains(self, pos: ChunkPos) -> bool { + let true_dist = self.dist as u64 + EXTRA_VIEW_RADIUS as u64; + self.pos.distance_squared(pos) <= true_dist * true_dist + } + + /// Returns an iterator over all the chunk positions in this view. Positions + /// are sorted by the distance to [`pos`](Self::pos) in ascending order. + pub fn iter(self) -> impl DoubleEndedIterator + ExactSizeIterator + Clone { + CHUNK_VIEW_LUT[self.dist as usize] + .iter() + .map(move |&(x, z)| ChunkPos { + x: self.pos.x + x as i32, + z: self.pos.z + z as i32, + }) + } + + /// Returns an iterator over all the chunk positions in `self`, excluding + /// the positions that overlap with `other`. Positions are sorted by the + /// distance to [`pos`](Self::pos) in ascending order. + pub fn diff(self, other: Self) -> impl DoubleEndedIterator + Clone { + self.iter().filter(move |&p| !other.contains(p)) + } + + /// Returns a `(min, max)` tuple describing the tight axis-aligned bounding + /// box for this view. All chunk positions in the view are contained in the + /// bounding box. + /// + /// # Examples + /// + /// ``` + /// use valence_server::{ChunkPos, ChunkView}; + /// + /// let view = ChunkView::new(ChunkPos::new(5, -4), 16); + /// let (min, max) = view.bounding_box(); + /// + /// for pos in view.iter() { + /// assert!(pos.x >= min.x && pos.x <= max.x && pos.z >= min.z && pos.z <= max.z); + /// } + /// ``` + pub fn bounding_box(self) -> (ChunkPos, ChunkPos) { + let r = self.dist as i32 + EXTRA_VIEW_RADIUS; + + ( + ChunkPos::new(self.pos.x - r, self.pos.z - r), + ChunkPos::new(self.pos.x + r, self.pos.z + r), + ) + } +} + +#[cfg(test)] +mod tests { + use std::collections::BTreeSet; + + use super::*; + + #[test] + fn chunk_view_contains() { + let view = ChunkView::new(ChunkPos::new(0, 0), 32); + let positions = BTreeSet::from_iter(view.iter()); + + for z in -64..64 { + for x in -64..64 { + let p = ChunkPos::new(x, z); + assert_eq!(view.contains(p), positions.contains(&p), "{p:?}"); + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/client.rs b/vendor/valence/crates/valence_server/src/client.rs new file mode 100644 index 00000000..540affad --- /dev/null +++ b/vendor/valence/crates/valence_server/src/client.rs @@ -0,0 +1,1210 @@ +use std::borrow::Cow; +use std::collections::BTreeSet; +use std::fmt; +use std::net::IpAddr; +use std::time::Instant; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::query::WorldQuery; +use bevy_ecs::system::Command; +use byteorder::{NativeEndian, ReadBytesExt}; +use bytes::{Bytes, BytesMut}; +use derive_more::{Deref, DerefMut, From, Into}; +use tracing::warn; +use uuid::Uuid; +use valence_bytes::CowBytes; +use valence_entity::attributes::{EntityAttributes, TrackedEntityAttributes}; +use valence_entity::living::Health; +use valence_entity::player::{Food, PlayerEntityBundle, Saturation}; +use valence_entity::query::EntityInitQuery; +use valence_entity::tracked_data::TrackedData; +use valence_entity::{ + ClearEntityChangesSet, EntityId, EntityStatus, OldPosition, Position, Velocity, +}; +use valence_math::{DVec3, Vec3}; +use valence_protocol::encode::{PacketEncoder, WritePacket}; +use valence_protocol::packets::play::chunk_biome_data_s2c::ChunkBiome; +use valence_protocol::packets::play::game_state_change_s2c::GameEventKind; +use valence_protocol::packets::play::particle_s2c::Particle; +use valence_protocol::packets::play::{ + ChunkBiomeDataS2c, ChunkLoadDistanceS2c, ChunkRenderDistanceCenterS2c, DeathMessageS2c, + DisconnectS2c, EntitiesDestroyS2c, EntityAttributesS2c, EntityStatusS2c, + EntityTrackerUpdateS2c, EntityVelocityUpdateS2c, GameStateChangeS2c, HealthUpdateS2c, + ParticleS2c, PlaySoundS2c, UnloadChunkS2c, +}; +use valence_protocol::profile::Property; +use valence_protocol::raw::RawBytes; +use valence_protocol::sound::{Sound, SoundCategory, SoundId}; +use valence_protocol::text::{IntoText, Text}; +use valence_protocol::var_int::VarInt; +use valence_protocol::{BlockPos, ChunkPos, Encode, GameMode, Packet}; +use valence_registry::RegistrySet; +use valence_server_common::{Despawned, UniqueId}; + +use crate::ChunkView; +use crate::layer::{ChunkLayer, EntityLayer, UpdateLayersPostClientSet, UpdateLayersPreClientSet}; + +pub struct ClientPlugin; + +/// The [`SystemSet`] in [`PostUpdate`] where clients have their packet buffer +/// flushed. Any system that writes packets to clients should happen _before_ +/// this. Otherwise, the data will arrive one tick late. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct FlushPacketsSet; + +/// The [`SystemSet`] in [`PreUpdate`] where new clients should be +/// spawned. Systems that need to perform initialization work on clients before +/// users get access to it should run _after_ this set. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct SpawnClientsSet; + +/// The system set where various facets of the client are updated. Systems that +/// modify layers should run _before_ this. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct UpdateClientsSet; + +impl Plugin for ClientPlugin { + fn build(&self, app: &mut App) { + app.add_systems( + PostUpdate, + ( + ( + crate::spawn::initial_join.after(RegistrySet), + update_chunk_load_dist, + handle_layer_messages.after(update_chunk_load_dist), + update_view_and_layers + .after(crate::spawn::initial_join) + .after(handle_layer_messages), + cleanup_chunks_after_client_despawn.after(update_view_and_layers), + crate::spawn::update_respawn_position.after(update_view_and_layers), + crate::spawn::respawn.after(crate::spawn::update_respawn_position), + update_old_view_dist.after(update_view_and_layers), + update_game_mode, + update_food_saturation_health, + update_tracked_data, + init_tracked_data, + update_tracked_attributes, + init_tracked_attributes, + ) + .in_set(UpdateClientsSet), + flush_packets.in_set(FlushPacketsSet), + ), + ) + .configure_sets(PreUpdate, SpawnClientsSet) + .configure_sets( + PostUpdate, + ( + UpdateClientsSet + .after(UpdateLayersPreClientSet) + .before(UpdateLayersPostClientSet) + .before(FlushPacketsSet), + ClearEntityChangesSet.after(UpdateClientsSet), + FlushPacketsSet, + ), + ); + } +} + +/// The bundle of components needed for clients to function. All components are +/// required unless otherwise stated. +#[derive(Bundle)] +pub struct ClientBundle { + pub marker: ClientMarker, + pub client: Client, + pub settings: crate::client_settings::ClientSettings, + pub entity_remove_buf: EntityRemoveBuf, + pub username: Username, + pub ip: Ip, + pub properties: Properties, + pub respawn_pos: crate::spawn::RespawnPosition, + pub op_level: crate::op_level::OpLevel, + pub action_sequence: crate::action::ActionSequence, + pub view_distance: ViewDistance, + pub old_view_distance: OldViewDistance, + pub visible_chunk_layer: VisibleChunkLayer, + pub old_visible_chunk_layer: OldVisibleChunkLayer, + pub visible_entity_layers: VisibleEntityLayers, + pub old_visible_entity_layers: OldVisibleEntityLayers, + pub keepalive_state: crate::keepalive::KeepaliveState, + pub ping: crate::keepalive::Ping, + pub teleport_state: crate::teleport::TeleportState, + pub game_mode: GameMode, + pub prev_game_mode: crate::spawn::PrevGameMode, + pub death_location: crate::spawn::DeathLocation, + pub is_hardcore: crate::spawn::IsHardcore, + pub hashed_seed: crate::spawn::HashedSeed, + pub reduced_debug_info: crate::spawn::ReducedDebugInfo, + pub has_respawn_screen: crate::spawn::HasRespawnScreen, + pub is_debug: crate::spawn::IsDebug, + pub is_flat: crate::spawn::IsFlat, + pub portal_cooldown: crate::spawn::PortalCooldown, + pub flying_speed: crate::abilities::FlyingSpeed, + pub fov_modifier: crate::abilities::FovModifier, + pub player_abilities_flags: crate::abilities::PlayerAbilitiesFlags, + pub player: PlayerEntityBundle, +} + +impl ClientBundle { + pub fn new(args: ClientBundleArgs) -> Self { + Self { + marker: ClientMarker, + client: Client { + conn: args.conn, + enc: args.enc, + }, + settings: Default::default(), + entity_remove_buf: Default::default(), + username: Username(args.username), + ip: Ip(args.ip), + properties: Properties(args.properties), + respawn_pos: Default::default(), + op_level: Default::default(), + action_sequence: Default::default(), + view_distance: Default::default(), + old_view_distance: OldViewDistance(2), + visible_chunk_layer: Default::default(), + old_visible_chunk_layer: OldVisibleChunkLayer(Entity::PLACEHOLDER), + visible_entity_layers: Default::default(), + old_visible_entity_layers: OldVisibleEntityLayers(BTreeSet::new()), + keepalive_state: crate::keepalive::KeepaliveState::new(), + ping: Default::default(), + teleport_state: crate::teleport::TeleportState::new(), + game_mode: GameMode::default(), + prev_game_mode: Default::default(), + death_location: Default::default(), + is_hardcore: Default::default(), + is_flat: Default::default(), + has_respawn_screen: Default::default(), + hashed_seed: Default::default(), + reduced_debug_info: Default::default(), + is_debug: Default::default(), + portal_cooldown: Default::default(), + flying_speed: Default::default(), + fov_modifier: Default::default(), + player_abilities_flags: Default::default(), + player: PlayerEntityBundle { + uuid: UniqueId(args.uuid), + ..Default::default() + }, + } + } +} + +/// Arguments for [`ClientBundle::new`]. +pub struct ClientBundleArgs { + /// The username for the client. + pub username: String, + /// UUID of the client. + pub uuid: Uuid, + /// IP address of the client. + pub ip: IpAddr, + /// Properties of this client from the game profile. + pub properties: Vec, + /// The abstract socket connection. + pub conn: Box, + /// The packet encoder to use. This should be in sync with [`Self::conn`]. + pub enc: PacketEncoder, +} + +/// Marker [`Component`] for client entities. This component should exist even +/// if the client is disconnected. +#[derive(Component, Copy, Clone)] +pub struct ClientMarker; + +/// The main client component. Contains the underlying network connection and +/// packet buffer. +/// +/// The component is removed when the client is disconnected. You are allowed to +/// remove the component yourself. +#[derive(Component)] +pub struct Client { + conn: Box, + pub(crate) enc: PacketEncoder, +} + +/// Represents the bidirectional packet channel between the server and a client +/// in the "play" state. +pub trait ClientConnection: Send + Sync + 'static { + /// Sends encoded clientbound packet data. This function must not block and + /// the data should be sent as soon as possible. + fn try_send(&mut self, bytes: BytesMut) -> anyhow::Result<()>; + /// Receives the next pending serverbound packet. This must return + /// immediately without blocking. + fn try_recv(&mut self) -> anyhow::Result>; + /// The number of pending packets waiting to be received via + /// [`Self::try_recv`]. + fn len(&self) -> usize; + + fn is_empty(&self) -> bool { + self.len() == 0 + } +} + +#[derive(Clone, Debug)] +pub struct ReceivedPacket { + /// The moment in time this packet arrived. This is _not_ the instant this + /// packet was returned from [`ClientConnection::try_recv`]. + pub timestamp: Instant, + /// This packet's ID. + pub id: i32, + /// The content of the packet, excluding the leading varint packet ID. + pub body: Bytes, +} + +impl Drop for Client { + fn drop(&mut self) { + _ = self.flush_packets(); + } +} + +/// Writes packets into this client's packet buffer. The buffer is flushed at +/// the end of the tick. +impl WritePacket for Client { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.enc.write_packet_fallible(packet) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.enc.write_packet_bytes(bytes) + } +} + +impl Client { + pub fn connection(&self) -> &dyn ClientConnection { + self.conn.as_ref() + } + + pub fn connection_mut(&mut self) -> &mut dyn ClientConnection { + self.conn.as_mut() + } + + /// Flushes the packet queue to the underlying connection. + /// + /// This is called automatically at the end of the tick and when the client + /// is dropped. Unless you're in a hurry, there's usually no reason to + /// call this method yourself. + /// + /// Returns an error if flushing was unsuccessful. + pub fn flush_packets(&mut self) -> anyhow::Result<()> { + let bytes = self.enc.take(); + if !bytes.is_empty() { + self.conn.try_send(bytes) + } else { + Ok(()) + } + } + + /// Kills the client and shows `message` on the death screen. If an entity + /// killed the player, you should supply it as `killer`. + pub fn kill<'a>(&mut self, message: impl IntoText<'a>) { + self.write_packet(&DeathMessageS2c { + player_id: VarInt(0), + message: message.into_cow_text(), + }); + } + + /// Respawns client. Optionally can roll the credits before respawning. + pub fn win_game(&mut self, show_credits: bool) { + self.write_packet(&GameStateChangeS2c { + kind: GameEventKind::WinGame, + value: if show_credits { 1.0 } else { 0.0 }, + }); + } + + /// Puts a particle effect at the given position, only for this client. + pub fn play_particle( + &mut self, + particle: &Particle, + long_distance: bool, + position: impl Into, + offset: impl Into, + max_speed: f32, + count: i32, + ) { + self.write_packet(&ParticleS2c { + particle: Cow::Borrowed(particle), + long_distance, + position: position.into(), + offset: offset.into(), + max_speed, + count, + }) + } + + /// Plays a sound effect at the given position, only for this client. + pub fn play_sound( + &mut self, + sound: Sound, + category: SoundCategory, + position: impl Into, + volume: f32, + pitch: f32, + ) { + let position = position.into(); + + self.write_packet(&PlaySoundS2c { + id: SoundId::Direct { + id: sound.to_ident().into(), + range: None, + }, + category, + position: (position * 8.0).as_ivec3(), + volume, + pitch, + seed: rand::random(), + }); + } + + /// `velocity` is in m/s. + pub fn set_velocity(&mut self, velocity: impl Into) { + self.write_packet(&EntityVelocityUpdateS2c { + entity_id: VarInt(0), + velocity: Velocity(velocity.into()).to_packet_units(), + }); + } + + /// Triggers an [`EntityStatus`]. + /// + /// The status is only visible to this client. + pub fn trigger_status(&mut self, status: EntityStatus) { + self.write_packet(&EntityStatusS2c { + entity_id: 0, + entity_status: status as u8, + }); + } +} + +/// A [`Command`] to disconnect a [`Client`] with a displayed reason. +#[derive(Clone, PartialEq, Debug)] +pub struct DisconnectClient { + pub client: Entity, + pub reason: Text, +} + +impl Command for DisconnectClient { + fn apply(self, world: &mut World) { + if let Some(mut entity) = world.get_entity_mut(self.client) { + if let Some(mut client) = entity.get_mut::() { + client.write_packet(&DisconnectS2c { + reason: self.reason.into(), + }); + + // Despawned will be removed at the end of the tick, this way, the packets have + // time to be sent. + entity.insert(Despawned); + } + } + } +} + +/// Contains a list of Minecraft entities that need to be despawned. Entity IDs +/// in this list will be despawned all at once at the end of the tick. +/// +/// You should not need to use this directly under normal circumstances. +#[derive(Component, Default, Debug)] +pub struct EntityRemoveBuf(Vec); + +impl EntityRemoveBuf { + pub fn push(&mut self, entity_id: i32) { + debug_assert!( + entity_id != 0, + "removing entity with protocol ID 0 (which should be reserved for clients)" + ); + + self.0.push(VarInt(entity_id)); + } + + /// Sends the entity remove packet and clears the buffer. Does nothing if + /// the buffer is empty. + pub fn send_and_clear(&mut self, mut w: impl WritePacket) { + if !self.0.is_empty() { + w.write_packet(&EntitiesDestroyS2c { + entity_ids: Cow::Borrowed(&self.0), + }); + + self.0.clear(); + } + } +} + +#[derive(Component, Clone, PartialEq, Eq, Default, Debug, Deref)] +pub struct Username(pub String); + +impl fmt::Display for Username { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.0.fmt(f) + } +} + +/// Player properties from the game profile. +#[derive(Component, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut, From, Into)] +pub struct Properties(pub Vec); + +impl Properties { + /// Finds the property with the name "textures". + pub fn textures(&self) -> Option<&Property> { + self.0.iter().find(|p| p.name == "textures".into()) + } + + /// Finds the property with the name "textures" mutably. + pub fn textures_mut(&mut self) -> Option<&mut Property> { + self.0.iter_mut().find(|p| p.name == "textures".into()) + } + + /// Returns the value of the "textures" property. It's a base64-encoded + /// JSON string that contains the skin and cape URLs. + pub fn skin(&self) -> Option<&str> { + self.textures().map(|p| p.value.as_str()) + } + + /// Sets the value of the "textures" property, or adds it if it does not + /// exist. Can be used for custom skins on player entities. + /// + /// `signature` is the Yggdrasil signature for the texture data. It is + /// required if you want the skin to show up on vanilla Notchian + /// clients. You can't sign skins yourself, so you'll have to get it from + /// Mojang. + pub fn set_skin(&mut self, skin: impl Into, signature: impl Into) { + if let Some(prop) = self.textures_mut() { + prop.value = skin.into().into(); + prop.signature = Some(signature.into().into()); + } else { + self.0.push(Property { + name: "textures".into(), + value: skin.into().into(), + signature: Some(signature.into().into()), + }); + } + } +} + +#[derive(Clone, PartialEq, Eq, Debug)] +pub struct PropertyValue { + pub value: String, + pub signature: Option, +} + +#[derive(Component, Clone, PartialEq, Eq, Debug, Deref)] +pub struct Ip(pub IpAddr); + +#[derive(Component, Clone, PartialEq, Eq, Debug, Deref)] +pub struct ViewDistance(u8); + +impl ViewDistance { + pub fn new(dist: u8) -> Self { + let mut new = Self(0); + new.set(dist); + new + } + + pub fn get(&self) -> u8 { + self.0 + } + + /// `dist` is clamped to `2..=32`. + pub fn set(&mut self, dist: u8) { + self.0 = dist.clamp(2, 32); + } +} + +impl Default for ViewDistance { + fn default() -> Self { + Self(2) + } +} + +/// The [`ViewDistance`] at the end of the previous tick. Automatically updated +/// as [`ViewDistance`] is changed. +#[derive(Component, Clone, PartialEq, Eq, Default, Debug, Deref)] +pub struct OldViewDistance(u8); + +impl OldViewDistance { + pub fn get(&self) -> u8 { + self.0 + } +} + +#[derive(WorldQuery, Copy, Clone, Debug)] +pub struct View { + pub pos: &'static Position, + pub view_dist: &'static ViewDistance, +} + +impl ViewItem<'_> { + pub fn get(&self) -> ChunkView { + ChunkView::new(self.pos.0.into(), self.view_dist.0) + } +} + +#[derive(WorldQuery, Copy, Clone, Debug)] +pub struct OldView { + pub old_pos: &'static OldPosition, + pub old_view_dist: &'static OldViewDistance, +} + +impl OldViewItem<'_> { + pub fn get(&self) -> ChunkView { + ChunkView::new(self.old_pos.get().into(), self.old_view_dist.0) + } +} + +/// A [`Component`] containing a handle to the [`ChunkLayer`] a client can +/// see. +/// +/// A client can only see one chunk layer at a time. Mutating this component +/// will cause the client to respawn in the new chunk layer. +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, Deref, DerefMut)] +pub struct VisibleChunkLayer(pub Entity); + +impl Default for VisibleChunkLayer { + fn default() -> Self { + Self(Entity::PLACEHOLDER) + } +} + +/// The value of [`VisibleChunkLayer`] from the end of the previous tick. +#[derive(Component, PartialEq, Eq, Debug, Deref)] +pub struct OldVisibleChunkLayer(Entity); + +impl OldVisibleChunkLayer { + pub fn get(&self) -> Entity { + self.0 + } +} + +/// A [`Component`] containing the set of [`EntityLayer`]s a client can see. +/// All Minecraft entities from all layers in this set are potentially visible +/// to the client. +/// +/// This set can be mutated at any time to change which entity layers are +/// visible to the client. [`Despawned`] entity layers are automatically +/// removed. +#[derive(Component, Default, Debug)] +pub struct VisibleEntityLayers(pub BTreeSet); + +/// The value of [`VisibleEntityLayers`] from the end of the previous tick. +#[derive(Component, Default, Debug, Deref)] +pub struct OldVisibleEntityLayers(BTreeSet); + +impl OldVisibleEntityLayers { + pub fn get(&self) -> &BTreeSet { + &self.0 + } +} + +/// A system for adding [`Despawned`] components to disconnected clients. This +/// works by listening for removed [`Client`] components. +pub fn despawn_disconnected_clients( + mut commands: Commands, + mut disconnected_clients: RemovedComponents, +) { + for entity in disconnected_clients.read() { + if let Some(mut entity) = commands.get_entity(entity) { + entity.insert(Despawned); + } + } +} + +fn update_chunk_load_dist( + mut clients: Query<(&mut Client, &ViewDistance, &OldViewDistance), Changed>, +) { + for (mut client, dist, old_dist) in &mut clients { + if client.is_added() { + // Join game packet includes the view distance. + continue; + } + + if dist.0 != old_dist.0 { + // Note: This packet is just aesthetic. + client.write_packet(&ChunkLoadDistanceS2c { + view_distance: VarInt(dist.0.into()), + }); + } + } +} + +fn handle_layer_messages( + mut clients: Query<( + Entity, + &EntityId, + &mut Client, + &mut EntityRemoveBuf, + OldView, + &OldVisibleChunkLayer, + &mut VisibleEntityLayers, + &OldVisibleEntityLayers, + )>, + chunk_layers: Query<&ChunkLayer>, + entity_layers: Query<&EntityLayer>, + entities: Query<(EntityInitQuery, &OldPosition)>, +) { + clients.par_iter_mut().for_each( + |( + self_entity, + self_entity_id, + mut client, + mut remove_buf, + old_view, + old_visible_chunk_layer, + mut visible_entity_layers, + old_visible_entity_layers, + )| { + let block_pos = BlockPos::from(old_view.old_pos.get()); + let old_view = old_view.get(); + + fn in_radius(p0: BlockPos, p1: BlockPos, radius_squared: u32) -> bool { + let dist_squared = + (p1.x - p0.x).pow(2) + (p1.y - p0.y).pow(2) + (p1.z - p0.z).pow(2); + + dist_squared as u32 <= radius_squared + } + + // Chunk layer messages + if let Ok(chunk_layer) = chunk_layers.get(old_visible_chunk_layer.get()) { + let messages = chunk_layer.messages(); + let bytes = messages.bytes(); + + // Global messages + for (msg, range) in messages.iter_global() { + match msg { + crate::layer::chunk::GlobalMsg::Packet => { + client.write_packet_bytes(&bytes[range]); + } + crate::layer::chunk::GlobalMsg::PacketExcept { except } => { + if self_entity != except { + client.write_packet_bytes(&bytes[range]); + } + } + } + } + + let mut chunk_biome_buf = vec![]; + + // Local messages + messages.query_local(old_view, |msg, range| match msg { + crate::layer::chunk::LocalMsg::PacketAt { .. } => { + client.write_packet_bytes(&bytes[range]); + } + crate::layer::chunk::LocalMsg::PacketAtExcept { except, .. } => { + if self_entity != except { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::chunk::LocalMsg::RadiusAt { + center, + radius_squared, + } => { + if in_radius(block_pos, center, radius_squared) { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::chunk::LocalMsg::RadiusAtExcept { + center, + radius_squared, + except, + } => { + if self_entity != except && in_radius(block_pos, center, radius_squared) { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::chunk::LocalMsg::ChangeBiome { pos } => { + chunk_biome_buf.push(ChunkBiome { + pos, + data: &bytes[range], + }); + } + crate::layer::chunk::LocalMsg::ChangeChunkState { pos } => { + match &bytes[range] { + [ChunkLayer::LOAD, .., ChunkLayer::UNLOAD] => { + // Chunk is being loaded and unloaded on the + // same tick, so there's no need to do anything. + debug_assert!(chunk_layer.chunk(pos).is_none()); + } + [.., ChunkLayer::LOAD | ChunkLayer::OVERWRITE] => { + // Load chunk. + let chunk = chunk_layer.chunk(pos).expect("chunk must exist"); + chunk.write_init_packets(&mut *client, pos, chunk_layer.info()); + chunk.inc_viewer_count(); + } + [.., ChunkLayer::UNLOAD] => { + // Unload chunk. + client.write_packet(&UnloadChunkS2c { pos }); + debug_assert!(chunk_layer.chunk(pos).is_none()); + } + _ => unreachable!("invalid message data while changing chunk state"), + } + } + }); + + if !chunk_biome_buf.is_empty() { + client.write_packet(&ChunkBiomeDataS2c { + chunks: chunk_biome_buf.into(), + }); + } + } + + // Entity layer messages + for &layer_id in &old_visible_entity_layers.0 { + if let Ok(layer) = entity_layers.get(layer_id) { + let messages = layer.messages(); + let bytes = messages.bytes(); + + // Global messages + for (msg, range) in messages.iter_global() { + match msg { + crate::layer::entity::GlobalMsg::Packet => { + client.write_packet_bytes(&bytes[range]); + } + crate::layer::entity::GlobalMsg::PacketExcept { except } => { + if self_entity != except { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::entity::GlobalMsg::DespawnLayer => { + // Remove this entity layer. The changes to the visible entity layer + // set will be detected by the `update_view_and_layers` system and + // despawning of entities will happen there. + visible_entity_layers.0.remove(&layer_id); + } + } + } + + // Local messages + messages.query_local(old_view, |msg, range| match msg { + crate::layer::entity::LocalMsg::DespawnEntity { pos: _, dest_layer } => { + if !old_visible_entity_layers.0.contains(&dest_layer) { + let mut bytes = &bytes[range]; + + while let Ok(id) = bytes.read_i32::() { + if self_entity_id.get() != id { + remove_buf.push(id); + } + } + } + } + crate::layer::entity::LocalMsg::DespawnEntityTransition { + pos: _, + dest_pos, + } => { + if !old_view.contains(dest_pos) { + let mut bytes = &bytes[range]; + + while let Ok(id) = bytes.read_i32::() { + if self_entity_id.get() != id { + remove_buf.push(id); + } + } + } + } + crate::layer::entity::LocalMsg::SpawnEntity { pos: _, src_layer } => { + if !old_visible_entity_layers.0.contains(&src_layer) { + let mut bytes = &bytes[range]; + + while let Ok(u64) = bytes.read_u64::() { + let entity = Entity::from_bits(u64); + + if self_entity != entity { + if let Ok((init, old_pos)) = entities.get(entity) { + remove_buf.send_and_clear(&mut *client); + + // Spawn at the entity's old position since we may get a + // relative movement packet for this entity in a later + // iteration of the loop. + init.write_init_packets(old_pos.get(), &mut *client); + } + } + } + } + } + crate::layer::entity::LocalMsg::SpawnEntityTransition { + pos: _, + src_pos, + } => { + if !old_view.contains(src_pos) { + let mut bytes = &bytes[range]; + + while let Ok(u64) = bytes.read_u64::() { + let entity = Entity::from_bits(u64); + + if self_entity != entity { + if let Ok((init, old_pos)) = entities.get(entity) { + remove_buf.send_and_clear(&mut *client); + + // Spawn at the entity's old position since we may get a + // relative movement packet for this entity in a later + // iteration of the loop. + init.write_init_packets(old_pos.get(), &mut *client); + } + } + } + } + } + crate::layer::entity::LocalMsg::PacketAt { pos: _ } => { + client.write_packet_bytes(&bytes[range]); + } + crate::layer::entity::LocalMsg::PacketAtExcept { pos: _, except } => { + if self_entity != except { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::entity::LocalMsg::RadiusAt { + center, + radius_squared, + } => { + if in_radius(block_pos, center, radius_squared) { + client.write_packet_bytes(&bytes[range]); + } + } + crate::layer::entity::LocalMsg::RadiusAtExcept { + center, + radius_squared, + except, + } => { + if self_entity != except && in_radius(block_pos, center, radius_squared) + { + client.write_packet_bytes(&bytes[range]); + } + } + }); + + remove_buf.send_and_clear(&mut *client); + } + } + }, + ); +} + +pub(crate) fn update_view_and_layers( + mut clients: Query< + ( + Entity, + &mut Client, + &mut EntityRemoveBuf, + &VisibleChunkLayer, + &mut OldVisibleChunkLayer, + Ref, + &mut OldVisibleEntityLayers, + &Position, + &OldPosition, + &ViewDistance, + &OldViewDistance, + ), + Or<( + Changed, + Changed, + Changed, + Changed, + )>, + >, + chunk_layers: Query<&ChunkLayer>, + entity_layers: Query<&EntityLayer>, + entity_ids: Query<&EntityId>, + entity_init: Query<(EntityInitQuery, &Position)>, +) { + clients.par_iter_mut().for_each( + |( + self_entity, + mut client, + mut remove_buf, + chunk_layer, + mut old_chunk_layer, + visible_entity_layers, + mut old_visible_entity_layers, + pos, + old_pos, + view_dist, + old_view_dist, + )| { + let view = ChunkView::new(ChunkPos::from(pos.0), view_dist.0); + let old_view = ChunkView::new(ChunkPos::from(old_pos.get()), old_view_dist.0); + + // Make sure the center chunk is set before loading chunks! Otherwise the client + // may ignore the chunk. + if old_view.pos != view.pos { + client.write_packet(&ChunkRenderDistanceCenterS2c { + chunk_x: VarInt(view.pos.x), + chunk_z: VarInt(view.pos.z), + }); + } + + // Was the client's chunk layer changed? + if old_chunk_layer.0 != chunk_layer.0 { + // Unload all chunks in the old view. + // TODO: can we skip this step if old dimension != new dimension? + if let Ok(layer) = chunk_layers.get(old_chunk_layer.0) { + for pos in old_view.iter() { + if let Some(chunk) = layer.chunk(pos) { + client.write_packet(&UnloadChunkS2c { pos }); + chunk.dec_viewer_count(); + } + } + } + + // Load all chunks in the new view. + if let Ok(layer) = chunk_layers.get(chunk_layer.0) { + for pos in view.iter() { + if let Some(chunk) = layer.chunk(pos) { + chunk.write_init_packets(&mut *client, pos, layer.info()); + chunk.inc_viewer_count(); + } + } + } + + // Unload all entities from the old view in all old visible entity layers. + // TODO: can we skip this step if old dimension != new dimension? + for &layer in &old_visible_entity_layers.0 { + if let Ok(layer) = entity_layers.get(layer) { + for pos in old_view.iter() { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok(id) = entity_ids.get(entity) { + remove_buf.push(id.get()); + } + } + } + } + } + } + + remove_buf.send_and_clear(&mut *client); + + // Load all entities in the new view from all new visible entity layers. + for &layer in &visible_entity_layers.0 { + if let Ok(layer) = entity_layers.get(layer) { + for pos in view.iter() { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok((init, pos)) = entity_init.get(entity) { + init.write_init_packets(pos.get(), &mut *client); + } + } + } + } + } + } + } else { + // Update the client's visible entity layers. + if visible_entity_layers.is_changed() { + // Unload all entity layers that are no longer visible in the old view. + for &layer in old_visible_entity_layers + .0 + .difference(&visible_entity_layers.0) + { + if let Ok(layer) = entity_layers.get(layer) { + for pos in old_view.iter() { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok(id) = entity_ids.get(entity) { + remove_buf.push(id.get()); + } + } + } + } + } + } + + remove_buf.send_and_clear(&mut *client); + + // Load all entity layers that are newly visible in the old view. + for &layer in visible_entity_layers + .0 + .difference(&old_visible_entity_layers.0) + { + if let Ok(layer) = entity_layers.get(layer) { + for pos in old_view.iter() { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok((init, pos)) = entity_init.get(entity) { + init.write_init_packets(pos.get(), &mut *client); + } + } + } + } + } + } + } + + // Update the client's view (chunk position and view distance) + if old_view != view { + // Unload chunks and entities in the old view and load chunks and entities in + // the new view. We don't need to do any work where the old and new view + // overlap. + + // Unload chunks in the old view. + if let Ok(layer) = chunk_layers.get(chunk_layer.0) { + for pos in old_view.diff(view) { + if let Some(chunk) = layer.chunk(pos) { + client.write_packet(&UnloadChunkS2c { pos }); + chunk.dec_viewer_count(); + } + } + } + + // Load chunks in the new view. + if let Ok(layer) = chunk_layers.get(chunk_layer.0) { + for pos in view.diff(old_view) { + if let Some(chunk) = layer.chunk(pos) { + chunk.write_init_packets(&mut *client, pos, layer.info()); + chunk.inc_viewer_count(); + } + } + } + + // Unload entities from the new visible layers (since we updated it above). + for &layer in &visible_entity_layers.0 { + if let Ok(layer) = entity_layers.get(layer) { + for pos in old_view.diff(view) { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok(id) = entity_ids.get(entity) { + remove_buf.push(id.get()); + } + } + } + } + } + } + + // Load entities from the new visible layers. + for &layer in &visible_entity_layers.0 { + if let Ok(layer) = entity_layers.get(layer) { + for pos in view.diff(old_view) { + for entity in layer.entities_at(pos) { + if self_entity != entity { + if let Ok((init, pos)) = entity_init.get(entity) { + init.write_init_packets(pos.get(), &mut *client); + } + } + } + } + } + } + } + } + + // Update the old layers. + + old_chunk_layer.0 = chunk_layer.0; + + if visible_entity_layers.is_changed() { + old_visible_entity_layers + .0 + .clone_from(&visible_entity_layers.0); + } + }, + ); +} + +pub(crate) fn update_game_mode(mut clients: Query<(&mut Client, &GameMode), Changed>) { + for (mut client, game_mode) in &mut clients { + if client.is_added() { + // Game join packet includes the initial game mode. + continue; + } + + client.write_packet(&GameStateChangeS2c { + kind: GameEventKind::ChangeGameMode, + value: *game_mode as i32 as f32, + }) + } +} + +fn update_food_saturation_health( + mut clients: Query< + (&mut Client, &Food, &Saturation, &Health), + Or<(Changed, Changed, Changed)>, + >, +) { + for (mut client, food, saturation, health) in &mut clients { + client.write_packet(&HealthUpdateS2c { + health: health.0, + food: VarInt(food.0), + food_saturation: saturation.0, + }); + } +} + +fn update_old_view_dist( + mut clients: Query<(&mut OldViewDistance, &ViewDistance), Changed>, +) { + for (mut old_dist, dist) in &mut clients { + old_dist.0 = dist.0; + } +} + +fn flush_packets( + mut clients: Query<(Entity, &mut Client), Changed>, + mut commands: Commands, +) { + for (entity, mut client) in &mut clients { + if let Err(e) = client.flush_packets() { + warn!("Failed to flush packet queue for client {entity:?}: {e:#}."); + commands.entity(entity).remove::(); + } + } +} + +fn init_tracked_data(mut clients: Query<(&mut Client, &TrackedData), Added>) { + for (mut client, tracked_data) in &mut clients { + if let Some(init_data) = tracked_data.init_data() { + client.write_packet(&EntityTrackerUpdateS2c { + entity_id: VarInt(0), + tracked_values: RawBytes(CowBytes::from(init_data)), + }); + } + } +} + +fn update_tracked_data(mut clients: Query<(&mut Client, &TrackedData)>) { + for (mut client, tracked_data) in &mut clients { + if let Some(update_data) = tracked_data.update_data() { + client.write_packet(&EntityTrackerUpdateS2c { + entity_id: VarInt(0), + tracked_values: RawBytes(CowBytes::from(update_data)), + }); + } + } +} + +fn init_tracked_attributes( + mut clients: Query<(&mut Client, &EntityAttributes), Added>, +) { + for (mut client, attributes) in &mut clients { + client.write_packet(&EntityAttributesS2c { + entity_id: VarInt(0), + properties: attributes.to_properties(), + }); + } +} + +fn update_tracked_attributes(mut clients: Query<(&mut Client, &TrackedEntityAttributes)>) { + for (mut client, attributes) in &mut clients { + let properties = attributes.get_properties(); + if !properties.is_empty() { + client.write_packet(&EntityAttributesS2c { + entity_id: VarInt(0), + properties, + }); + } + } +} + +/// Decrement viewer count of chunks when the client is despawned. +fn cleanup_chunks_after_client_despawn( + mut clients: Query<(View, &VisibleChunkLayer), (With, With)>, + chunk_layers: Query<&ChunkLayer>, +) { + for (view, layer) in &mut clients { + if let Ok(layer) = chunk_layers.get(layer.0) { + for pos in view.get().iter() { + if let Some(chunk) = layer.chunk(pos) { + chunk.dec_viewer_count(); + } + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/client_command.rs b/vendor/valence/crates/valence_server/src/client_command.rs new file mode 100644 index 00000000..59fd4119 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/client_command.rs @@ -0,0 +1,147 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_entity::entity::Flags; +use valence_entity::{Pose, entity}; +use valence_protocol::packets::play::ClientCommandC2s; +pub use valence_protocol::packets::play::client_command_c2s::ClientCommand; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct ClientCommandPlugin; + +impl Plugin for ClientCommandPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_event::() + .add_event::() + .add_event::() + .add_systems(EventLoopPreUpdate, handle_client_command); + } +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct SprintEvent { + pub client: Entity, + pub state: SprintState, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum SprintState { + Start, + Stop, +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct SneakEvent { + pub client: Entity, + pub state: SneakState, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum SneakState { + Start, + Stop, +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct JumpWithHorseEvent { + pub client: Entity, + pub state: JumpWithHorseState, +} + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum JumpWithHorseState { + Start { + /// The power of the horse jump in `0..=100`. + power: u8, + }, + Stop, +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct LeaveBedEvent { + pub client: Entity, +} + +fn handle_client_command( + mut packets: EventReader, + mut clients: Query<(&mut entity::Pose, &mut Flags)>, + mut sprinting_events: EventWriter, + mut sneaking_events: EventWriter, + mut jump_with_horse_events: EventWriter, + mut leave_bed_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + match pkt.action { + ClientCommand::StartSneaking => { + if let Ok((mut pose, mut flags)) = clients.get_mut(packet.client) { + pose.0 = Pose::Sneaking; + flags.set_sneaking(true); + } + + sneaking_events.send(SneakEvent { + client: packet.client, + state: SneakState::Start, + }) + } + ClientCommand::StopSneaking => { + if let Ok((mut pose, mut flags)) = clients.get_mut(packet.client) { + pose.0 = Pose::Standing; + flags.set_sneaking(false); + } + + sneaking_events.send(SneakEvent { + client: packet.client, + state: SneakState::Stop, + }) + } + ClientCommand::LeaveBed => leave_bed_events.send(LeaveBedEvent { + client: packet.client, + }), + ClientCommand::StartSprinting => { + if let Ok((_, mut flags)) = clients.get_mut(packet.client) { + flags.set_sprinting(true); + } + + sprinting_events.send(SprintEvent { + client: packet.client, + state: SprintState::Start, + }); + } + ClientCommand::StopSprinting => { + if let Ok((_, mut flags)) = clients.get_mut(packet.client) { + flags.set_sprinting(false); + } + + sprinting_events.send(SprintEvent { + client: packet.client, + state: SprintState::Stop, + }) + } + ClientCommand::StartJumpWithHorse => { + jump_with_horse_events.send(JumpWithHorseEvent { + client: packet.client, + state: JumpWithHorseState::Start { + power: pkt.jump_boost.0 as u8, + }, + }) + } + ClientCommand::StopJumpWithHorse => { + jump_with_horse_events.send(JumpWithHorseEvent { + client: packet.client, + state: JumpWithHorseState::Stop, + }) + } + ClientCommand::OpenHorseInventory => {} // TODO + ClientCommand::StartFlyingWithElytra => { + if let Ok((mut pose, _)) = clients.get_mut(packet.client) { + pose.0 = Pose::FallFlying; + } + + // TODO. + } + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/client_settings.rs b/vendor/valence/crates/valence_server/src/client_settings.rs new file mode 100644 index 00000000..f0a9b93f --- /dev/null +++ b/vendor/valence/crates/valence_server/src/client_settings.rs @@ -0,0 +1,55 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_entity::player::{self, PlayerModelParts}; +use valence_protocol::packets::play::ClientSettingsC2s; +use valence_protocol::packets::play::client_settings_c2s::ChatMode; + +use crate::client::ViewDistance; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct ClientSettingsPlugin; + +impl Plugin for ClientSettingsPlugin { + fn build(&self, app: &mut App) { + app.add_systems(EventLoopPreUpdate, handle_client_settings); + } +} + +/// Component containing client-controlled settings about a client. +#[derive(Component, Default, Debug)] +pub struct ClientSettings { + pub locale: Box, + pub chat_mode: ChatMode, + pub chat_colors: bool, + pub enable_text_filtering: bool, + pub allow_server_listings: bool, +} + +fn handle_client_settings( + mut packets: EventReader, + mut clients: Query<( + &mut ViewDistance, + &mut ClientSettings, + &mut PlayerModelParts, + &mut player::MainArm, + )>, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok((mut view_dist, mut settings, mut model_parts, mut main_arm)) = + clients.get_mut(packet.client) + { + view_dist.set_if_neq(ViewDistance::new(pkt.view_distance)); + + settings.locale = pkt.locale.into(); + settings.chat_mode = pkt.chat_mode; + settings.chat_colors = pkt.chat_colors; + settings.enable_text_filtering = pkt.enable_text_filtering; + settings.allow_server_listings = pkt.allow_server_listings; + + model_parts.set_if_neq(PlayerModelParts(u8::from(pkt.displayed_skin_parts) as i8)); + main_arm.set_if_neq(player::MainArm(pkt.main_arm as i8)); + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/custom_payload.rs b/vendor/valence/crates/valence_server/src/custom_payload.rs new file mode 100644 index 00000000..37ee272a --- /dev/null +++ b/vendor/valence/crates/valence_server/src/custom_payload.rs @@ -0,0 +1,49 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_bytes::CowBytes; +use valence_protocol::packets::play::{CustomPayloadC2s, CustomPayloadS2c}; +use valence_protocol::raw::RawBytes; +use valence_protocol::{Bounded, Ident, WritePacket}; + +use crate::client::Client; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct CustomPayloadPlugin; + +impl Plugin for CustomPayloadPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_custom_payload); + } +} + +#[derive(Event, Clone, Debug)] +pub struct CustomPayloadEvent { + pub client: Entity, + pub channel: Ident, + pub data: Box<[u8]>, +} + +impl Client { + pub fn send_custom_payload(&mut self, channel: Ident, data: &[u8]) { + self.write_packet(&CustomPayloadS2c { + channel: channel.into(), + data: Bounded(RawBytes(CowBytes::from(data))), + }); + } +} + +fn handle_custom_payload( + mut packets: EventReader, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + events.send(CustomPayloadEvent { + client: packet.client, + channel: pkt.channel.into(), + data: pkt.data.0.0.into(), + }) + } + } +} diff --git a/vendor/valence/crates/valence_server/src/event_loop.rs b/vendor/valence/crates/valence_server/src/event_loop.rs new file mode 100644 index 00000000..8068f1ec --- /dev/null +++ b/vendor/valence/crates/valence_server/src/event_loop.rs @@ -0,0 +1,181 @@ +use std::time::Instant; + +use bevy_app::MainScheduleOrder; +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::schedule::ScheduleLabel; +use bevy_ecs::system::SystemState; +use bytes::Bytes; +use tracing::{debug, warn}; +use valence_protocol::{Decode, Packet}; + +use crate::client::Client; + +pub struct EventLoopPlugin; + +impl Plugin for EventLoopPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_schedule(Schedule::new(RunEventLoop)) + .add_schedule(Schedule::new(EventLoopPreUpdate)) + .add_schedule(Schedule::new(EventLoopUpdate)) + .add_schedule(Schedule::new(EventLoopPostUpdate)) + .add_systems(RunEventLoop, run_event_loop); + + app.world + .resource_mut::() + .insert_after(PreUpdate, RunEventLoop); + } +} + +/// The schedule responsible for running [`EventLoopPreUpdate`], +/// [`EventLoopUpdate`], and [`EventLoopPostUpdate`]. +/// +/// This schedule is situated between [`PreUpdate`] and [`Update`]. +#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] +pub struct RunEventLoop; + +#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] +pub struct EventLoopPreUpdate; + +#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] +pub struct EventLoopUpdate; + +#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] +pub struct EventLoopPostUpdate; + +#[derive(Event, Clone, Debug)] +pub struct PacketEvent { + /// The client this packet originated from. + pub client: Entity, + /// The moment in time this packet arrived. + pub timestamp: Instant, + /// This packet's ID. + pub id: i32, + /// The content of the packet, excluding the leading varint packet ID. + pub data: Bytes, +} + +impl PacketEvent { + /// Attempts to decode this packet as the packet `P`. + /// + /// If the packet ID is mismatched or an error occurs, `None` is returned. + /// Otherwise, `Some` is returned containing the decoded packet. + #[inline] + pub fn decode

(&self) -> Option

+ where + P: Packet + Decode, + { + if self.id == P::ID { + let mut r = &self.data[..]; + + match P::decode(&mut r) { + Ok(pkt) => { + if r.is_empty() { + return Some(pkt); + } + + warn!( + "missed {} bytes while decoding packet {} (ID = {})", + r.len(), + P::NAME, + P::ID + ); + debug!("complete packet after partial decode: {pkt:?}"); + } + Err(e) => { + warn!("failed to decode packet with ID of {}: {e:#}", P::ID); + } + } + } + + None + } +} + +fn run_event_loop_schedules(world: &mut World) { + world.run_schedule(EventLoopPreUpdate); + world.run_schedule(EventLoopUpdate); + world.run_schedule(EventLoopPostUpdate); +} + +/// An exclusive system for running the event loop schedule. +#[allow(clippy::type_complexity)] +fn run_event_loop( + world: &mut World, + state: &mut SystemState<( + Query<(Entity, &mut Client)>, + EventWriter, + Commands, + )>, + mut check_again: Local>, +) { + debug_assert!(check_again.is_empty()); + + let (mut clients, mut event_writer, mut commands) = state.get_mut(world); + + for (entity, mut client) in &mut clients { + match client.connection_mut().try_recv() { + Ok(Some(pkt)) => { + event_writer.send(PacketEvent { + client: entity, + timestamp: pkt.timestamp, + id: pkt.id, + data: pkt.body, + }); + + let remaining = client.connection().len(); + + if remaining > 0 { + check_again.push((entity, remaining)); + } + } + Ok(None) => {} + Err(e) => { + // Client is disconnected. + debug!("disconnecting client: {e:#}"); + commands.entity(entity).remove::(); + } + } + } + + state.apply(world); + run_event_loop_schedules(world); + + while !check_again.is_empty() { + let (mut clients, mut event_writer, mut commands) = state.get_mut(world); + + check_again.retain_mut(|(entity, remaining)| { + debug_assert!(*remaining > 0); + + if let Ok((_, mut client)) = clients.get_mut(*entity) { + match client.connection_mut().try_recv() { + Ok(Some(pkt)) => { + event_writer.send(PacketEvent { + client: *entity, + timestamp: pkt.timestamp, + id: pkt.id, + data: pkt.body, + }); + *remaining -= 1; + // Keep looping as long as there are packets to process this tick. + *remaining > 0 + } + Ok(None) => false, + Err(e) => { + // Client is disconnected. + debug!("disconnecting client: {e:#}"); + commands.entity(*entity).remove::(); + false + } + } + } else { + // Client must have been deleted in the last run of the schedule. + false + } + }); + + state.apply(world); + run_event_loop_schedules(world); + } +} diff --git a/vendor/valence/crates/valence_server/src/hand_swing.rs b/vendor/valence/crates/valence_server/src/hand_swing.rs new file mode 100644 index 00000000..bf93e96a --- /dev/null +++ b/vendor/valence/crates/valence_server/src/hand_swing.rs @@ -0,0 +1,44 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_entity::{EntityAnimation, EntityAnimations}; +use valence_protocol::Hand; +use valence_protocol::packets::play::HandSwingC2s; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct HandSwingPlugin; + +impl Plugin for HandSwingPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_hand_swing); + } +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct HandSwingEvent { + pub client: Entity, + pub hand: Hand, +} + +fn handle_hand_swing( + mut packets: EventReader, + mut clients: Query<&mut EntityAnimations>, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut anim) = clients.get_mut(packet.client) { + anim.trigger(match pkt.hand { + Hand::Main => EntityAnimation::SwingMainHand, + Hand::Off => EntityAnimation::SwingOffHand, + }); + } + + events.send(HandSwingEvent { + client: packet.client, + hand: pkt.hand, + }); + } + } +} diff --git a/vendor/valence/crates/valence_server/src/interact_block.rs b/vendor/valence/crates/valence_server/src/interact_block.rs new file mode 100644 index 00000000..88bbe5a2 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/interact_block.rs @@ -0,0 +1,60 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_math::Vec3; +use valence_protocol::packets::play::PlayerInteractBlockC2s; +use valence_protocol::{BlockPos, Direction, Hand}; + +use crate::action::ActionSequence; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct InteractBlockPlugin; + +impl Plugin for InteractBlockPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_interact_block); + } +} + +#[derive(Event, Copy, Clone, Debug)] +pub struct InteractBlockEvent { + pub client: Entity, + /// The hand that was used + pub hand: Hand, + /// The location of the block that was interacted with + pub position: BlockPos, + /// The face of the block that was clicked + pub face: Direction, + /// The position inside of the block that was clicked on + pub cursor_pos: Vec3, + /// Whether or not the player's head is inside a block + pub head_inside_block: bool, + /// Sequence number for synchronization + pub sequence: i32, +} + +fn handle_interact_block( + mut packets: EventReader, + mut clients: Query<&mut ActionSequence>, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut action_seq) = clients.get_mut(packet.client) { + action_seq.update(pkt.sequence.0); + } + + // TODO: check that the block interaction is valid. + + events.send(InteractBlockEvent { + client: packet.client, + hand: pkt.hand, + position: pkt.position, + face: pkt.face, + cursor_pos: pkt.cursor_pos, + head_inside_block: pkt.head_inside_block, + sequence: pkt.sequence.0, + }); + } + } +} diff --git a/vendor/valence/crates/valence_server/src/interact_entity.rs b/vendor/valence/crates/valence_server/src/interact_entity.rs new file mode 100644 index 00000000..1aac18d5 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/interact_entity.rs @@ -0,0 +1,50 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_entity::EntityManager; +use valence_protocol::packets::play::PlayerInteractEntityC2s; +pub use valence_protocol::packets::play::player_interact_entity_c2s::EntityInteraction; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct InteractEntityPlugin; + +impl Plugin for InteractEntityPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_interact_entity); + } +} + +#[derive(Event, Copy, Clone, Debug)] +pub struct InteractEntityEvent { + pub client: Entity, + /// The entity being interacted with. + pub entity: Entity, + /// If the client was sneaking during the interaction. + pub sneaking: bool, + /// The kind of interaction that occurred. + pub interact: EntityInteraction, +} + +fn handle_interact_entity( + mut packets: EventReader, + entities: Res, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + // TODO: check that the entity is in the same instance as the player. + // TODO: check that the distance between the player and the interacted entity is + // within some configurable tolerance level. + + if let Some(entity) = entities.get_by_id(pkt.entity_id.0) { + events.send(InteractEntityEvent { + client: packet.client, + entity, + sneaking: pkt.sneaking, + interact: pkt.interact, + }) + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/interact_item.rs b/vendor/valence/crates/valence_server/src/interact_item.rs new file mode 100644 index 00000000..4bc897b2 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/interact_item.rs @@ -0,0 +1,43 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_protocol::Hand; +use valence_protocol::packets::play::PlayerInteractItemC2s; + +use crate::action::ActionSequence; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct InteractItemPlugin; + +impl Plugin for InteractItemPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_player_interact_item); + } +} + +#[derive(Event, Copy, Clone, Debug)] +pub struct InteractItemEvent { + pub client: Entity, + pub hand: Hand, + pub sequence: i32, +} + +fn handle_player_interact_item( + mut packets: EventReader, + mut clients: Query<&mut ActionSequence>, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut action_seq) = clients.get_mut(packet.client) { + action_seq.update(pkt.sequence.0); + } + + events.send(InteractItemEvent { + client: packet.client, + hand: pkt.hand, + sequence: pkt.sequence.0, + }); + } + } +} diff --git a/vendor/valence/crates/valence_server/src/keepalive.rs b/vendor/valence/crates/valence_server/src/keepalive.rs new file mode 100644 index 00000000..a73552ed --- /dev/null +++ b/vendor/valence/crates/valence_server/src/keepalive.rs @@ -0,0 +1,118 @@ +use std::time::{Duration, Instant}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::Deref; +use tracing::warn; +use valence_protocol::WritePacket; +use valence_protocol::packets::play::{KeepAliveC2s, KeepAliveS2c}; + +use crate::client::{Client, UpdateClientsSet}; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct KeepalivePlugin; + +impl Plugin for KeepalivePlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_systems(PostUpdate, send_keepalive.in_set(UpdateClientsSet)) + .add_systems(EventLoopPreUpdate, handle_keepalive_response); + } +} + +#[derive(Resource, Debug)] +pub struct KeepaliveSettings { + // How long to wait before sending keepalives and how long to wait for a response. + pub period: Duration, +} + +impl Default for KeepaliveSettings { + fn default() -> Self { + Self { + period: Duration::from_secs(8), + } + } +} + +#[derive(Component, Debug)] +pub struct KeepaliveState { + got_keepalive: bool, + last_keepalive_id: u64, + last_send: Instant, +} + +/// Delay measured in milliseconds. Negative values indicate absence. +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Deref)] +pub struct Ping(pub i32); + +impl Default for Ping { + fn default() -> Self { + Self(-1) + } +} + +impl KeepaliveState { + pub(super) fn new() -> Self { + Self { + got_keepalive: true, + last_keepalive_id: 0, + last_send: Instant::now(), + } + } + + /// When the last keepalive was sent for this client. + pub fn last_send(&self) -> Instant { + self.last_send + } +} + +fn send_keepalive( + mut clients: Query<(Entity, &mut Client, &mut KeepaliveState)>, + settings: Res, + mut commands: Commands, +) { + let now = Instant::now(); + + for (entity, mut client, mut state) in &mut clients { + if now.duration_since(state.last_send) >= settings.period { + if state.got_keepalive { + let id = rand::random(); + client.write_packet(&KeepAliveS2c { id }); + + state.got_keepalive = false; + state.last_keepalive_id = id; + state.last_send = now; + } else { + let millis = settings.period.as_millis(); + warn!("Client {entity:?} timed out: no keepalive response after {millis}ms"); + commands.entity(entity).remove::(); + } + } + } +} + +fn handle_keepalive_response( + mut packets: EventReader, + mut clients: Query<(Entity, &mut KeepaliveState, &mut Ping)>, + mut commands: Commands, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok((entity, mut state, mut ping)) = clients.get_mut(packet.client) { + if state.got_keepalive { + warn!("unexpected keepalive from client {entity:?}"); + commands.entity(entity).remove::(); + } else if pkt.id != state.last_keepalive_id { + warn!( + "keepalive IDs don't match for client {entity:?} (expected {}, got {})", + state.last_keepalive_id, pkt.id, + ); + commands.entity(entity).remove::(); + } else { + state.got_keepalive = true; + ping.0 = state.last_send.elapsed().as_millis() as i32; + } + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/layer.rs b/vendor/valence/crates/valence_server/src/layer.rs new file mode 100644 index 00000000..e547e635 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer.rs @@ -0,0 +1,138 @@ +//! Defines chunk layers and entity layers. Chunk layers contain the chunks and +//! dimension data of a world, while entity layers contain all the Minecraft +//! entities. +//! +//! These two together are analogous to Minecraft "levels" or "worlds". + +pub mod bvh; +pub mod chunk; +pub mod entity; +pub mod message; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +pub use chunk::ChunkLayer; +pub use entity::EntityLayer; +use valence_protocol::encode::WritePacket; +use valence_protocol::{BlockPos, ChunkPos, Ident}; +use valence_registry::{BiomeRegistry, DimensionTypeRegistry}; +use valence_server_common::Server; + +pub struct LayerPlugin; + +/// When entity and chunk changes are written to layers. Systems that modify +/// chunks and entities should run _before_ this. Systems that need to read +/// layer messages should run _after_ this. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct UpdateLayersPreClientSet; + +/// When layers are cleared and messages from this tick are lost. Systems that +/// read layer messages should run _before_ this. +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct UpdateLayersPostClientSet; + +// impl Plugin for LayerPlugin { +// fn build(&self, app: &mut App) { +// app.configure_sets( +// PostUpdate, +// ( +// UpdateLayersPreClientSet +// .after(InitEntitiesSet) +// .after(UpdateTrackedDataSet), +// UpdateLayersPostClientSet.after(UpdateLayersPreClientSet), +// ), +// ); +// +// chunk::build(app); +// entity::build(app); +// } +// } + +/// Common functionality for layers. Notable implementors are [`ChunkLayer`] and +/// [`EntityLayer`]. +/// +/// Layers support sending packets to viewers of the layer under various +/// conditions. These are the "packet writers" exposed by this trait. +/// +/// Layers themselves implement the [`WritePacket`] trait. Writing directly to a +/// layer will send packets to all viewers unconditionally. +pub trait Layer: WritePacket { + /// Packet writer returned by [`except_writer`](Self::except_writer). + type ExceptWriter<'a>: WritePacket + where + Self: 'a; + + /// Packet writer returned by [`view_writer`](Self::ViewWriter). + type ViewWriter<'a>: WritePacket + where + Self: 'a; + + /// Packet writer returned by + /// [`view_except_writer`](Self::ViewExceptWriter). + type ViewExceptWriter<'a>: WritePacket + where + Self: 'a; + + /// Packet writer returned by [`radius_writer`](Self::radius_writer). + type RadiusWriter<'a>: WritePacket + where + Self: 'a; + + /// Packet writer returned by + /// [`radius_except_writer`](Self::radius_except_writer). + type RadiusExceptWriter<'a>: WritePacket + where + Self: 'a; + + /// Returns a packet writer which sends packets to all viewers not + /// identified by `except`. + fn except_writer(&mut self, except: Entity) -> Self::ExceptWriter<'_>; + + /// Returns a packet writer which sends packets to viewers in view of + /// the chunk position `pos`. + fn view_writer(&mut self, pos: impl Into) -> Self::ViewWriter<'_>; + + /// Returns a packet writer which sends packets to viewers in + /// view of the chunk position `pos` and not identified by `except`. + fn view_except_writer( + &mut self, + pos: impl Into, + except: Entity, + ) -> Self::ViewExceptWriter<'_>; + + /// Returns a packet writer which sends packets to viewers within `radius` + /// blocks of the block position `pos`. + fn radius_writer(&mut self, pos: impl Into, radius: u32) -> Self::RadiusWriter<'_>; + + /// Returns a packet writer which sends packets to viewers within `radius` + /// blocks of the block position `pos` and not identified by `except`. + fn radius_except_writer( + &mut self, + pos: impl Into, + radius: u32, + except: Entity, + ) -> Self::RadiusExceptWriter<'_>; +} + +/// Convenience [`Bundle`] for spawning a layer entity with both [`ChunkLayer`] +/// and [`EntityLayer`] components. +#[derive(Bundle)] +pub struct LayerBundle { + pub chunk: ChunkLayer, + pub entity: EntityLayer, +} + +impl LayerBundle { + /// Returns a new layer bundle. + pub fn new( + dimension_type_name: impl Into, + dimensions: &DimensionTypeRegistry, + biomes: &BiomeRegistry, + server: &Server, + ) -> Self { + Self { + chunk: ChunkLayer::new(dimension_type_name, dimensions, biomes, server), + entity: EntityLayer::new(server), + } + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/bvh.rs b/vendor/valence/crates/valence_server/src/layer/bvh.rs new file mode 100644 index 00000000..4f63cd01 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/bvh.rs @@ -0,0 +1,339 @@ +use std::mem; +use std::ops::Range; + +use valence_protocol::ChunkPos; + +use crate::ChunkView; + +/// A bounding volume hierarchy for chunk positions. +#[derive(Clone, Debug)] +pub struct ChunkBvh { + nodes: Vec, + values: Vec, +} + +impl Default for ChunkBvh { + fn default() -> Self { + Self::new() + } +} + +#[derive(Clone, Debug)] +enum Node { + Internal { + bounds: Aabb, + left: NodeIdx, + right: NodeIdx, + }, + Leaf { + bounds: Aabb, + /// Range of values in the values array. + values: Range, + }, +} + +#[cfg(test)] +impl Node { + fn bounds(&self) -> Aabb { + match self { + Node::Internal { bounds, .. } => *bounds, + Node::Leaf { bounds, .. } => *bounds, + } + } +} + +type NodeIdx = u32; + +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +struct Aabb { + min: ChunkPos, + max: ChunkPos, +} + +impl Aabb { + fn point(pos: ChunkPos) -> Self { + Self { min: pos, max: pos } + } + + /// Sum of side lengths. + fn surface_area(self) -> i32 { + (self.length_x() + self.length_z()) * 2 + } + + /// Returns the smallest AABB containing `self` and `other`. + fn union(self, other: Self) -> Self { + Self { + min: ChunkPos::new(self.min.x.min(other.min.x), self.min.z.min(other.min.z)), + max: ChunkPos::new(self.max.x.max(other.max.x), self.max.z.max(other.max.z)), + } + } + + fn length_x(self) -> i32 { + self.max.x - self.min.x + } + + fn length_z(self) -> i32 { + self.max.z - self.min.z + } + + fn intersects(self, other: Self) -> bool { + self.min.x <= other.max.x + && self.max.x >= other.min.x + && self.min.z <= other.max.z + && self.max.z >= other.min.z + } +} + +/// Obtains a chunk position for the purpose of placement in the BVH. +pub trait GetChunkPos { + fn chunk_pos(&self) -> ChunkPos; +} + +impl GetChunkPos for ChunkPos { + fn chunk_pos(&self) -> ChunkPos { + *self + } +} + +impl ChunkBvh { + pub fn new() -> Self { + assert!(MAX_SURFACE_AREA > 0); + + Self { + nodes: vec![], + values: vec![], + } + } +} + +impl ChunkBvh { + pub fn build(&mut self, items: impl IntoIterator) { + self.nodes.clear(); + self.values.clear(); + + self.values.extend(items); + + if let Some(bounds) = value_bounds(&self.values) { + self.build_rec(bounds, 0..self.values.len()); + } + } + + fn build_rec(&mut self, bounds: Aabb, value_range: Range) { + if bounds.surface_area() <= MAX_SURFACE_AREA { + self.nodes.push(Node::Leaf { + bounds, + values: value_range.start as u32..value_range.end as u32, + }); + + return; + } + + let values = &mut self.values[value_range.clone()]; + + // Determine splitting axis based on the side that's longer. Then split along + // the spatial midpoint. We could use a more advanced heuristic like SAH, + // but it's probably not worth it. + + let point = if bounds.length_x() >= bounds.length_z() { + // Split on Z axis. + + let mid = middle(bounds.min.x, bounds.max.x); + partition(values, |v| v.chunk_pos().x >= mid) + } else { + // Split on X axis. + + let mid = middle(bounds.min.z, bounds.max.z); + partition(values, |v| v.chunk_pos().z >= mid) + }; + + let left_range = value_range.start..value_range.start + point; + let right_range = left_range.end..value_range.end; + + let left_bounds = + value_bounds(&self.values[left_range.clone()]).expect("left half should be nonempty"); + + let right_bounds = + value_bounds(&self.values[right_range.clone()]).expect("right half should be nonempty"); + + self.build_rec(left_bounds, left_range); + let left_idx = (self.nodes.len() - 1) as NodeIdx; + + self.build_rec(right_bounds, right_range); + let right_idx = (self.nodes.len() - 1) as NodeIdx; + + self.nodes.push(Node::Internal { + bounds, + left: left_idx, + right: right_idx, + }); + } + + pub fn query(&self, view: ChunkView, mut f: impl FnMut(&T)) { + if let Some(root) = self.nodes.last() { + let (min, max) = view.bounding_box(); + self.query_rec(root, view, Aabb { min, max }, &mut f); + } + } + + fn query_rec(&self, node: &Node, view: ChunkView, view_aabb: Aabb, f: &mut impl FnMut(&T)) { + match node { + Node::Internal { + bounds, + left, + right, + } => { + if bounds.intersects(view_aabb) { + self.query_rec(&self.nodes[*left as usize], view, view_aabb, f); + self.query_rec(&self.nodes[*right as usize], view, view_aabb, f); + } + } + Node::Leaf { bounds, values } => { + if bounds.intersects(view_aabb) { + for val in &self.values[values.start as usize..values.end as usize] { + if view.contains(val.chunk_pos()) { + f(val) + } + } + } + } + } + } + + pub fn shrink_to_fit(&mut self) { + self.nodes.shrink_to_fit(); + self.values.shrink_to_fit(); + } + + #[cfg(test)] + fn check_invariants(&self) { + if let Some(root) = self.nodes.last() { + self.check_invariants_rec(root); + } + } + + #[cfg(test)] + fn check_invariants_rec(&self, node: &Node) { + match node { + Node::Internal { + bounds, + left, + right, + } => { + let left = &self.nodes[*left as usize]; + let right = &self.nodes[*right as usize]; + + assert_eq!(left.bounds().union(right.bounds()), *bounds); + + self.check_invariants_rec(left); + self.check_invariants_rec(right); + } + Node::Leaf { + bounds: leaf_bounds, + values, + } => { + let bounds = value_bounds(&self.values[values.start as usize..values.end as usize]) + .expect("leaf should be nonempty"); + + assert_eq!(*leaf_bounds, bounds); + } + } + } +} + +fn value_bounds(values: &[T]) -> Option { + values + .iter() + .map(|v| Aabb::point(v.chunk_pos())) + .reduce(Aabb::union) +} + +fn middle(min: i32, max: i32) -> i32 { + // Cast to i64 to avoid intermediate overflow. + ((min as i64 + max as i64) / 2) as i32 +} + +/// Partitions the slice in place and returns the partition point. Why this +/// isn't in Rust's stdlib I don't know. +fn partition(s: &mut [T], mut pred: impl FnMut(&T) -> bool) -> usize { + let mut it = s.iter_mut(); + let mut true_count = 0; + + while let Some(head) = it.find(|x| { + if pred(x) { + true_count += 1; + false + } else { + true + } + }) { + if let Some(tail) = it.rfind(|x| pred(x)) { + mem::swap(head, tail); + true_count += 1; + } else { + break; + } + } + true_count +} + +#[cfg(test)] +mod tests { + use rand::Rng; + + use super::*; + + #[test] + fn partition_middle() { + let mut arr = [2, 3, 4, 5]; + let mid = middle(arr[0], arr[arr.len() - 1]); + + let point = partition(&mut arr, |&x| mid >= x); + + assert_eq!(point, 2); + assert_eq!(&arr[..point], &[2, 3]); + assert_eq!(&arr[point..], &[4, 5]); + } + + #[test] + fn query_visits_correct_nodes() { + let mut bvh = ChunkBvh::::new(); + + let mut positions = vec![]; + + let size = 500; + let mut rng = rand::thread_rng(); + + // Create a bunch of positions in a large area. + for _ in 0..100_000 { + positions.push(ChunkPos { + x: rng.gen_range(-size / 2..size / 2), + z: rng.gen_range(-size / 2..size / 2), + }); + } + + // Put the view in the center of that area. + let view = ChunkView::new(ChunkPos::default(), 32); + + let mut viewed_positions = vec![]; + + // Create a list of positions the view contains. + for &pos in &positions { + if view.contains(pos) { + viewed_positions.push(pos); + } + } + + bvh.build(positions); + + bvh.check_invariants(); + + // Check that we query exactly the positions that we know the view can see. + + bvh.query(view, |pos| { + let idx = viewed_positions.iter().position(|p| p == pos).expect("😔"); + viewed_positions.remove(idx); + }); + + assert!(viewed_positions.is_empty()); + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/chunk.rs b/vendor/valence/crates/valence_server/src/layer/chunk.rs new file mode 100644 index 00000000..cc44678b --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/chunk.rs @@ -0,0 +1,793 @@ +#[allow(clippy::module_inception)] +mod chunk; +pub mod loaded; +mod paletted_container; +pub mod unloaded; + +use std::borrow::Cow; +use std::collections::hash_map::{Entry, OccupiedEntry, VacantEntry}; +use std::fmt; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +pub use chunk::{MAX_HEIGHT, *}; +pub use loaded::LoadedChunk; +use rustc_hash::FxHashMap; +pub use unloaded::UnloadedChunk; +use valence_math::{DVec3, Vec3}; +use valence_nbt::Compound; +use valence_protocol::encode::{PacketWriter, WritePacket}; +use valence_protocol::packets::play::particle_s2c::Particle; +use valence_protocol::packets::play::{ParticleS2c, PlaySoundS2c}; +use valence_protocol::sound::{Sound, SoundCategory, SoundId}; +use valence_protocol::{BiomePos, BlockPos, ChunkPos, CompressionThreshold, Encode, Ident, Packet}; +use valence_registry::DimensionTypeRegistry; +use valence_registry::biome::{BiomeId, BiomeRegistry}; +use valence_server_common::Server; + +use super::bvh::GetChunkPos; +use super::message::Messages; +use super::{Layer, UpdateLayersPostClientSet, UpdateLayersPreClientSet}; + +/// A [`Component`] containing the [chunks](LoadedChunk) and [dimension +/// information](valence_registry::dimension_type::DimensionTypeId) of a +/// Minecraft world. +#[derive(Component, Debug)] +pub struct ChunkLayer { + messages: ChunkLayerMessages, + chunks: FxHashMap, + info: ChunkLayerInfo, +} + +/// Chunk layer information. +pub(crate) struct ChunkLayerInfo { + dimension_type_name: Ident, + height: u32, + min_y: i32, + biome_registry_len: usize, + threshold: CompressionThreshold, +} + +impl fmt::Debug for ChunkLayerInfo { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ChunkLayerInfo") + .field("dimension_type_name", &self.dimension_type_name) + .field("height", &self.height) + .field("min_y", &self.min_y) + .field("biome_registry_len", &self.biome_registry_len) + .field("threshold", &self.threshold) + // Ignore sky light mask and array. + .finish() + } +} + +type ChunkLayerMessages = Messages; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub(crate) enum GlobalMsg { + /// Send packet data to all clients viewing the layer. + Packet, + /// Send packet data to all clients viewing the layer, except the client + /// identified by `except`. + PacketExcept { except: Entity }, +} + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub(crate) enum LocalMsg { + /// Send packet data to all clients viewing the layer in view of `pos`. + PacketAt { + pos: ChunkPos, + }, + PacketAtExcept { + pos: ChunkPos, + except: Entity, + }, + RadiusAt { + center: BlockPos, + radius_squared: u32, + }, + RadiusAtExcept { + center: BlockPos, + radius_squared: u32, + except: Entity, + }, + /// Instruct clients to load or unload the chunk at `pos`. Loading and + /// unloading are combined into a single message so that load/unload order + /// is not lost when messages are sorted. + /// + /// Message content is a single byte indicating load (1) or unload (0). + ChangeChunkState { + pos: ChunkPos, + }, + /// Message content is the data for a single biome in the "change biomes" + /// packet. + ChangeBiome { + pos: ChunkPos, + }, +} + +impl GetChunkPos for LocalMsg { + fn chunk_pos(&self) -> ChunkPos { + match *self { + LocalMsg::PacketAt { pos } => pos, + LocalMsg::PacketAtExcept { pos, .. } => pos, + LocalMsg::RadiusAt { center, .. } => center.into(), + LocalMsg::RadiusAtExcept { center, .. } => center.into(), + LocalMsg::ChangeBiome { pos } => pos, + LocalMsg::ChangeChunkState { pos } => pos, + } + } +} + +impl ChunkLayer { + pub(crate) const LOAD: u8 = 0; + pub(crate) const UNLOAD: u8 = 1; + pub(crate) const OVERWRITE: u8 = 2; + + /// Creates a new chunk layer. + #[track_caller] + pub fn new( + dimension_type_name: impl Into, + dimensions: &DimensionTypeRegistry, + biomes: &BiomeRegistry, + server: &Server, + ) -> Self { + let dimension_type_name = dimension_type_name.into(); + + let dim = &dimensions[dimension_type_name.clone()]; + + assert!( + (0..MAX_HEIGHT as i32).contains(&dim.height), + "invalid dimension height of {}", + dim.height + ); + + Self { + messages: Messages::new(), + chunks: Default::default(), + info: ChunkLayerInfo { + dimension_type_name, + height: dim.height as u32, + min_y: dim.min_y, + biome_registry_len: biomes.iter().len(), + threshold: server.compression_threshold(), + }, + } + } + + /// The name of the dimension this chunk layer is using. + pub fn dimension_type_name(&self) -> Ident { + self.info.dimension_type_name.clone() + } + + /// The height of this instance's dimension. + pub fn height(&self) -> u32 { + self.info.height + } + + /// The `min_y` of this instance's dimension. + pub fn min_y(&self) -> i32 { + self.info.min_y + } + + /// Get a reference to the chunk at the given position, if it is loaded. + pub fn chunk(&self, pos: impl Into) -> Option<&LoadedChunk> { + self.chunks.get(&pos.into()) + } + + /// Get a mutable reference to the chunk at the given position, if it is + /// loaded. + pub fn chunk_mut(&mut self, pos: impl Into) -> Option<&mut LoadedChunk> { + self.chunks.get_mut(&pos.into()) + } + + /// Insert a chunk into the instance at the given position. The previous + /// chunk data is returned. + pub fn insert_chunk( + &mut self, + pos: impl Into, + chunk: UnloadedChunk, + ) -> Option { + match self.chunk_entry(pos) { + ChunkEntry::Occupied(mut oe) => Some(oe.insert(chunk)), + ChunkEntry::Vacant(ve) => { + ve.insert(chunk); + None + } + } + } + + /// Unload the chunk at the given position, if it is loaded. Returns the + /// chunk if it was loaded. + pub fn remove_chunk(&mut self, pos: impl Into) -> Option { + match self.chunk_entry(pos) { + ChunkEntry::Occupied(oe) => Some(oe.remove()), + ChunkEntry::Vacant(_) => None, + } + } + + /// Unload all chunks in this instance. + pub fn clear_chunks(&mut self) { + self.retain_chunks(|_, _| false) + } + + /// Retain only the chunks for which the given predicate returns `true`. + pub fn retain_chunks(&mut self, mut f: F) + where + F: FnMut(ChunkPos, &mut LoadedChunk) -> bool, + { + self.chunks.retain(|pos, chunk| { + if !f(*pos, chunk) { + self.messages + .send_local_infallible(LocalMsg::ChangeChunkState { pos: *pos }, |b| { + b.push(Self::UNLOAD) + }); + + false + } else { + true + } + }); + } + + /// Get a [`ChunkEntry`] for the given position. + pub fn chunk_entry(&mut self, pos: impl Into) -> ChunkEntry { + match self.chunks.entry(pos.into()) { + Entry::Occupied(oe) => ChunkEntry::Occupied(OccupiedChunkEntry { + messages: &mut self.messages, + entry: oe, + }), + Entry::Vacant(ve) => ChunkEntry::Vacant(VacantChunkEntry { + height: self.info.height, + messages: &mut self.messages, + entry: ve, + }), + } + } + + /// Get an iterator over all loaded chunks in the instance. The order of the + /// chunks is undefined. + pub fn chunks(&self) -> impl Iterator + Clone + '_ { + self.chunks.iter().map(|(pos, chunk)| (*pos, chunk)) + } + + /// Get an iterator over all loaded chunks in the instance, mutably. The + /// order of the chunks is undefined. + pub fn chunks_mut(&mut self) -> impl Iterator + '_ { + self.chunks.iter_mut().map(|(pos, chunk)| (*pos, chunk)) + } + + /// Optimizes the memory usage of the instance. + pub fn shrink_to_fit(&mut self) { + for (_, chunk) in self.chunks_mut() { + chunk.shrink_to_fit(); + } + + self.chunks.shrink_to_fit(); + self.messages.shrink_to_fit(); + } + + pub fn block(&self, pos: impl Into) -> Option { + let pos = pos.into(); + + let y = pos + .y + .checked_sub(self.info.min_y) + .and_then(|y| y.try_into().ok())?; + + if y >= self.info.height { + return None; + } + + let chunk = self.chunk(pos)?; + + let x = pos.x.rem_euclid(16) as u32; + let z = pos.z.rem_euclid(16) as u32; + + Some(chunk.block(x, y, z)) + } + + pub fn set_block(&mut self, pos: impl Into, block: impl IntoBlock) -> Option { + let pos = pos.into(); + + let y = pos + .y + .checked_sub(self.info.min_y) + .and_then(|y| y.try_into().ok())?; + + if y >= self.info.height { + return None; + } + + let chunk = self.chunk_mut(pos)?; + + let x = pos.x.rem_euclid(16) as u32; + let z = pos.z.rem_euclid(16) as u32; + + Some(chunk.set_block(x, y, z, block)) + } + + pub fn block_entity_mut(&mut self, pos: impl Into) -> Option<&mut Compound> { + let pos = pos.into(); + + let y = pos + .y + .checked_sub(self.info.min_y) + .and_then(|y| y.try_into().ok())?; + + if y >= self.info.height { + return None; + } + + let chunk = self.chunk_mut(pos)?; + + let x = pos.x.rem_euclid(16) as u32; + let z = pos.z.rem_euclid(16) as u32; + + chunk.block_entity_mut(x, y, z) + } + + pub fn biome(&self, pos: impl Into) -> Option { + let pos = pos.into(); + + let y = pos + .y + .checked_sub(self.info.min_y / 4) + .and_then(|y| y.try_into().ok())?; + + if y >= self.info.height / 4 { + return None; + } + + let chunk = self.chunk(pos)?; + + let x = pos.x.rem_euclid(4) as u32; + let z = pos.z.rem_euclid(4) as u32; + + Some(chunk.biome(x, y, z)) + } + + pub fn set_biome(&mut self, pos: impl Into, biome: BiomeId) -> Option { + let pos = pos.into(); + + let y = pos + .y + .checked_sub(self.info.min_y / 4) + .and_then(|y| y.try_into().ok())?; + + if y >= self.info.height / 4 { + return None; + } + + let chunk = self.chunk_mut(pos)?; + + let x = pos.x.rem_euclid(4) as u32; + let z = pos.z.rem_euclid(4) as u32; + + Some(chunk.set_biome(x, y, z, biome)) + } + + pub(crate) fn info(&self) -> &ChunkLayerInfo { + &self.info + } + + pub(crate) fn messages(&self) -> &ChunkLayerMessages { + &self.messages + } + + // TODO: move to `valence_particle`. + /// Puts a particle effect at the given position in the world. The particle + /// effect is visible to all players in the instance with the + /// appropriate chunk in view. + pub fn play_particle( + &mut self, + particle: &Particle, + long_distance: bool, + position: impl Into, + offset: impl Into, + max_speed: f32, + count: i32, + ) { + let position = position.into(); + + self.view_writer(position).write_packet(&ParticleS2c { + particle: Cow::Borrowed(particle), + long_distance, + position, + offset: offset.into(), + max_speed, + count, + }); + } + + // TODO: move to `valence_sound`. + /// Plays a sound effect at the given position in the world. The sound + /// effect is audible to all players in the instance with the + /// appropriate chunk in view. + pub fn play_sound( + &mut self, + sound: Sound, + category: SoundCategory, + position: impl Into, + volume: f32, + pitch: f32, + ) { + let position = position.into(); + + self.view_writer(position).write_packet(&PlaySoundS2c { + id: SoundId::Direct { + id: sound.to_ident(), + range: None, + }, + category, + position: (position * 8.0).as_ivec3(), + volume, + pitch, + seed: rand::random(), + }); + } +} + +impl Layer for ChunkLayer { + type ExceptWriter<'a> = ExceptWriter<'a>; + + type ViewWriter<'a> = ViewWriter<'a>; + + type ViewExceptWriter<'a> = ViewExceptWriter<'a>; + + type RadiusWriter<'a> = RadiusWriter<'a>; + + type RadiusExceptWriter<'a> = RadiusExceptWriter<'a>; + + fn except_writer(&mut self, except: Entity) -> Self::ExceptWriter<'_> { + ExceptWriter { + layer: self, + except, + } + } + + fn view_writer(&mut self, pos: impl Into) -> Self::ViewWriter<'_> { + ViewWriter { + layer: self, + pos: pos.into(), + } + } + + fn view_except_writer( + &mut self, + pos: impl Into, + except: Entity, + ) -> Self::ViewExceptWriter<'_> { + ViewExceptWriter { + layer: self, + pos: pos.into(), + except, + } + } + + fn radius_writer( + &mut self, + center: impl Into, + radius: u32, + ) -> Self::RadiusWriter<'_> { + RadiusWriter { + layer: self, + center: center.into(), + radius, + } + } + + fn radius_except_writer( + &mut self, + center: impl Into, + radius: u32, + except: Entity, + ) -> Self::RadiusExceptWriter<'_> { + RadiusExceptWriter { + layer: self, + center: center.into(), + radius, + except, + } + } +} + +impl WritePacket for ChunkLayer { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.messages.send_global(GlobalMsg::Packet, |b| { + PacketWriter::new(b, self.info.threshold).write_packet_fallible(packet) + }) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.messages + .send_global_infallible(GlobalMsg::Packet, |b| b.extend_from_slice(bytes)); + } +} + +pub struct ExceptWriter<'a> { + layer: &'a mut ChunkLayer, + except: Entity, +} + +impl WritePacket for ExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_global( + GlobalMsg::PacketExcept { + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.info.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_global_infallible( + GlobalMsg::PacketExcept { + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ) + } +} + +pub struct ViewWriter<'a> { + layer: &'a mut ChunkLayer, + pos: ChunkPos, +} + +impl WritePacket for ViewWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer + .messages + .send_local(LocalMsg::PacketAt { pos: self.pos }, |b| { + PacketWriter::new(b, self.layer.info.threshold).write_packet_fallible(packet) + }) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer + .messages + .send_local_infallible(LocalMsg::PacketAt { pos: self.pos }, |b| { + b.extend_from_slice(bytes) + }); + } +} + +pub struct ViewExceptWriter<'a> { + layer: &'a mut ChunkLayer, + pos: ChunkPos, + except: Entity, +} + +impl WritePacket for ViewExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::PacketAtExcept { + pos: self.pos, + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.info.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::PacketAtExcept { + pos: self.pos, + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +pub struct RadiusWriter<'a> { + layer: &'a mut ChunkLayer, + center: BlockPos, + radius: u32, +} + +impl WritePacket for RadiusWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::RadiusAt { + center: self.center, + radius_squared: self.radius, + }, + |b| PacketWriter::new(b, self.layer.info.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::RadiusAt { + center: self.center, + radius_squared: self.radius, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +pub struct RadiusExceptWriter<'a> { + layer: &'a mut ChunkLayer, + center: BlockPos, + radius: u32, + except: Entity, +} + +impl WritePacket for RadiusExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::RadiusAtExcept { + center: self.center, + radius_squared: self.radius, + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.info.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::RadiusAtExcept { + center: self.center, + radius_squared: self.radius, + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +#[derive(Debug)] +pub enum ChunkEntry<'a> { + Occupied(OccupiedChunkEntry<'a>), + Vacant(VacantChunkEntry<'a>), +} + +impl<'a> ChunkEntry<'a> { + pub fn or_default(self) -> &'a mut LoadedChunk { + match self { + ChunkEntry::Occupied(oe) => oe.into_mut(), + ChunkEntry::Vacant(ve) => ve.insert(UnloadedChunk::new()), + } + } +} + +#[derive(Debug)] +pub struct OccupiedChunkEntry<'a> { + messages: &'a mut ChunkLayerMessages, + entry: OccupiedEntry<'a, ChunkPos, LoadedChunk>, +} + +impl<'a> OccupiedChunkEntry<'a> { + pub fn get(&self) -> &LoadedChunk { + self.entry.get() + } + + pub fn get_mut(&mut self) -> &mut LoadedChunk { + self.entry.get_mut() + } + + pub fn insert(&mut self, chunk: UnloadedChunk) -> UnloadedChunk { + self.messages.send_local_infallible( + LocalMsg::ChangeChunkState { + pos: *self.entry.key(), + }, + |b| b.push(ChunkLayer::OVERWRITE), + ); + + self.entry.get_mut().insert(chunk) + } + + pub fn into_mut(self) -> &'a mut LoadedChunk { + self.entry.into_mut() + } + + pub fn key(&self) -> &ChunkPos { + self.entry.key() + } + + pub fn remove(self) -> UnloadedChunk { + self.messages.send_local_infallible( + LocalMsg::ChangeChunkState { + pos: *self.entry.key(), + }, + |b| b.push(ChunkLayer::UNLOAD), + ); + + self.entry.remove().remove() + } + + pub fn remove_entry(mut self) -> (ChunkPos, UnloadedChunk) { + let pos = *self.entry.key(); + let chunk = self.entry.get_mut().remove(); + + self.messages.send_local_infallible( + LocalMsg::ChangeChunkState { + pos: *self.entry.key(), + }, + |b| b.push(ChunkLayer::UNLOAD), + ); + + (pos, chunk) + } +} + +#[derive(Debug)] +pub struct VacantChunkEntry<'a> { + height: u32, + messages: &'a mut ChunkLayerMessages, + entry: VacantEntry<'a, ChunkPos, LoadedChunk>, +} + +impl<'a> VacantChunkEntry<'a> { + pub fn insert(self, chunk: UnloadedChunk) -> &'a mut LoadedChunk { + let mut loaded = LoadedChunk::new(self.height); + loaded.insert(chunk); + + self.messages.send_local_infallible( + LocalMsg::ChangeChunkState { + pos: *self.entry.key(), + }, + |b| b.push(ChunkLayer::LOAD), + ); + + self.entry.insert(loaded) + } + + pub fn into_key(self) -> ChunkPos { + *self.entry.key() + } + + pub fn key(&self) -> &ChunkPos { + self.entry.key() + } +} + +pub(super) fn build(app: &mut App) { + app.add_systems( + PostUpdate, + ( + update_chunk_layers_pre_client.in_set(UpdateLayersPreClientSet), + update_chunk_layers_post_client.in_set(UpdateLayersPostClientSet), + ), + ); +} + +fn update_chunk_layers_pre_client(mut layers: Query<&mut ChunkLayer>) { + for layer in &mut layers { + let layer = layer.into_inner(); + + for (&pos, chunk) in &mut layer.chunks { + chunk.update_pre_client(pos, &layer.info, &mut layer.messages); + } + + layer.messages.ready(); + } +} + +fn update_chunk_layers_post_client(mut layers: Query<&mut ChunkLayer>) { + for mut layer in &mut layers { + layer.messages.unready(); + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/chunk/chunk.rs b/vendor/valence/crates/valence_server/src/layer/chunk/chunk.rs new file mode 100644 index 00000000..6e0a20ed --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/chunk/chunk.rs @@ -0,0 +1,423 @@ +use valence_nbt::Compound; +use valence_protocol::BlockState; +use valence_registry::biome::BiomeId; + +use super::paletted_container::PalettedContainer; + +/// Common operations on chunks. Notable implementors are +/// [`LoadedChunk`](super::loaded::LoadedChunk) and +/// [`UnloadedChunk`](super::unloaded::UnloadedChunk). +pub trait Chunk { + /// Gets the height of this chunk in meters or blocks. + fn height(&self) -> u32; + + /// Gets the block at the provided position in this chunk. `x` and `z` + /// are in the range `0..16` while `y` is in the range `0..height`. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn block(&self, x: u32, y: u32, z: u32) -> BlockRef { + BlockRef { + state: self.block_state(x, y, z), + nbt: self.block_entity(x, y, z), + } + } + + /// Sets the block at the provided position in this chunk. `x` and `z` + /// are in the range `0..16` while `y` is in the range `0..height`. The + /// previous block at the position is returned. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn set_block(&mut self, x: u32, y: u32, z: u32, block: impl IntoBlock) -> Block { + let block = block.into_block(); + let state = self.set_block_state(x, y, z, block.state); + let nbt = self.set_block_entity(x, y, z, block.nbt); + + Block { state, nbt } + } + + /// Sets all the blocks in the entire chunk to the provided block. + fn fill_blocks(&mut self, block: impl IntoBlock) { + let block = block.into_block(); + + self.fill_block_states(block.state); + + if block.nbt.is_some() { + for x in 0..16 { + for z in 0..16 { + for y in 0..self.height() { + self.set_block_entity(x, y, z, block.nbt.clone()); + } + } + } + } else { + self.clear_block_entities(); + } + } + + /// Gets the block state at the provided position in this chunk. `x` and `z` + /// are in the range `0..16` while `y` is in the range `0..height`. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn block_state(&self, x: u32, y: u32, z: u32) -> BlockState; + + /// Sets the block state at the provided position in this chunk. `x` and `z` + /// are in the range `0..16` while `y` is in the range `0..height`. The + /// previous block state at the position is returned. + /// + /// **NOTE:** This is a low-level function which may break expected + /// invariants for block entities. Prefer [`Self::set_block`] if performance + /// is not a concern. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn set_block_state(&mut self, x: u32, y: u32, z: u32, block: BlockState) -> BlockState; + + /// Replaces all block states in the entire chunk with the provided block + /// state. + /// + /// **NOTE:** This is a low-level function which may break expected + /// invariants for block entities. Prefer [`Self::fill_blocks`] instead. + fn fill_block_states(&mut self, block: BlockState) { + for sect_y in 0..self.height() / 16 { + self.fill_block_state_section(sect_y, block); + } + } + + /// Replaces all the block states in a section with the provided block + /// state. + /// + /// **NOTE:** This is a low-level function which may break expected + /// invariants for block entities. Prefer [`Self::set_block`] if performance + /// is not a concern. + /// + /// # Panics + /// + /// May panic if the section offset is out of bounds. + #[track_caller] + fn fill_block_state_section(&mut self, sect_y: u32, block: BlockState); + + /// Gets the block entity at the provided position in this chunk. `x` and + /// `z` are in the range `0..16` while `y` is in the range `0..height`. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn block_entity(&self, x: u32, y: u32, z: u32) -> Option<&Compound>; + + /// Gets a mutable reference to the block entity at the provided position in + /// this chunk. `x` and `z` are in the range `0..16` while `y` is in the + /// range `0..height`. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn block_entity_mut(&mut self, x: u32, y: u32, z: u32) -> Option<&mut Compound>; + + /// Sets the block entity at the provided position in this chunk. `x` and + /// `z` are in the range `0..16` while `y` is in the range `0..height`. + /// The previous block entity at the position is returned. + /// + /// **NOTE:** This is a low-level function which may break expected + /// invariants for block entities. Prefer [`Self::set_block`] if performance + /// is not a concern. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn set_block_entity( + &mut self, + x: u32, + y: u32, + z: u32, + block_entity: Option, + ) -> Option; + + /// Removes all block entities from the chunk. + /// + /// **NOTE:** This is a low-level function which may break expected + /// invariants for block entities. Prefer [`Self::set_block`] if performance + /// is not a concern. + fn clear_block_entities(&mut self); + + /// Gets the biome at the provided position in this chunk. `x` and `z` are + /// in the range `0..4` while `y` is in the range `0..height / 4`. + /// + /// Note that biomes are 4x4x4 segments of a chunk, so the xyz arguments to + /// this method differ from those to [`Self::block_state`] and + /// [`Self::block_entity`]. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn biome(&self, x: u32, y: u32, z: u32) -> BiomeId; + + /// Sets the biome at the provided position in this chunk. The Previous + /// biome at the position is returned. `x` and `z` are in the range `0..4` + /// while `y` is in the range `0..height / 4`. + /// + /// Note that biomes are 4x4x4 segments of a chunk, so the xyz arguments to + /// this method differ from those to [`Self::block_state`] and + /// [`Self::block_entity`]. + /// + /// # Panics + /// + /// May panic if the position is out of bounds. + #[track_caller] + fn set_biome(&mut self, x: u32, y: u32, z: u32, biome: BiomeId) -> BiomeId; + + /// Sets all the biomes in the entire chunk to the provided biome. + fn fill_biomes(&mut self, biome: BiomeId) { + for sect_y in 0..self.height() / 16 { + self.fill_biome_section(sect_y, biome); + } + } + + /// Replaces all the biomes in a section with the provided biome. + /// + /// # Panics + /// + /// May panic if the section offset is out of bounds. + #[track_caller] + fn fill_biome_section(&mut self, sect_y: u32, biome: BiomeId); + + /// Sets all blocks and biomes in this chunk to the default values. The + /// height of the chunk is not modified. + fn clear(&mut self) { + self.fill_block_states(BlockState::AIR); + self.fill_biomes(BiomeId::default()); + self.clear_block_entities(); + } + + /// Attempts to optimize this chunk by reducing its memory usage or other + /// characteristics. This may be a relatively expensive operation. + /// + /// This method must not alter the semantics of the chunk in any observable + /// way. + fn shrink_to_fit(&mut self); +} + +/// Represents a complete block, which is a pair of block state and optional NBT +/// data for the block entity. +#[derive(Clone, PartialEq, Default, Debug)] +pub struct Block { + pub state: BlockState, + pub nbt: Option, +} + +impl Block { + pub const fn new(state: BlockState, nbt: Option) -> Self { + Self { state, nbt } + } +} + +/// Like [`Block`], but immutably referenced. +#[derive(Copy, Clone, PartialEq, Default, Debug)] +pub struct BlockRef<'a> { + pub state: BlockState, + pub nbt: Option<&'a Compound>, +} + +impl<'a> BlockRef<'a> { + pub const fn new(state: BlockState, nbt: Option<&'a Compound>) -> Self { + Self { state, nbt } + } +} + +pub trait IntoBlock { + // TODO: parameterize this with block registry ref? + fn into_block(self) -> Block; +} + +impl IntoBlock for Block { + fn into_block(self) -> Block { + self + } +} + +impl<'a> IntoBlock for BlockRef<'a> { + fn into_block(self) -> Block { + Block { + state: self.state, + nbt: self.nbt.cloned(), + } + } +} + +/// This will initialize the block with a new empty compound if the block state +/// is associated with a block entity. +impl IntoBlock for BlockState { + fn into_block(self) -> Block { + Block { + state: self, + nbt: self.block_entity_kind().map(|_| Compound::new()), + } + } +} + +pub const SECTION_BLOCK_COUNT: usize = 16 * 16 * 16; +pub const SECTION_BIOME_COUNT: usize = 4 * 4 * 4; + +/// The maximum height of a chunk. +pub const MAX_HEIGHT: u32 = 4096; + +pub type BlockStateContainer = + PalettedContainer; + +pub type BiomeContainer = + PalettedContainer; + +#[inline] +#[track_caller] +pub fn check_block_oob(chunk: &impl Chunk, x: u32, y: u32, z: u32) { + assert!( + x < 16 && y < chunk.height() && z < 16, + "chunk block offsets of ({x}, {y}, {z}) are out of bounds" + ); +} + +#[inline] +#[track_caller] +pub fn check_biome_oob(chunk: &impl Chunk, x: u32, y: u32, z: u32) { + assert!( + x < 4 && y < chunk.height() / 4 && z < 4, + "chunk biome offsets of ({x}, {y}, {z}) are out of bounds" + ); +} + +#[inline] +#[track_caller] +pub fn check_section_oob(chunk: &impl Chunk, sect_y: u32) { + assert!( + sect_y < chunk.height() / 16, + "chunk section offset of {sect_y} is out of bounds" + ); +} + +/// Returns the minimum number of bits needed to represent the integer `n`. +pub const fn bit_width(n: usize) -> usize { + (usize::BITS - n.leading_zeros()) as _ +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::layer::chunk::{LoadedChunk, UnloadedChunk}; + + #[test] + fn chunk_get_set() { + fn check(mut chunk: impl Chunk) { + assert_eq!( + chunk.set_block_state(1, 2, 3, BlockState::CHAIN), + BlockState::AIR + ); + assert_eq!( + chunk.set_block_state(1, 2, 3, BlockState::AIR), + BlockState::CHAIN + ); + + assert_eq!(chunk.set_block_entity(1, 2, 3, Some(Compound::new())), None); + assert_eq!(chunk.set_block_entity(1, 2, 3, None), Some(Compound::new())); + } + + let unloaded = UnloadedChunk::with_height(512); + let loaded = LoadedChunk::new(512); + + check(unloaded); + check(loaded); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_0() { + let mut chunk = UnloadedChunk::with_height(512); + chunk.set_block_state(0, 0, 16, BlockState::AIR); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_1() { + let mut chunk = LoadedChunk::new(512); + chunk.set_block_state(0, 0, 16, BlockState::AIR); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_2() { + let mut chunk = UnloadedChunk::with_height(512); + chunk.set_block_entity(0, 0, 16, None); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_3() { + let mut chunk = LoadedChunk::new(512); + chunk.set_block_entity(0, 0, 16, None); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_4() { + let mut chunk = UnloadedChunk::with_height(512); + chunk.set_biome(0, 0, 4, BiomeId::DEFAULT); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_5() { + let mut chunk = LoadedChunk::new(512); + chunk.set_biome(0, 0, 4, BiomeId::DEFAULT); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_6() { + let mut chunk = UnloadedChunk::with_height(512); + chunk.fill_block_state_section(chunk.height() / 16, BlockState::AIR); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_7() { + let mut chunk = LoadedChunk::new(512); + chunk.fill_block_state_section(chunk.height() / 16, BlockState::AIR); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_8() { + let mut chunk = UnloadedChunk::with_height(512); + chunk.fill_biome_section(chunk.height() / 16, BiomeId::DEFAULT); + } + + #[cfg(debug_assertions)] + #[test] + #[should_panic] + fn chunk_debug_oob_9() { + let mut chunk = LoadedChunk::new(512); + chunk.fill_biome_section(chunk.height() / 16, BiomeId::DEFAULT); + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/chunk/loaded.rs b/vendor/valence/crates/valence_server/src/layer/chunk/loaded.rs new file mode 100644 index 00000000..3188abdc --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/chunk/loaded.rs @@ -0,0 +1,776 @@ +use std::borrow::Cow; +use std::collections::{BTreeMap, BTreeSet}; +use std::mem; +use std::sync::atomic::{AtomicU32, Ordering}; + +use parking_lot::Mutex; // Using nonstandard mutex to avoid poisoning API. +use valence_bytes::CowBytes; +use valence_generated::block::{PropName, PropValue}; +use valence_nbt::{Compound, Value, compound}; +use valence_protocol::encode::{PacketWriter, WritePacket}; +use valence_protocol::packets::play::chunk_data_s2c::ChunkDataBlockEntity; +use valence_protocol::packets::play::chunk_delta_update_s2c::ChunkDeltaUpdateEntry; +use valence_protocol::packets::play::{ + BlockEntityUpdateS2c, BlockUpdateS2c, ChunkDataS2c, ChunkDeltaUpdateS2c, +}; +use valence_protocol::{BlockPos, BlockState, ChunkPos, ChunkSectionPos, Encode}; +use valence_registry::RegistryIdx; +use valence_registry::biome::BiomeId; + +use super::chunk::{ + BiomeContainer, BlockStateContainer, Chunk, SECTION_BLOCK_COUNT, bit_width, check_biome_oob, + check_block_oob, check_section_oob, +}; +use super::paletted_container::PalettedContainer; +use super::unloaded::{self, UnloadedChunk}; +use super::{ChunkLayerInfo, ChunkLayerMessages, LocalMsg}; + +#[derive(Debug)] +pub struct LoadedChunk { + /// A count of the clients viewing this chunk. Useful for knowing if it's + /// necessary to record changes, since no client would be in view to receive + /// the changes if this were zero. + viewer_count: AtomicU32, + /// Block and biome data for the chunk. + sections: Box<[Section]>, + /// The block entities in this chunk. + block_entities: BTreeMap, + /// The set of block entities that have been modified this tick. + changed_block_entities: BTreeSet, + /// If any biomes in this chunk have been modified this tick. + changed_biomes: bool, + /// Cached bytes of the chunk initialization packet. The cache is considered + /// invalidated if empty. This should be cleared whenever the chunk is + /// modified in an observable way, even if the chunk is not viewed. + cached_init_packets: Mutex>, +} + +#[derive(Clone, Default, Debug)] +struct Section { + block_states: BlockStateContainer, + biomes: BiomeContainer, + /// Contains modifications for the update section packet. (Or the regular + /// block update packet if len == 1). + section_updates: Vec, +} + +impl Section { + fn count_non_air_blocks(&self) -> u16 { + let mut count = 0; + + match &self.block_states { + PalettedContainer::Single(s) => { + if !s.is_air() { + count += SECTION_BLOCK_COUNT as u16; + } + } + PalettedContainer::Indirect(ind) => { + for i in 0..SECTION_BLOCK_COUNT { + if !ind.get(i).is_air() { + count += 1; + } + } + } + PalettedContainer::Direct(dir) => { + for s in dir.as_ref() { + if !s.is_air() { + count += 1; + } + } + } + } + count + } +} + +impl LoadedChunk { + pub(crate) fn new(height: u32) -> Self { + Self { + viewer_count: AtomicU32::new(0), + sections: vec![Section::default(); height as usize / 16].into(), + block_entities: BTreeMap::new(), + changed_block_entities: BTreeSet::new(), + changed_biomes: false, + cached_init_packets: Mutex::new(vec![]), + } + } + + /// Sets the content of this chunk to the supplied [`UnloadedChunk`]. The + /// given unloaded chunk is [resized] to match the height of this loaded + /// chunk prior to insertion. + /// + /// The previous chunk data is returned. + /// + /// [resized]: UnloadedChunk::set_height + pub(crate) fn insert(&mut self, mut chunk: UnloadedChunk) -> UnloadedChunk { + chunk.set_height(self.height()); + + let old_sections = self + .sections + .iter_mut() + .zip(chunk.sections) + .map(|(sect, other_sect)| { + sect.section_updates.clear(); + + unloaded::Section { + block_states: mem::replace(&mut sect.block_states, other_sect.block_states), + biomes: mem::replace(&mut sect.biomes, other_sect.biomes), + } + }) + .collect(); + let old_block_entities = mem::replace(&mut self.block_entities, chunk.block_entities); + self.changed_block_entities.clear(); + self.changed_biomes = false; + self.cached_init_packets.get_mut().clear(); + self.assert_no_changes(); + + UnloadedChunk { + sections: old_sections, + block_entities: old_block_entities, + } + } + + pub(crate) fn remove(&mut self) -> UnloadedChunk { + let old_sections = self + .sections + .iter_mut() + .map(|sect| { + sect.section_updates.clear(); + + unloaded::Section { + block_states: mem::take(&mut sect.block_states), + biomes: mem::take(&mut sect.biomes), + } + }) + .collect(); + let old_block_entities = mem::take(&mut self.block_entities); + self.changed_block_entities.clear(); + self.changed_biomes = false; + self.cached_init_packets.get_mut().clear(); + + self.assert_no_changes(); + + UnloadedChunk { + sections: old_sections, + block_entities: old_block_entities, + } + } + + /// Returns the number of clients in view of this chunk. + pub fn viewer_count(&self) -> u32 { + self.viewer_count.load(Ordering::Relaxed) + } + + /// Like [`Self::viewer_count`], but avoids an atomic operation. + pub fn viewer_count_mut(&mut self) -> u32 { + *self.viewer_count.get_mut() + } + + /// Increments the viewer count. + pub(crate) fn inc_viewer_count(&self) { + self.viewer_count.fetch_add(1, Ordering::Relaxed); + } + + /// Decrements the viewer count. + #[track_caller] + pub(crate) fn dec_viewer_count(&self) { + let old = self.viewer_count.fetch_sub(1, Ordering::Relaxed); + debug_assert_ne!(old, 0, "viewer count underflow!"); + } + + /// Performs the changes necessary to prepare this chunk for client updates. + /// - Chunk change messages are written to the layer. + /// - Recorded changes are cleared. + pub(crate) fn update_pre_client( + &mut self, + pos: ChunkPos, + info: &ChunkLayerInfo, + messages: &mut ChunkLayerMessages, + ) { + if *self.viewer_count.get_mut() == 0 { + // Nobody is viewing the chunk, so no need to send any update packets. There + // also shouldn't be any changes that need to be cleared. + self.assert_no_changes(); + + return; + } + + // Block states + for (sect_y, sect) in self.sections.iter_mut().enumerate() { + match sect.section_updates.as_slice() { + &[] => {} + &[entry] => { + let global_x = pos.x * 16 + entry.off_x() as i32; + let global_y = info.min_y + sect_y as i32 * 16 + entry.off_y() as i32; + let global_z = pos.z * 16 + entry.off_z() as i32; + + messages.send_local_infallible(LocalMsg::PacketAt { pos }, |buf| { + let mut writer = PacketWriter::new(buf, info.threshold); + + writer.write_packet(&BlockUpdateS2c { + position: BlockPos::new(global_x, global_y, global_z), + block_id: BlockState::from_raw(entry.block_state() as u16).unwrap(), + }); + }); + } + entries => { + let chunk_sect_pos = ChunkSectionPos { + x: pos.x, + y: sect_y as i32 + info.min_y.div_euclid(16), + z: pos.z, + }; + + messages.send_local_infallible(LocalMsg::PacketAt { pos }, |buf| { + let mut writer = PacketWriter::new(buf, info.threshold); + + writer.write_packet(&ChunkDeltaUpdateS2c { + chunk_sect_pos, + blocks: Cow::Borrowed(entries), + }); + }); + } + } + + sect.section_updates.clear(); + } + + // Block entities + for &idx in &self.changed_block_entities { + let Some(nbt) = self.block_entities.get(&idx) else { + continue; + }; + + let x = idx % 16; + let z = (idx / 16) % 16; + let y = idx / 16 / 16; + + let state = self.sections[y as usize / 16] + .block_states + .get(idx as usize % SECTION_BLOCK_COUNT); + + let Some(kind) = state.block_entity_kind() else { + continue; + }; + + let global_x = pos.x * 16 + x as i32; + let global_y = info.min_y + y as i32; + let global_z = pos.z * 16 + z as i32; + + messages.send_local_infallible(LocalMsg::PacketAt { pos }, |buf| { + let mut writer = PacketWriter::new(buf, info.threshold); + + writer.write_packet(&BlockEntityUpdateS2c { + position: BlockPos::new(global_x, global_y, global_z), + kind, + data: Cow::Borrowed(nbt), + }); + }); + } + + self.changed_block_entities.clear(); + + // Biomes + if self.changed_biomes { + self.changed_biomes = false; + + messages.send_local_infallible(LocalMsg::ChangeBiome { pos }, |buf| { + for sect in self.sections.iter() { + sect.biomes + .encode_mc_format( + &mut *buf, + |b| b.to_index() as _, + 0, + 3, + bit_width(info.biome_registry_len - 1), + ) + .expect("paletted container encode should always succeed"); + } + }); + } + + // All changes should be cleared. + self.assert_no_changes(); + } + + /// Generates the `MOTION_BLOCKING` heightmap for this chunk, which stores + /// the height of the highest non motion-blocking block in each column. + /// + /// The lowest value of the heightmap is 0, which means that there are no + /// motion-blocking blocks in the column. In this case, rain will fall + /// through the void and there will be no rain particles. + /// + /// A value of 1 means that rain particles will appear at the lowest + /// possible height given by [`DimensionType::min_y`]. Note that + /// blocks cannot be placed at `min_y - 1`. + /// + /// We take these two special cases into account by adding a value of 2 to + /// our heightmap if we find a motion-blocking block, since + /// `self.block_state(x, 0, z)` corresponds to the block at (x, min_y, z) + /// ingame. + /// + /// [`DimensionType::min_y`]: valence_registry::dimension_type::DimensionType::min_y + #[allow(clippy::needless_range_loop)] + fn motion_blocking(&self) -> Vec> { + let mut heightmap: Vec> = vec![vec![0; 16]; 16]; + + for z in 0..16 { + for x in 0..16 { + for y in (0..self.height()).rev() { + let state = self.block_state(x as u32, y, z as u32); + if state.blocks_motion() + || state.is_liquid() + || state.get(PropName::Waterlogged) == Some(PropValue::True) + { + heightmap[z][x] = y + 2; + break; + } + } + } + } + + heightmap + } + + /// Encodes a given heightmap into the correct format of the + /// `ChunkDataS2c` packet. + /// + /// The heightmap values are stored in a long array. Each value is encoded + /// as a 9-bit unsigned integer, so every long with 64 bits can hold at + /// most seven values. The long is padded at the left side with a single + /// zero. Since there are 256 values for 256 columns in a chunk, there + /// will be 36 fully filled longs and one half-filled long with four + /// values. The remaining three values in the last long are left unused. + /// + /// For example, the `MOTION_BLOCKING` heightmap in an empty superflat + /// world is always 4. The first 36 long values will then be + /// + /// 0 000000100 000000100 000000100 000000100 000000100 000000100 000000100, + /// + /// and the last long will be + /// + /// 0 000000000 000000000 000000000 000000100 000000100 000000100 000000100. + fn encode_heightmap(heightmap: Vec>) -> Value { + const BITS_PER_ENTRY: u32 = 9; + const ENTRIES_PER_LONG: u32 = i64::BITS / BITS_PER_ENTRY; + + // Unless `ENTRIES_PER_LONG` is a power of 2 and therefore evenly divides 16*16, + // we need to add one extra long to fit all values in the packet. + const LONGS_PER_PACKET: u32 = + 16 * 16 / ENTRIES_PER_LONG + (16 * 16 % ENTRIES_PER_LONG != 0) as u32; + + let mut encoded: Vec = vec![0; LONGS_PER_PACKET as usize]; + let mut iter = heightmap.into_iter().flatten(); + + for long in encoded.iter_mut() { + for j in 0..ENTRIES_PER_LONG { + match iter.next() { + None => break, + Some(y) => *long += i64::from(y) << (BITS_PER_ENTRY * j), + } + } + } + + Value::LongArray(encoded) + } + + /// Writes the packet data needed to initialize this chunk. + pub(crate) fn write_init_packets( + &self, + mut writer: impl WritePacket, + pos: ChunkPos, + info: &ChunkLayerInfo, + ) { + let mut init_packets = self.cached_init_packets.lock(); + + if init_packets.is_empty() { + let heightmaps = compound! { + "MOTION_BLOCKING" => LoadedChunk::encode_heightmap(self.motion_blocking()), + // TODO Implement `WORLD_SURFACE` (or explain why we don't need it) + // "WORLD_SURFACE" => self.encode_heightmap(self.world_surface()), + }; + + let mut blocks_and_biomes: Vec = vec![]; + + for sect in self.sections.iter() { + sect.count_non_air_blocks() + .encode(&mut blocks_and_biomes) + .unwrap(); + + sect.block_states + .encode_mc_format( + &mut blocks_and_biomes, + |b| b.to_raw().into(), + 4, + 8, + bit_width(BlockState::max_raw().into()), + ) + .expect("paletted container encode should always succeed"); + + sect.biomes + .encode_mc_format( + &mut blocks_and_biomes, + |b| b.to_index() as _, + 0, + 3, + bit_width(info.biome_registry_len - 1), + ) + .expect("paletted container encode should always succeed"); + } + + let block_entities: Vec<_> = self + .block_entities + .iter() + .filter_map(|(&idx, nbt)| { + let x = idx % 16; + let z = idx / 16 % 16; + let y = idx / 16 / 16; + + let kind = self.sections[y as usize / 16] + .block_states + .get(idx as usize % SECTION_BLOCK_COUNT) + .block_entity_kind(); + + kind.map(|kind| ChunkDataBlockEntity { + packed_xz: ((x << 4) | z) as i8, + y: y as i16 + info.min_y as i16, + kind, + data: Cow::Borrowed(nbt), + }) + }) + .collect(); + + PacketWriter::new(&mut init_packets, info.threshold).write_packet(&ChunkDataS2c { + pos, + heightmaps: Cow::Owned(heightmaps), + blocks_and_biomes: CowBytes::Borrowed(&blocks_and_biomes), + block_entities: Cow::Owned(block_entities), + sky_light_mask: Cow::Borrowed(&[]), + block_light_mask: Cow::Borrowed(&[]), + empty_sky_light_mask: Cow::Borrowed(&[]), + empty_block_light_mask: Cow::Borrowed(&[]), + sky_light_arrays: Cow::Borrowed(&[]), + block_light_arrays: Cow::Borrowed(&[]), + }) + } + + writer.write_packet_bytes(&init_packets); + } + + /// Asserts that no changes to this chunk are currently recorded. + #[track_caller] + fn assert_no_changes(&self) { + #[cfg(debug_assertions)] + { + assert!(!self.changed_biomes); + assert!(self.changed_block_entities.is_empty()); + + for sect in self.sections.iter() { + assert!(sect.section_updates.is_empty()); + } + } + } +} + +impl Chunk for LoadedChunk { + fn height(&self) -> u32 { + self.sections.len() as u32 * 16 + } + + fn block_state(&self, x: u32, y: u32, z: u32) -> BlockState { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y % 16 * 16 * 16; + self.sections[y as usize / 16] + .block_states + .get(idx as usize) + } + + fn set_block_state(&mut self, x: u32, y: u32, z: u32, block: BlockState) -> BlockState { + check_block_oob(self, x, y, z); + + let sect_y = y / 16; + let sect = &mut self.sections[sect_y as usize]; + let idx = x + z * 16 + y % 16 * 16 * 16; + + let old_block = sect.block_states.set(idx as usize, block); + + if block != old_block { + self.cached_init_packets.get_mut().clear(); + + if *self.viewer_count.get_mut() > 0 { + sect.section_updates.push( + ChunkDeltaUpdateEntry::new() + .with_off_x(x as u8) + .with_off_y((y % 16) as u8) + .with_off_z(z as u8) + .with_block_state(block.to_raw().into()), + ); + } + } + + old_block + } + + fn fill_block_state_section(&mut self, sect_y: u32, block: BlockState) { + check_section_oob(self, sect_y); + + let sect = &mut self.sections[sect_y as usize]; + + if let PalettedContainer::Single(b) = §.block_states { + if *b != block { + self.cached_init_packets.get_mut().clear(); + + if *self.viewer_count.get_mut() > 0 { + // The whole section is being modified, so any previous modifications would + // be overwritten. + sect.section_updates.clear(); + + // Push section updates for all the blocks in the section. + sect.section_updates.reserve_exact(SECTION_BLOCK_COUNT); + for z in 0..16 { + for x in 0..16 { + for y in 0..16 { + sect.section_updates.push( + ChunkDeltaUpdateEntry::new() + .with_off_x(x) + .with_off_y(y) + .with_off_z(z) + .with_block_state(block.to_raw().into()), + ); + } + } + } + } + } + } else { + for z in 0..16 { + for x in 0..16 { + for y in 0..16 { + let idx = x + z * 16 + (sect_y * 16 + y) * (16 * 16); + + if block != sect.block_states.get(idx as usize) { + self.cached_init_packets.get_mut().clear(); + + if *self.viewer_count.get_mut() > 0 { + sect.section_updates.push( + ChunkDeltaUpdateEntry::new() + .with_off_x(x as u8) + .with_off_y(y as u8) + .with_off_z(z as u8) + .with_block_state(block.to_raw().into()), + ); + } + } + } + } + } + } + + sect.block_states.fill(block); + } + + fn block_entity(&self, x: u32, y: u32, z: u32) -> Option<&Compound> { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + self.block_entities.get(&idx) + } + + fn block_entity_mut(&mut self, x: u32, y: u32, z: u32) -> Option<&mut Compound> { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + + if let Some(be) = self.block_entities.get_mut(&idx) { + if *self.viewer_count.get_mut() > 0 { + self.changed_block_entities.insert(idx); + } + self.cached_init_packets.get_mut().clear(); + + Some(be) + } else { + None + } + } + + fn set_block_entity( + &mut self, + x: u32, + y: u32, + z: u32, + block_entity: Option, + ) -> Option { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + + match block_entity { + Some(nbt) => { + if *self.viewer_count.get_mut() > 0 { + self.changed_block_entities.insert(idx); + } + self.cached_init_packets.get_mut().clear(); + + self.block_entities.insert(idx, nbt) + } + None => { + let res = self.block_entities.remove(&idx); + + if res.is_some() { + self.cached_init_packets.get_mut().clear(); + } + + res + } + } + } + + fn clear_block_entities(&mut self) { + if self.block_entities.is_empty() { + return; + } + + self.cached_init_packets.get_mut().clear(); + + if *self.viewer_count.get_mut() > 0 { + self.changed_block_entities + .extend(mem::take(&mut self.block_entities).into_keys()); + } else { + self.block_entities.clear(); + } + } + + fn biome(&self, x: u32, y: u32, z: u32) -> BiomeId { + check_biome_oob(self, x, y, z); + + let idx = x + z * 4 + y % 4 * 4 * 4; + self.sections[y as usize / 4].biomes.get(idx as usize) + } + + fn set_biome(&mut self, x: u32, y: u32, z: u32, biome: BiomeId) -> BiomeId { + check_biome_oob(self, x, y, z); + + let idx = x + z * 4 + y % 4 * 4 * 4; + let old_biome = self.sections[y as usize / 4] + .biomes + .set(idx as usize, biome); + + if biome != old_biome { + self.cached_init_packets.get_mut().clear(); + + if *self.viewer_count.get_mut() > 0 { + self.changed_biomes = true; + } + } + + old_biome + } + + fn fill_biome_section(&mut self, sect_y: u32, biome: BiomeId) { + check_section_oob(self, sect_y); + + let sect = &mut self.sections[sect_y as usize]; + + if let PalettedContainer::Single(b) = §.biomes { + if *b != biome { + self.cached_init_packets.get_mut().clear(); + self.changed_biomes = *self.viewer_count.get_mut() > 0; + } + } else { + self.cached_init_packets.get_mut().clear(); + self.changed_biomes = *self.viewer_count.get_mut() > 0; + } + + sect.biomes.fill(biome); + } + + fn shrink_to_fit(&mut self) { + self.cached_init_packets.get_mut().shrink_to_fit(); + + for sect in self.sections.iter_mut() { + sect.block_states.shrink_to_fit(); + sect.biomes.shrink_to_fit(); + sect.section_updates.shrink_to_fit(); + } + } +} + +#[cfg(test)] +mod tests { + use valence_protocol::{CompressionThreshold, ident}; + + use super::*; + + #[test] + fn loaded_chunk_unviewed_no_changes() { + let mut chunk = LoadedChunk::new(512); + + chunk.set_block(0, 10, 0, BlockState::MAGMA_BLOCK); + chunk.assert_no_changes(); + + chunk.set_biome(0, 0, 0, BiomeId::from_index(5)); + chunk.assert_no_changes(); + + chunk.fill_block_states(BlockState::ACACIA_BUTTON); + chunk.assert_no_changes(); + + chunk.fill_biomes(BiomeId::from_index(42)); + chunk.assert_no_changes(); + } + + #[test] + fn loaded_chunk_changes_clear_packet_cache() { + #[track_caller] + fn check(chunk: &mut LoadedChunk, change: impl FnOnce(&mut LoadedChunk) -> T) { + let info = ChunkLayerInfo { + dimension_type_name: ident!("whatever").into(), + height: 512, + min_y: -16, + biome_registry_len: 200, + threshold: CompressionThreshold(-1), + }; + + let mut buf = vec![]; + let mut writer = PacketWriter::new(&mut buf, CompressionThreshold(-1)); + + // Rebuild cache. + chunk.write_init_packets(&mut writer, ChunkPos::new(3, 4), &info); + + // Check that the cache is built. + assert!(!chunk.cached_init_packets.get_mut().is_empty()); + + // Making a change should clear the cache. + change(chunk); + assert!(chunk.cached_init_packets.get_mut().is_empty()); + + // Rebuild cache again. + chunk.write_init_packets(&mut writer, ChunkPos::new(3, 4), &info); + assert!(!chunk.cached_init_packets.get_mut().is_empty()); + } + + let mut chunk = LoadedChunk::new(512); + + check(&mut chunk, |c| { + c.set_block_state(0, 4, 0, BlockState::ACACIA_WOOD) + }); + check(&mut chunk, |c| c.set_biome(1, 2, 3, BiomeId::from_index(4))); + check(&mut chunk, |c| c.fill_biomes(BiomeId::DEFAULT)); + check(&mut chunk, |c| c.fill_block_states(BlockState::WET_SPONGE)); + check(&mut chunk, |c| { + c.set_block_entity(3, 40, 5, Some(compound! {})) + }); + check(&mut chunk, |c| { + c.block_entity_mut(3, 40, 5).unwrap(); + }); + check(&mut chunk, |c| c.set_block_entity(3, 40, 5, None)); + + // Old block state is the same as new block state, so the cache should still be + // intact. + assert_eq!( + chunk.set_block_state(0, 0, 0, BlockState::WET_SPONGE), + BlockState::WET_SPONGE + ); + + assert!(!chunk.cached_init_packets.get_mut().is_empty()); + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/chunk/paletted_container.rs b/vendor/valence/crates/valence_server/src/layer/chunk/paletted_container.rs new file mode 100644 index 00000000..70ccd4bb --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/chunk/paletted_container.rs @@ -0,0 +1,339 @@ +use std::array; +use std::io::Write; + +use arrayvec::ArrayVec; +use valence_protocol::{Encode, VarInt}; + +use super::chunk::bit_width; + +/// `HALF_LEN` must be equal to `ceil(LEN / 2)`. +#[derive(Clone, Debug)] +pub enum PalettedContainer { + Single(T), + Indirect(Box>), + Direct(Box<[T; LEN]>), +} + +#[derive(Clone, Debug)] +pub struct Indirect { + /// Each element is a unique instance of `T`. The length of the palette is + /// always ≥2. + palette: ArrayVec, + /// Each half-byte is an index into `palette`. + indices: [u8; HALF_LEN], +} + +impl + PalettedContainer +{ + pub fn new() -> Self { + assert_eq!(LEN.div_ceil(2), HALF_LEN); + assert_ne!(LEN, 0); + + Self::Single(T::default()) + } + + pub fn fill(&mut self, val: T) { + *self = Self::Single(val) + } + + #[track_caller] + pub fn get(&self, idx: usize) -> T { + debug_assert!(idx < LEN); + + match self { + Self::Single(elem) => *elem, + Self::Indirect(ind) => ind.get(idx), + Self::Direct(elems) => elems[idx], + } + } + + #[track_caller] + pub fn set(&mut self, idx: usize, val: T) -> T { + debug_assert!(idx < LEN); + + match self { + Self::Single(old_val) => { + if *old_val == val { + *old_val + } else { + // Upgrade to indirect. + let old = *old_val; + let mut ind = Box::new(Indirect { + palette: ArrayVec::from_iter([old, val]), + // All indices are initialized to index 0 (the old element). + indices: [0; HALF_LEN], + }); + + ind.indices[idx / 2] = 1 << (idx % 2 * 4); + *self = Self::Indirect(ind); + old + } + } + Self::Indirect(ind) => { + if let Some(old) = ind.set(idx, val) { + old + } else { + // Upgrade to direct. + *self = Self::Direct(Box::new(array::from_fn(|i| ind.get(i)))); + self.set(idx, val) + } + } + Self::Direct(vals) => { + let old = vals[idx]; + vals[idx] = val; + old + } + } + } + + pub fn shrink_to_fit(&mut self) { + match self { + Self::Single(_) => {} + Self::Indirect(ind) => { + let mut new_ind = Indirect { + palette: ArrayVec::new(), + indices: [0; HALF_LEN], + }; + + for i in 0..LEN { + new_ind.set(i, ind.get(i)); + } + + if new_ind.palette.len() == 1 { + *self = Self::Single(new_ind.palette[0]); + } else { + **ind = new_ind; + } + } + Self::Direct(dir) => { + let mut ind = Indirect { + palette: ArrayVec::new(), + indices: [0; HALF_LEN], + }; + + for (i, val) in dir.iter().cloned().enumerate() { + if ind.set(i, val).is_none() { + return; + } + } + + *self = if ind.palette.len() == 1 { + Self::Single(ind.palette[0]) + } else { + Self::Indirect(Box::new(ind)) + }; + } + } + } + + /// Encodes the paletted container in the format that Minecraft expects. + /// + /// - **`writer`**: The [`Write`] instance to write the paletted container + /// to. + /// - **`to_bits`**: A function to convert the element type to bits. The + /// output must be less than two to the power of `direct_bits`. + /// - **`min_indirect_bits`**: The minimum number of bits used to represent + /// the element type in the indirect representation. If the bits per index + /// is lower, it will be rounded up to this. + /// - **`max_indirect_bits`**: The maximum number of bits per element + /// allowed in the indirect representation. Any higher than this will + /// force conversion to the direct representation while encoding. + /// - **`direct_bits`**: The minimum number of bits required to represent + /// all instances of the element type. If `N` is the total number of + /// possible values, then `DIRECT_BITS` is `floor(log2(N - 1)) + 1`. + pub fn encode_mc_format( + &self, + mut writer: W, + mut to_bits: F, + min_indirect_bits: usize, + max_indirect_bits: usize, + direct_bits: usize, + ) -> anyhow::Result<()> + where + W: Write, + F: FnMut(T) -> u64, + { + debug_assert!(min_indirect_bits <= 4); + debug_assert!(min_indirect_bits <= max_indirect_bits); + debug_assert!(max_indirect_bits <= 64); + debug_assert!(direct_bits <= 64); + + match self { + Self::Single(val) => { + // Bits per entry + 0_u8.encode(&mut writer)?; + + // Palette + VarInt(to_bits(*val) as i32).encode(&mut writer)?; + + // Number of longs + VarInt(0).encode(writer)?; + } + Self::Indirect(ind) => { + let bits_per_entry = min_indirect_bits.max(bit_width(ind.palette.len() - 1)); + + // Encode as direct if necessary. + if bits_per_entry > max_indirect_bits { + // Bits per entry + (direct_bits as u8).encode(&mut writer)?; + + // Number of longs in data array. + VarInt(compact_u64s_len(LEN, direct_bits) as _).encode(&mut writer)?; + // Data array + encode_compact_u64s( + writer, + (0..LEN).map(|i| to_bits(ind.get(i))), + direct_bits, + )?; + } else { + // Bits per entry + (bits_per_entry as u8).encode(&mut writer)?; + + // Palette len + VarInt(ind.palette.len() as i32).encode(&mut writer)?; + // Palette + for val in &ind.palette { + VarInt(to_bits(*val) as i32).encode(&mut writer)?; + } + + // Number of longs in data array. + VarInt(compact_u64s_len(LEN, bits_per_entry) as _).encode(&mut writer)?; + // Data array + encode_compact_u64s( + writer, + ind.indices + .iter() + .cloned() + .flat_map(|byte| [byte & 0b1111, byte >> 4]) + .map(u64::from) + .take(LEN), + bits_per_entry, + )?; + } + } + Self::Direct(dir) => { + // Bits per entry + (direct_bits as u8).encode(&mut writer)?; + + // Number of longs in data array. + VarInt(compact_u64s_len(LEN, direct_bits) as _).encode(&mut writer)?; + // Data array + encode_compact_u64s(writer, dir.iter().cloned().map(to_bits), direct_bits)?; + } + } + + Ok(()) + } +} + +impl Default + for PalettedContainer +{ + fn default() -> Self { + Self::new() + } +} + +impl Indirect { + pub fn get(&self, idx: usize) -> T { + let palette_idx = self.indices[idx / 2] >> (idx % 2 * 4) & 0b1111; + self.palette[palette_idx as usize] + } + + pub fn set(&mut self, idx: usize, val: T) -> Option { + let palette_idx = if let Some(i) = self.palette.iter().position(|v| *v == val) { + i + } else { + self.palette.try_push(val).ok()?; + self.palette.len() - 1 + }; + + let old_val = self.get(idx); + let u8 = &mut self.indices[idx / 2]; + let shift = idx % 2 * 4; + *u8 = (*u8 & !(0b1111 << shift)) | ((palette_idx as u8) << shift); + Some(old_val) + } +} + +#[inline] +fn compact_u64s_len(vals_count: usize, bits_per_val: usize) -> usize { + let vals_per_u64 = 64 / bits_per_val; + vals_count.div_ceil(vals_per_u64) +} + +#[inline] +fn encode_compact_u64s( + mut w: impl Write, + mut vals: impl Iterator, + bits_per_val: usize, +) -> anyhow::Result<()> { + debug_assert!(bits_per_val <= 64); + + let vals_per_u64 = 64 / bits_per_val; + + loop { + let mut n = 0; + for i in 0..vals_per_u64 { + match vals.next() { + Some(val) => { + debug_assert!(val < 2_u128.pow(bits_per_val as _) as _); + n |= val << (i * bits_per_val); + } + None if i > 0 => return n.encode(&mut w), + None => return Ok(()), + } + } + n.encode(&mut w)?; + } +} + +#[cfg(test)] +mod tests { + use rand::Rng; + + use super::*; + + fn check( + p: &PalettedContainer, + s: &[T], + ) -> bool { + assert_eq!(s.len(), LEN); + (0..LEN).all(|i| p.get(i) == s[i]) + } + + #[test] + fn random_assignments() { + const LEN: usize = 100; + let range = 0..64; + + let mut rng = rand::thread_rng(); + + for _ in 0..20 { + let mut p = PalettedContainer::::new(); + + let init = rng.gen_range(range.clone()); + + p.fill(init); + let mut a = [init; LEN]; + + assert!(check(&p, &a)); + + let mut rng = rand::thread_rng(); + + for _ in 0..LEN * 10 { + let idx = rng.gen_range(0..LEN); + let val = rng.gen_range(range.clone()); + + assert_eq!(p.get(idx), p.set(idx, val)); + assert_eq!(val, p.get(idx)); + a[idx] = val; + + p.shrink_to_fit(); + + assert!(check(&p, &a)); + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/chunk/unloaded.rs b/vendor/valence/crates/valence_server/src/layer/chunk/unloaded.rs new file mode 100644 index 00000000..1f1eb301 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/chunk/unloaded.rs @@ -0,0 +1,184 @@ +use std::cmp::Ordering; +use std::collections::BTreeMap; + +use valence_nbt::Compound; +use valence_protocol::BlockState; +use valence_registry::biome::BiomeId; + +use super::chunk::{ + BiomeContainer, BlockStateContainer, Chunk, MAX_HEIGHT, SECTION_BLOCK_COUNT, check_biome_oob, + check_block_oob, check_section_oob, +}; + +#[derive(Clone, Default, Debug)] +pub struct UnloadedChunk { + pub sections: Vec

, + pub block_entities: BTreeMap, +} + +#[derive(Clone, Default, Debug)] +pub struct Section { + pub block_states: BlockStateContainer, + pub biomes: BiomeContainer, +} + +impl UnloadedChunk { + pub fn new() -> Self { + Self::default() + } + + pub fn with_height(height: u32) -> Self { + Self { + sections: vec![Section::default(); height as usize / 16], + block_entities: BTreeMap::new(), + } + } + + /// Sets the height of this chunk in meters. The chunk is truncated or + /// extended with [`BlockState::AIR`] and [`BiomeId::default()`] from the + /// top. + /// + /// The new height should be a multiple of 16 and no more than + /// [`MAX_HEIGHT`]. Otherwise, the height is rounded down to the nearest + /// valid height. + pub fn set_height(&mut self, height: u32) { + let new_count = height.min(MAX_HEIGHT) as usize / 16; + let old_count = self.sections.len(); + + match new_count.cmp(&old_count) { + Ordering::Less => { + self.sections.truncate(new_count); + self.sections.shrink_to_fit(); + + let cutoff = SECTION_BLOCK_COUNT as u32 * new_count as u32; + self.block_entities.retain(|idx, _| *idx < cutoff); + } + Ordering::Equal => {} + Ordering::Greater => { + let diff = new_count - old_count; + self.sections.reserve_exact(diff); + self.sections.extend((0..diff).map(|_| Section::default())); + } + } + } +} + +impl Chunk for UnloadedChunk { + fn height(&self) -> u32 { + self.sections.len() as u32 * 16 + } + + fn block_state(&self, x: u32, y: u32, z: u32) -> BlockState { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y % 16 * 16 * 16; + self.sections[y as usize / 16] + .block_states + .get(idx as usize) + } + + fn set_block_state(&mut self, x: u32, y: u32, z: u32, block: BlockState) -> BlockState { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y % 16 * 16 * 16; + self.sections[y as usize / 16] + .block_states + .set(idx as usize, block) + } + + fn fill_block_state_section(&mut self, sect_y: u32, block: BlockState) { + check_section_oob(self, sect_y); + + self.sections[sect_y as usize].block_states.fill(block); + } + + fn block_entity(&self, x: u32, y: u32, z: u32) -> Option<&Compound> { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + self.block_entities.get(&idx) + } + + fn block_entity_mut(&mut self, x: u32, y: u32, z: u32) -> Option<&mut Compound> { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + self.block_entities.get_mut(&idx) + } + + fn set_block_entity( + &mut self, + x: u32, + y: u32, + z: u32, + block_entity: Option, + ) -> Option { + check_block_oob(self, x, y, z); + + let idx = x + z * 16 + y * 16 * 16; + + match block_entity { + Some(be) => self.block_entities.insert(idx, be), + None => self.block_entities.remove(&idx), + } + } + + fn clear_block_entities(&mut self) { + self.block_entities.clear(); + } + + fn biome(&self, x: u32, y: u32, z: u32) -> BiomeId { + check_biome_oob(self, x, y, z); + + let idx = x + z * 4 + y % 4 * 4 * 4; + self.sections[y as usize / 4].biomes.get(idx as usize) + } + + fn set_biome(&mut self, x: u32, y: u32, z: u32, biome: BiomeId) -> BiomeId { + check_biome_oob(self, x, y, z); + + let idx = x + z * 4 + y % 4 * 4 * 4; + self.sections[y as usize / 4] + .biomes + .set(idx as usize, biome) + } + + fn fill_biome_section(&mut self, sect_y: u32, biome: BiomeId) { + check_section_oob(self, sect_y); + + self.sections[sect_y as usize].biomes.fill(biome); + } + + fn shrink_to_fit(&mut self) { + for sect in &mut self.sections { + sect.block_states.shrink_to_fit(); + sect.biomes.shrink_to_fit(); + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn unloaded_chunk_resize_removes_block_entities() { + let mut chunk = UnloadedChunk::with_height(32); + + assert_eq!(chunk.height(), 32); + + // First block entity is in section 0. + chunk.set_block_entity(0, 5, 0, Some(Compound::new())); + + // Second block entity is in section 1. + chunk.set_block_entity(0, 16, 0, Some(Compound::new())); + + // Remove section 0. + chunk.set_height(16); + assert_eq!(chunk.height(), 16); + + assert_eq!(chunk.block_entity(0, 5, 0), Some(&Compound::new())); + assert_eq!(chunk.set_block_entity(0, 5, 0, None), Some(Compound::new())); + assert!(chunk.block_entities.is_empty()); + } +} diff --git a/vendor/valence/crates/valence_server/src/layer/entity.rs b/vendor/valence/crates/valence_server/src/layer/entity.rs new file mode 100644 index 00000000..1f4fb75e --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/entity.rs @@ -0,0 +1,524 @@ +use std::collections::BTreeSet; + +use bevy_ecs::prelude::*; +use rustc_hash::FxHashMap; +use valence_protocol::encode::{PacketWriter, WritePacket}; +use valence_protocol::{BlockPos, ChunkPos, CompressionThreshold, Encode, Packet}; +use valence_server_common::Server; + +use super::Layer; +use super::bvh::GetChunkPos; +use super::message::Messages; +// use crate::client::Client; + +/// A [`Component`] containing Minecraft entities. +#[derive(Component, Debug)] +pub struct EntityLayer { + messages: EntityLayerMessages, + entities: FxHashMap>, + threshold: CompressionThreshold, +} + +type EntityLayerMessages = Messages; + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +pub(crate) enum GlobalMsg { + /// Send packet data to all clients viewing the layer. Message data is + /// serialized packet data. + Packet, + /// Send packet data to all clients viewing layer, except the client + /// identified by `except`. + PacketExcept { except: Entity }, + /// This layer was despawned and should be removed from the set of visible + /// entity layers. Message data is empty. + DespawnLayer, +} + +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] +// NOTE: Variant order is significant. Despawns should be ordered before spawns. +pub(crate) enum LocalMsg { + /// Despawn entities if the client is not already viewing `dest_layer`. + /// Message data is the serialized form of `EntityId`. + DespawnEntity { pos: ChunkPos, dest_layer: Entity }, + /// Despawn entities if the client is not in view of `dest_pos`. Message + /// data is the serialized form of `EntityId`. + DespawnEntityTransition { pos: ChunkPos, dest_pos: ChunkPos }, + /// Spawn entities if the client is not already viewing `src_layer`. Message + /// data is the serialized form of [`Entity`]. + SpawnEntity { pos: ChunkPos, src_layer: Entity }, + /// Spawn entities if the client is not in view of `src_pos`. Message data + /// is the serialized form of [`Entity`]. + SpawnEntityTransition { pos: ChunkPos, src_pos: ChunkPos }, + /// Send packet data to all clients viewing the layer in view of `pos`. + /// Message data is serialized packet data. + PacketAt { pos: ChunkPos }, + /// Send packet data to all clients viewing the layer in view of `pos`, + /// except the client identified by `except`. Message data is serialized + /// packet data. + PacketAtExcept { pos: ChunkPos, except: Entity }, + /// Send packet data to all clients in a sphere. + RadiusAt { + center: BlockPos, + radius_squared: u32, + }, + /// Send packet data to all clients in a sphere, except the client `except`. + RadiusAtExcept { + center: BlockPos, + radius_squared: u32, + except: Entity, + }, +} + +impl GetChunkPos for LocalMsg { + fn chunk_pos(&self) -> ChunkPos { + match *self { + LocalMsg::PacketAt { pos } => pos, + LocalMsg::PacketAtExcept { pos, .. } => pos, + LocalMsg::RadiusAt { center, .. } => center.into(), + LocalMsg::RadiusAtExcept { center, .. } => center.into(), + LocalMsg::SpawnEntity { pos, .. } => pos, + LocalMsg::SpawnEntityTransition { pos, .. } => pos, + LocalMsg::DespawnEntity { pos, .. } => pos, + LocalMsg::DespawnEntityTransition { pos, .. } => pos, + } + } +} + +impl EntityLayer { + /// Creates a new entity layer. + pub fn new(server: &Server) -> Self { + Self { + messages: Messages::new(), + entities: Default::default(), + threshold: server.compression_threshold(), + } + } + + /// Returns an iterator over all entities contained within the given chunk + /// position in this layer. + pub fn entities_at( + &self, + pos: impl Into, + ) -> impl Iterator + Clone + '_ { + self.entities + .get(&pos.into()) + .into_iter() + .flat_map(|entities| entities.iter().copied()) + } + + pub(crate) fn messages(&self) -> &EntityLayerMessages { + &self.messages + } +} + +impl Layer for EntityLayer { + type ExceptWriter<'a> = ExceptWriter<'a>; + + type ViewWriter<'a> = ViewWriter<'a>; + + type ViewExceptWriter<'a> = ViewExceptWriter<'a>; + + type RadiusWriter<'a> = RadiusWriter<'a>; + + type RadiusExceptWriter<'a> = RadiusExceptWriter<'a>; + + fn except_writer(&mut self, except: Entity) -> Self::ExceptWriter<'_> { + ExceptWriter { + layer: self, + except, + } + } + + fn view_writer(&mut self, pos: impl Into) -> Self::ViewWriter<'_> { + ViewWriter { + layer: self, + pos: pos.into(), + } + } + + fn view_except_writer( + &mut self, + pos: impl Into, + except: Entity, + ) -> Self::ViewExceptWriter<'_> { + ViewExceptWriter { + layer: self, + pos: pos.into(), + except, + } + } + + fn radius_writer( + &mut self, + center: impl Into, + radius: u32, + ) -> Self::RadiusWriter<'_> { + RadiusWriter { + layer: self, + center: center.into(), + radius_squared: radius.saturating_mul(radius), + } + } + + fn radius_except_writer( + &mut self, + center: impl Into, + radius: u32, + except: Entity, + ) -> Self::RadiusExceptWriter<'_> { + RadiusExceptWriter { + layer: self, + center: center.into(), + radius_squared: radius.saturating_mul(radius), + except, + } + } +} + +impl WritePacket for EntityLayer { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.messages.send_global(GlobalMsg::Packet, |b| { + PacketWriter::new(b, self.threshold).write_packet_fallible(packet) + }) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.messages + .send_global_infallible(GlobalMsg::Packet, |b| b.extend_from_slice(bytes)); + } +} + +pub struct ExceptWriter<'a> { + layer: &'a mut EntityLayer, + except: Entity, +} + +impl WritePacket for ExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_global( + GlobalMsg::PacketExcept { + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_global_infallible( + GlobalMsg::PacketExcept { + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ) + } +} + +pub struct ViewWriter<'a> { + layer: &'a mut EntityLayer, + pos: ChunkPos, +} + +impl<'a> WritePacket for ViewWriter<'a> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer + .messages + .send_local(LocalMsg::PacketAt { pos: self.pos }, |b| { + PacketWriter::new(b, self.layer.threshold).write_packet_fallible(packet) + }) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer + .messages + .send_local_infallible(LocalMsg::PacketAt { pos: self.pos }, |b| { + b.extend_from_slice(bytes) + }); + } +} + +pub struct ViewExceptWriter<'a> { + layer: &'a mut EntityLayer, + pos: ChunkPos, + except: Entity, +} + +impl WritePacket for ViewExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::PacketAtExcept { + pos: self.pos, + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::PacketAtExcept { + pos: self.pos, + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +pub struct RadiusWriter<'a> { + layer: &'a mut EntityLayer, + center: BlockPos, + radius_squared: u32, +} + +impl WritePacket for RadiusWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::RadiusAt { + center: self.center, + radius_squared: self.radius_squared, + }, + |b| PacketWriter::new(b, self.layer.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::RadiusAt { + center: self.center, + radius_squared: self.radius_squared, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +pub struct RadiusExceptWriter<'a> { + layer: &'a mut EntityLayer, + center: BlockPos, + radius_squared: u32, + except: Entity, +} + +impl WritePacket for RadiusExceptWriter<'_> { + fn write_packet_fallible

(&mut self, packet: &P) -> anyhow::Result<()> + where + P: Packet + Encode, + { + self.layer.messages.send_local( + LocalMsg::RadiusAtExcept { + center: self.center, + radius_squared: self.radius_squared, + except: self.except, + }, + |b| PacketWriter::new(b, self.layer.threshold).write_packet_fallible(packet), + ) + } + + fn write_packet_bytes(&mut self, bytes: &[u8]) { + self.layer.messages.send_local_infallible( + LocalMsg::RadiusAtExcept { + center: self.center, + radius_squared: self.radius_squared, + except: self.except, + }, + |b| b.extend_from_slice(bytes), + ); + } +} + +// pub(super) fn build(app: &mut App) { +// app.add_systems( +// PostUpdate, +// ( +// ( +// change_entity_positions, +// send_entity_update_messages, +// send_layer_despawn_messages, +// ready_entity_layers, +// ) +// .chain() +// .in_set(UpdateLayersPreClientSet), +// unready_entity_layers.in_set(UpdateLayersPostClientSet), +// ), +// ); +// } +// +// fn change_entity_positions( +// entities: Query< +// ( +// Entity, +// &EntityId, +// &Position, +// &OldPosition, +// &EntityLayerId, +// &OldEntityLayerId, +// Has, +// ), +// Or<(Changed, Changed, With)>, +// >, +// mut layers: Query<&mut EntityLayer>, +// ) { +// for (entity, entity_id, pos, old_pos, layer_id, old_layer_id, despawned) +// in &entities { let chunk_pos = ChunkPos::from(pos.0); +// let old_chunk_pos = ChunkPos::from(old_pos.get()); +// +// if despawned { +// // Entity was deleted. Remove it from the layer. +// +// if let Ok(old_layer) = layers.get_mut(layer_id.0) { +// let old_layer = old_layer.into_inner(); +// +// if let Entry::Occupied(mut old_cell) = +// old_layer.entities.entry(old_chunk_pos) { if +// old_cell.get_mut().remove(&entity) { +// old_layer.messages.send_local_infallible( +// LocalMsg::DespawnEntity { pos: old_chunk_pos, +// dest_layer: Entity::PLACEHOLDER, +// }, +// |b| b.extend_from_slice(&entity_id.get().to_ne_bytes()), +// ); +// +// if old_cell.get().is_empty() { +// old_cell.remove(); +// } +// } +// } +// } +// } else if old_layer_id != layer_id { +// // Entity changed their layer. Remove it from old layer and +// insert it in the new // layer. +// +// if let Ok(old_layer) = layers.get_mut(old_layer_id.get()) { +// let old_layer = old_layer.into_inner(); +// +// if let Entry::Occupied(mut old_cell) = +// old_layer.entities.entry(old_chunk_pos) { if +// old_cell.get_mut().remove(&entity) { +// old_layer.messages.send_local_infallible( +// LocalMsg::DespawnEntity { pos: old_chunk_pos, +// dest_layer: layer_id.0, +// }, +// |b| b.extend_from_slice(&entity_id.get().to_ne_bytes()), +// ); +// +// if old_cell.get().is_empty() { +// old_cell.remove(); +// } +// } +// } +// } +// +// if let Ok(mut layer) = layers.get_mut(layer_id.0) { +// if +// layer.entities.entry(chunk_pos).or_default().insert(entity) { +// layer.messages.send_local_infallible( +// LocalMsg::SpawnEntity { pos: chunk_pos, +// src_layer: old_layer_id.get(), +// }, +// |b| b.extend_from_slice(&entity.to_bits().to_ne_bytes()), +// ); +// } +// } +// } else if chunk_pos != old_chunk_pos { +// // Entity changed their chunk position without changing layers. +// Remove it from // old cell and insert it in the new cell. +// +// if let Ok(mut layer) = layers.get_mut(layer_id.0) { +// if let Entry::Occupied(mut old_cell) = +// layer.entities.entry(old_chunk_pos) { if +// old_cell.get_mut().remove(&entity) { +// layer.messages.send_local_infallible( +// LocalMsg::DespawnEntityTransition { pos: +// old_chunk_pos, dest_pos: chunk_pos, +// }, +// |b| b.extend_from_slice(&entity_id.get().to_ne_bytes()), +// ); +// } +// } +// +// if +// layer.entities.entry(chunk_pos).or_default().insert(entity) { +// layer.messages.send_local_infallible( +// LocalMsg::SpawnEntityTransition { pos: chunk_pos, +// src_pos: old_chunk_pos, +// }, +// |b| b.extend_from_slice(&entity.to_bits().to_ne_bytes()), +// ); +// } +// } +// } +// } +// } +// +// fn send_entity_update_messages( +// entities: Query<(Entity, UpdateEntityQuery, Has), +// Without>, mut layers: Query<&mut EntityLayer>, +// ) { +// for layer in layers.iter_mut() { +// let layer = layer.into_inner(); +// +// for cell in layer.entities.values_mut() { +// for &entity in cell.iter() { +// if let Ok((entity, update, is_client)) = entities.get(entity) +// { let chunk_pos = ChunkPos::from(update.pos.0); +// +// // Send the update packets to all viewers. If the entity +// being updated is a // client, then we need to be careful +// to exclude the client itself from // receiving the update +// packets. let msg = if is_client { +// LocalMsg::PacketAtExcept { +// pos: chunk_pos, +// except: entity, +// } +// } else { +// LocalMsg::PacketAt { pos: chunk_pos } +// }; +// +// layer.messages.send_local_infallible(msg, |b| { +// update.write_update_packets(PacketWriter::new(b, +// layer.threshold)) }); +// } else { +// panic!( +// "Entity {entity:?} was not properly removed from +// entity layer. Did you \ forget to use the +// `Despawned` component?" ); +// } +// } +// } +// } +// } +// +// fn send_layer_despawn_messages(mut layers: Query<&mut EntityLayer, +// With>) { for mut layer in &mut layers { +// layer +// .messages +// .send_global_infallible(GlobalMsg::DespawnLayer, |_| {}); +// } +// } +// +// fn ready_entity_layers(mut layers: Query<&mut EntityLayer>) { +// for mut layer in &mut layers { +// layer.messages.ready(); +// } +// } +// +// fn unready_entity_layers(mut layers: Query<&mut EntityLayer>) { +// for mut layer in &mut layers { +// layer.messages.unready(); +// } +// } diff --git a/vendor/valence/crates/valence_server/src/layer/message.rs b/vendor/valence/crates/valence_server/src/layer/message.rs new file mode 100644 index 00000000..0ff5218d --- /dev/null +++ b/vendor/valence/crates/valence_server/src/layer/message.rs @@ -0,0 +1,311 @@ +use core::fmt; +use std::convert::Infallible; +use std::ops::Range; + +use valence_protocol::ChunkPos; + +use crate::ChunkView; +use crate::layer::bvh::{ChunkBvh, GetChunkPos}; + +/// A message buffer of global messages (`G`) and local messages (`L`) meant for +/// consumption by clients. Local messages are those that have some spatial +/// component to them and implement the [`GetChunkPos`] trait. Local messages +/// are placed in a bounding volume hierarchy for fast queries via +/// [`Self::query_local`]. Global messages do not necessarily have a spatial +/// component and all globals will be visited when using [`Self::iter_global`]. +/// +/// Every message is associated with an arbitrary span of bytes. The meaning of +/// the bytes is whatever the message needs it to be. +/// +/// At the end of the tick and before clients have access to the buffer, all +/// messages are sorted and then deduplicated by concatenating byte spans +/// together. This is done for a couple of reasons: +/// - Messages may rely on sorted message order for correctness, like in the +/// case of entity spawn & despawn messages. Sorting also makes deduplication +/// easy. +/// - Deduplication reduces the total number of messages that all clients must +/// examine. Consider the case of a message such as "send all clients in view +/// of this chunk position these packet bytes". If two of these messages have +/// the same chunk position, then they can just be combined together. +pub struct Messages { + global: Vec<(G, Range)>, + local: Vec<(L, Range)>, + bvh: ChunkBvh>, + staging: Vec, + ready: Vec, + is_ready: bool, +} + +impl Messages +where + G: Clone + Ord, + L: Clone + Ord + GetChunkPos, +{ + pub(crate) fn new() -> Self { + Self::default() + } + + /// Adds a global message to this message buffer. + pub(crate) fn send_global( + &mut self, + msg: G, + f: impl FnOnce(&mut Vec) -> Result<(), E>, + ) -> Result<(), E> { + debug_assert!(!self.is_ready); + + let start = self.staging.len(); + f(&mut self.staging)?; + let end = self.staging.len(); + + if let Some((m, range)) = self.global.last_mut() + && msg == *m + { + // Extend the existing message. + range.end = end as u32; + return Ok(()); + } + + self.global.push((msg, start as u32..end as u32)); + + Ok(()) + } + + /// Adds a local message to this message buffer. + pub(crate) fn send_local( + &mut self, + msg: L, + f: impl FnOnce(&mut Vec) -> Result<(), E>, + ) -> Result<(), E> { + debug_assert!(!self.is_ready); + + let start = self.staging.len(); + f(&mut self.staging)?; + let end = self.staging.len(); + + if let Some((m, range)) = self.local.last_mut() + && msg == *m + { + // Extend the existing message. + range.end = end as u32; + return Ok(()); + } + + self.local.push((msg, start as u32..end as u32)); + + Ok(()) + } + + /// Like [`Self::send_global`] but writing bytes cannot fail. + pub(crate) fn send_global_infallible(&mut self, msg: G, f: impl FnOnce(&mut Vec)) { + let _ = self.send_global::(msg, |b| { + f(b); + Ok(()) + }); + } + + /// Like [`Self::send_local`] but writing bytes cannot fail. + pub(crate) fn send_local_infallible(&mut self, msg: L, f: impl FnOnce(&mut Vec)) { + let _ = self.send_local::(msg, |b| { + f(b); + Ok(()) + }); + } + + /// Readies messages to be read by clients. + pub(crate) fn ready(&mut self) { + debug_assert!(!self.is_ready); + self.is_ready = true; + + debug_assert!(self.ready.is_empty()); + + self.ready.reserve_exact(self.staging.len()); + + fn sort_and_merge( + msgs: &mut Vec<(M, Range)>, + staging: &[u8], + ready: &mut Vec, + ) { + // Sort must be stable. + msgs.sort_by_key(|(msg, _)| msg.clone()); + + // Make sure the first element is already copied to "ready". + if let Some((_, range)) = msgs.first_mut() { + let start = ready.len(); + ready.extend_from_slice(&staging[range.start as usize..range.end as usize]); + let end = ready.len(); + + *range = start as u32..end as u32; + } + + msgs.dedup_by(|(right_msg, right_range), (left_msg, left_range)| { + if *left_msg == *right_msg { + // Extend the left element with the right element. Then delete the right + // element. + + let right_bytes = + &staging[right_range.start as usize..right_range.end as usize]; + + ready.extend_from_slice(right_bytes); + + left_range.end += right_bytes.len() as u32; + + true + } else { + // Copy right element to "ready". + + let right_bytes = + &staging[right_range.start as usize..right_range.end as usize]; + + let start = ready.len(); + ready.extend_from_slice(right_bytes); + let end = ready.len(); + + *right_range = start as u32..end as u32; + + false + } + }); + } + + sort_and_merge(&mut self.global, &self.staging, &mut self.ready); + sort_and_merge(&mut self.local, &self.staging, &mut self.ready); + + self.bvh.build( + self.local + .iter() + .cloned() + .map(|(msg, range)| MessagePair { msg, range }), + ); + } + + pub(crate) fn unready(&mut self) { + assert!(self.is_ready); + self.is_ready = false; + + self.local.clear(); + self.global.clear(); + self.staging.clear(); + self.ready.clear(); + } + + pub(crate) fn shrink_to_fit(&mut self) { + self.global.shrink_to_fit(); + self.local.shrink_to_fit(); + self.bvh.shrink_to_fit(); + self.staging.shrink_to_fit(); + self.ready.shrink_to_fit(); + } + + /// All message bytes. Use this in conjunction with [`Self::iter_global`] + /// and [`Self::query_local`]. + pub fn bytes(&self) -> &[u8] { + debug_assert!(self.is_ready); + + &self.ready + } + + /// Returns an iterator over all global messages and their span of bytes in + /// [`Self::bytes`]. + pub fn iter_global(&self) -> impl Iterator)> + '_ { + debug_assert!(self.is_ready); + + self.global + .iter() + .map(|(m, r)| (m.clone(), r.start as usize..r.end as usize)) + } + + /// Takes a visitor function `f` and visits all local messages contained + /// within the chunk view `view`. `f` is called with the local + /// message and its span of bytes in [`Self::bytes`]. + pub fn query_local(&self, view: ChunkView, mut f: impl FnMut(L, Range)) { + debug_assert!(self.is_ready); + + self.bvh.query(view, |pair| { + f( + pair.msg.clone(), + pair.range.start as usize..pair.range.end as usize, + ) + }); + } +} + +impl Default for Messages { + fn default() -> Self { + Self { + global: Default::default(), + local: Default::default(), + bvh: Default::default(), + staging: Default::default(), + ready: Default::default(), + is_ready: Default::default(), + } + } +} + +impl fmt::Debug for Messages +where + G: fmt::Debug, + L: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("Messages") + .field("global", &self.global) + .field("local", &self.local) + .field("is_ready", &self.is_ready) + .finish() + } +} + +#[derive(Debug)] +struct MessagePair { + msg: M, + range: Range, +} + +impl GetChunkPos for MessagePair { + fn chunk_pos(&self) -> ChunkPos { + self.msg.chunk_pos() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] + struct DummyLocal; + + impl GetChunkPos for DummyLocal { + fn chunk_pos(&self) -> ChunkPos { + unimplemented!() + } + } + + #[test] + fn send_global_message() { + #[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] + enum TestMsg { + Foo, + Bar, + } + + let mut messages = Messages::::new(); + + messages.send_global_infallible(TestMsg::Foo, |b| b.extend_from_slice(&[1, 2, 3])); + messages.send_global_infallible(TestMsg::Bar, |b| b.extend_from_slice(&[4, 5, 6])); + messages.send_global_infallible(TestMsg::Foo, |b| b.extend_from_slice(&[7, 8, 9])); + + messages.ready(); + + let bytes = messages.bytes(); + + for (msg, range) in messages.iter_global() { + match msg { + TestMsg::Foo => assert_eq!(&bytes[range.clone()], &[1, 2, 3, 7, 8, 9]), + TestMsg::Bar => assert_eq!(&bytes[range.clone()], &[4, 5, 6]), + } + } + + messages.unready(); + } +} diff --git a/vendor/valence/crates/valence_server/src/lib.rs b/vendor/valence/crates/valence_server/src/lib.rs new file mode 100644 index 00000000..5dd50850 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/lib.rs @@ -0,0 +1,58 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::type_complexity)] + +pub mod abilities; +pub mod action; +pub mod brand; +mod chunk_view; +pub mod client; +pub mod client_command; +pub mod client_settings; +pub mod custom_payload; +pub mod event_loop; +pub mod hand_swing; +pub mod interact_block; +pub mod interact_entity; +pub mod interact_item; +pub mod keepalive; +pub mod layer; +pub mod message; +pub mod movement; +pub mod op_level; +pub mod resource_pack; +pub mod spawn; +pub mod status; +pub mod status_effect; +pub mod teleport; +pub mod title; + +pub use chunk_view::ChunkView; +pub use event_loop::{EventLoopPostUpdate, EventLoopPreUpdate, EventLoopUpdate}; +pub use layer::{ChunkLayer, EntityLayer, Layer, LayerBundle}; +pub use valence_protocol::{ + BiomePos, BlockPos, BlockState, ChunkPos, CompressionThreshold, Difficulty, Direction, + GameMode, Hand, Ident, ItemKind, ItemStack, MINECRAFT_VERSION, PROTOCOL_VERSION, Text, block, + ident, item, math, text, uuid, +}; +pub use valence_server_common::*; +pub use { + bevy_app as app, bevy_ecs as ecs, rand, valence_entity as entity, valence_nbt as nbt, + valence_protocol as protocol, valence_registry as registry, +}; diff --git a/vendor/valence/crates/valence_server/src/message.rs b/vendor/valence/crates/valence_server/src/message.rs new file mode 100644 index 00000000..49855c3b --- /dev/null +++ b/vendor/valence/crates/valence_server/src/message.rs @@ -0,0 +1,63 @@ +// TODO: delete this module in favor of valence_chat. + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_protocol::encode::WritePacket; +use valence_protocol::packets::play::{ChatMessageC2s, GameMessageS2c}; +use valence_protocol::text::IntoText; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct MessagePlugin; + +impl Plugin for MessagePlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_chat_message); + } +} + +pub trait SendMessage { + /// Sends a system message visible in the chat. + fn send_chat_message<'a>(&mut self, msg: impl IntoText<'a>); + /// Displays a message in the player's action bar (text above the hotbar). + fn send_action_bar_message<'a>(&mut self, msg: impl IntoText<'a>); +} + +impl SendMessage for T { + fn send_chat_message<'a>(&mut self, msg: impl IntoText<'a>) { + self.write_packet(&GameMessageS2c { + chat: msg.into_cow_text(), + overlay: false, + }); + } + + fn send_action_bar_message<'a>(&mut self, msg: impl IntoText<'a>) { + self.write_packet(&GameMessageS2c { + chat: msg.into_cow_text(), + overlay: true, + }); + } +} + +#[derive(Event, Clone, Debug)] +pub struct ChatMessageEvent { + pub client: Entity, + pub message: Box, + pub timestamp: u64, +} + +pub fn handle_chat_message( + mut packets: EventReader, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + events.send(ChatMessageEvent { + client: packet.client, + message: pkt.message.0.into(), + timestamp: pkt.timestamp, + }); + } + } +} diff --git a/vendor/valence/crates/valence_server/src/movement.rs b/vendor/valence/crates/valence_server/src/movement.rs new file mode 100644 index 00000000..00d5de9e --- /dev/null +++ b/vendor/valence/crates/valence_server/src/movement.rs @@ -0,0 +1,209 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_entity::{HeadYaw, Look, OnGround, Position}; +use valence_math::DVec3; +use valence_protocol::packets::play::{ + FullC2s, LookAndOnGroundC2s, OnGroundOnlyC2s, PositionAndOnGroundC2s, VehicleMoveC2s, +}; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; +use crate::teleport::TeleportState; + +pub struct MovementPlugin; + +impl Plugin for MovementPlugin { + fn build(&self, app: &mut App) { + app.init_resource::() + .add_event::() + .add_systems(EventLoopPreUpdate, handle_client_movement); + } +} + +/// Configuration resource for client movement checks. +#[derive(Resource, Default)] +pub struct MovementSettings { + // TODO +} + +/// Event sent when a client successfully moves. +#[derive(Event, Clone, Debug)] +pub struct MovementEvent { + pub client: Entity, + pub position: DVec3, + pub old_position: DVec3, + pub look: Look, + pub old_look: Look, + pub on_ground: bool, + pub old_on_ground: bool, +} + +fn handle_client_movement( + mut packets: EventReader, + mut clients: Query<( + &mut Position, + &mut Look, + &mut HeadYaw, + &mut OnGround, + &mut TeleportState, + )>, + mut movement_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok((pos, look, head_yaw, on_ground, teleport_state)) = + clients.get_mut(packet.client) + { + let mov = MovementEvent { + client: packet.client, + position: pkt.position, + old_position: pos.0, + look: *look, + old_look: *look, + on_ground: pkt.on_ground, + old_on_ground: on_ground.0, + }; + + handle( + mov, + pos, + look, + head_yaw, + on_ground, + teleport_state, + &mut movement_events, + ); + } + } else if let Some(pkt) = packet.decode::() { + if let Ok((pos, look, head_yaw, on_ground, teleport_state)) = + clients.get_mut(packet.client) + { + let mov = MovementEvent { + client: packet.client, + position: pkt.position, + old_position: pos.0, + look: Look { + yaw: pkt.yaw, + pitch: pkt.pitch, + }, + old_look: *look, + on_ground: pkt.on_ground, + old_on_ground: on_ground.0, + }; + + handle( + mov, + pos, + look, + head_yaw, + on_ground, + teleport_state, + &mut movement_events, + ); + } + } else if let Some(pkt) = packet.decode::() { + if let Ok((pos, look, head_yaw, on_ground, teleport_state)) = + clients.get_mut(packet.client) + { + let mov = MovementEvent { + client: packet.client, + position: pos.0, + old_position: pos.0, + look: Look { + yaw: pkt.yaw, + pitch: pkt.pitch, + }, + old_look: *look, + on_ground: pkt.on_ground, + old_on_ground: on_ground.0, + }; + + handle( + mov, + pos, + look, + head_yaw, + on_ground, + teleport_state, + &mut movement_events, + ); + } + } else if let Some(pkt) = packet.decode::() { + if let Ok((pos, look, head_yaw, on_ground, teleport_state)) = + clients.get_mut(packet.client) + { + let mov = MovementEvent { + client: packet.client, + position: pos.0, + old_position: pos.0, + look: *look, + old_look: *look, + on_ground: pkt.on_ground, + old_on_ground: on_ground.0, + }; + + handle( + mov, + pos, + look, + head_yaw, + on_ground, + teleport_state, + &mut movement_events, + ); + } + } else if let Some(pkt) = packet.decode::() { + if let Ok((pos, look, head_yaw, on_ground, teleport_state)) = + clients.get_mut(packet.client) + { + let mov = MovementEvent { + client: packet.client, + position: pkt.position, + old_position: pos.0, + look: Look { + yaw: pkt.yaw, + pitch: pkt.pitch, + }, + old_look: *look, + on_ground: on_ground.0, + old_on_ground: on_ground.0, + }; + + handle( + mov, + pos, + look, + head_yaw, + on_ground, + teleport_state, + &mut movement_events, + ); + } + } + } +} + +fn handle( + mov: MovementEvent, + mut pos: Mut, + mut look: Mut, + mut head_yaw: Mut, + mut on_ground: Mut, + mut teleport_state: Mut, + movement_events: &mut EventWriter, +) { + if teleport_state.pending_teleports() != 0 { + return; + } + + // TODO: check that the client isn't moving too fast / flying. + // TODO: check that the client isn't clipping through blocks. + + pos.set_if_neq(Position(mov.position)); + teleport_state.synced_pos = mov.position; + look.set_if_neq(mov.look); + teleport_state.synced_look = mov.look; + head_yaw.set_if_neq(HeadYaw(mov.look.yaw)); + on_ground.set_if_neq(OnGround(mov.on_ground)); + + movement_events.send(mov); +} diff --git a/vendor/valence/crates/valence_server/src/op_level.rs b/vendor/valence/crates/valence_server/src/op_level.rs new file mode 100644 index 00000000..13dba308 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/op_level.rs @@ -0,0 +1,38 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::Deref; +use valence_protocol::WritePacket; +use valence_protocol::packets::play::EntityStatusS2c; + +use crate::client::{Client, UpdateClientsSet}; + +pub struct OpLevelPlugin; + +impl Plugin for OpLevelPlugin { + fn build(&self, app: &mut App) { + app.add_systems(PostUpdate, update_op_level.in_set(UpdateClientsSet)); + } +} + +#[derive(Component, Clone, PartialEq, Eq, Default, Debug, Deref)] +pub struct OpLevel(u8); + +impl OpLevel { + pub fn get(&self) -> u8 { + self.0 + } + + /// Sets the op level. Value is clamped to `0..=3`. + pub fn set(&mut self, lvl: u8) { + self.0 = lvl.min(3); + } +} + +fn update_op_level(mut clients: Query<(&mut Client, &OpLevel), Changed>) { + for (mut client, lvl) in &mut clients.iter_mut() { + client.write_packet(&EntityStatusS2c { + entity_id: 0, + entity_status: 24 + lvl.0, + }); + } +} diff --git a/vendor/valence/crates/valence_server/src/resource_pack.rs b/vendor/valence/crates/valence_server/src/resource_pack.rs new file mode 100644 index 00000000..703682b1 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/resource_pack.rs @@ -0,0 +1,64 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_protocol::WritePacket; +use valence_protocol::packets::play::{ResourcePackSendS2c, ResourcePackStatusC2s}; +use valence_protocol::text::Text; + +use crate::client::Client; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct ResourcePackPlugin; + +impl Plugin for ResourcePackPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_systems(EventLoopPreUpdate, handle_resource_pack_status); + } +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct ResourcePackStatusEvent { + pub client: Entity, + pub status: ResourcePackStatusC2s, +} + +impl Client { + /// Requests that the client download and enable a resource pack. + /// + /// # Arguments + /// * `url` - The URL of the resource pack file. + /// * `hash` - The SHA-1 hash of the resource pack file. The value must be a + /// 40-character hexadecimal string. + /// * `forced` - Whether a client should be kicked from the server upon + /// declining the pack (this is enforced client-side) + /// * `prompt_message` - A message to be displayed with the resource pack + /// dialog. + pub fn set_resource_pack( + &mut self, + url: &str, + hash: &str, + forced: bool, + prompt_message: Option, + ) { + self.write_packet(&ResourcePackSendS2c { + url, + hash: hash.into(), + forced, + prompt_message: prompt_message.map(|t| t.into()), + }); + } +} + +fn handle_resource_pack_status( + mut packets: EventReader, + mut events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + events.send(ResourcePackStatusEvent { + client: packet.client, + status: pkt, + }) + } + } +} diff --git a/vendor/valence/crates/valence_server/src/spawn.rs b/vendor/valence/crates/valence_server/src/spawn.rs new file mode 100644 index 00000000..53c9850e --- /dev/null +++ b/vendor/valence/crates/valence_server/src/spawn.rs @@ -0,0 +1,207 @@ +//! Handles spawning and respawning the client. + +use std::borrow::Cow; +use std::collections::BTreeSet; + +use bevy_ecs::prelude::*; +use bevy_ecs::query::WorldQuery; +use derive_more::{Deref, DerefMut}; +use valence_entity::EntityLayerId; +use valence_protocol::packets::play::{GameJoinS2c, PlayerRespawnS2c, PlayerSpawnPositionS2c}; +use valence_protocol::{BlockPos, GameMode, GlobalPos, Ident, VarInt, WritePacket}; +use valence_registry::tags::TagsRegistry; +use valence_registry::{BiomeRegistry, RegistryCodec}; + +use crate::client::{Client, ViewDistance, VisibleChunkLayer}; +use crate::layer::ChunkLayer; + +// Components for the join game and respawn packet. + +#[derive(Component, Clone, PartialEq, Eq, Default, Debug)] +pub struct DeathLocation(pub Option<(Ident, BlockPos)>); + +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct IsHardcore(pub bool); + +/// Hashed world seed used for biome noise. +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct HashedSeed(pub u64); + +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct ReducedDebugInfo(pub bool); + +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, Deref, DerefMut)] +pub struct HasRespawnScreen(pub bool); + +/// If the client is spawning into a debug world. +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct IsDebug(pub bool); + +/// Changes the perceived horizon line (used for superflat worlds). +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct IsFlat(pub bool); + +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct PortalCooldown(pub i32); + +/// The initial previous gamemode. Used for the F3+F4 gamemode switcher. +#[derive(Component, Copy, Clone, PartialEq, Eq, Default, Debug, Deref, DerefMut)] +pub struct PrevGameMode(pub Option); + +impl Default for HasRespawnScreen { + fn default() -> Self { + Self(true) + } +} + +/// The position and angle that clients will respawn with. Also +/// controls the position that compasses point towards. +#[derive(Component, Copy, Clone, PartialEq, Default, Debug)] +pub struct RespawnPosition { + /// The position that clients will respawn at. This can be changed at any + /// time to set the position that compasses point towards. + pub pos: BlockPos, + /// The yaw angle that clients will respawn with (in degrees). + pub yaw: f32, +} + +/// A convenient [`WorldQuery`] for obtaining client spawn components. Also see +/// [`ClientSpawnQueryReadOnly`]. +#[derive(WorldQuery)] +#[world_query(mutable)] +pub struct ClientSpawnQuery { + pub is_hardcore: &'static mut IsHardcore, + pub game_mode: &'static mut GameMode, + pub prev_game_mode: &'static mut PrevGameMode, + pub hashed_seed: &'static mut HashedSeed, + pub view_distance: &'static mut ViewDistance, + pub reduced_debug_info: &'static mut ReducedDebugInfo, + pub has_respawn_screen: &'static mut HasRespawnScreen, + pub is_debug: &'static mut IsDebug, + pub is_flat: &'static mut IsFlat, + pub death_loc: &'static mut DeathLocation, + pub portal_cooldown: &'static mut PortalCooldown, +} + +pub(super) fn initial_join( + codec: Res, + tags: Res, + mut clients: Query<(&mut Client, &VisibleChunkLayer, ClientSpawnQueryReadOnly), Added>, + chunk_layers: Query<&ChunkLayer>, +) { + for (mut client, visible_chunk_layer, spawn) in &mut clients { + let Ok(chunk_layer) = chunk_layers.get(visible_chunk_layer.0) else { + continue; + }; + + let dimension_names: BTreeSet = codec + .registry(BiomeRegistry::KEY) + .iter() + .map(|value| value.name.into()) + .collect(); + + let dimension_name: Ident = chunk_layer.dimension_type_name().into(); + + let last_death_location = spawn.death_loc.0.as_ref().map(|(id, pos)| GlobalPos { + dimension_name: id.clone(), + position: *pos, + }); + + // The login packet is prepended so that it's sent before all the other packets. + // Some packets don't work correctly when sent before the game join packet. + _ = client.enc.prepend_packet(&GameJoinS2c { + entity_id: 0, // We reserve ID 0 for clients. + is_hardcore: spawn.is_hardcore.0, + game_mode: *spawn.game_mode, + previous_game_mode: spawn.prev_game_mode.0.into(), + dimension_names: Cow::Owned(dimension_names), + registry_codec: Cow::Borrowed(codec.cached_codec()), + dimension_type_name: dimension_name.clone(), + dimension_name, + hashed_seed: spawn.hashed_seed.0 as i64, + max_players: VarInt(0), // Ignored by clients. + view_distance: VarInt(spawn.view_distance.get() as i32), + simulation_distance: VarInt(16), // TODO. + reduced_debug_info: spawn.reduced_debug_info.0, + enable_respawn_screen: spawn.has_respawn_screen.0, + is_debug: spawn.is_debug.0, + is_flat: spawn.is_flat.0, + last_death_location, + portal_cooldown: VarInt(spawn.portal_cooldown.0), + }); + + client.write_packet_bytes(tags.sync_tags_packet()); + + /* + // TODO: enable all the features? + q.client.write_packet(&FeatureFlags { + features: vec![Ident::new("vanilla").unwrap()], + })?; + */ + } +} + +pub(super) fn respawn( + mut clients: Query< + ( + &mut Client, + &EntityLayerId, + &DeathLocation, + &HashedSeed, + &GameMode, + &PrevGameMode, + &IsDebug, + &IsFlat, + ), + Changed, + >, + chunk_layers: Query<&ChunkLayer>, +) { + for (mut client, loc, death_loc, hashed_seed, game_mode, prev_game_mode, is_debug, is_flat) in + &mut clients + { + if client.is_added() { + // No need to respawn since we are sending the game join packet this tick. + continue; + } + + let Ok(chunk_layer) = chunk_layers.get(loc.0) else { + continue; + }; + + let dimension_name = chunk_layer.dimension_type_name(); + + let last_death_location = death_loc.0.as_ref().map(|(id, pos)| GlobalPos { + dimension_name: id.clone(), + position: *pos, + }); + + client.write_packet(&PlayerRespawnS2c { + dimension_type_name: dimension_name.into(), + dimension_name: dimension_name.into(), + hashed_seed: hashed_seed.0, + game_mode: *game_mode, + previous_game_mode: prev_game_mode.0.into(), + is_debug: is_debug.0, + is_flat: is_flat.0, + copy_metadata: true, + last_death_location, + portal_cooldown: VarInt(0), // TODO + }); + } +} + +/// Sets the client's respawn and compass position. +/// +/// This also closes the "downloading terrain" screen when first joining, so +/// it should happen after the initial chunks are written. +pub(super) fn update_respawn_position( + mut clients: Query<(&mut Client, &RespawnPosition), Changed>, +) { + for (mut client, respawn_pos) in &mut clients { + client.write_packet(&PlayerSpawnPositionS2c { + position: respawn_pos.pos, + angle: respawn_pos.yaw, + }); + } +} diff --git a/vendor/valence/crates/valence_server/src/status.rs b/vendor/valence/crates/valence_server/src/status.rs new file mode 100644 index 00000000..1e0c66bd --- /dev/null +++ b/vendor/valence/crates/valence_server/src/status.rs @@ -0,0 +1,44 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use valence_protocol::packets::play::ClientStatusC2s; + +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; + +pub struct StatusPlugin; + +impl Plugin for StatusPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_event::() + .add_systems(EventLoopPreUpdate, handle_status); + } +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct RequestRespawnEvent { + pub client: Entity, +} + +#[derive(Event, Copy, Clone, PartialEq, Eq, Debug)] +pub struct RequestStatsEvent { + pub client: Entity, +} + +fn handle_status( + mut packets: EventReader, + mut respawn_events: EventWriter, + mut request_stats_events: EventWriter, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + match pkt { + ClientStatusC2s::PerformRespawn => respawn_events.send(RequestRespawnEvent { + client: packet.client, + }), + ClientStatusC2s::RequestStats => request_stats_events.send(RequestStatsEvent { + client: packet.client, + }), + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/status_effect.rs b/vendor/valence/crates/valence_server/src/status_effect.rs new file mode 100644 index 00000000..35b48065 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/status_effect.rs @@ -0,0 +1,194 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use bevy_ecs::query::WorldQuery; +use bevy_ecs::system::SystemState; +use valence_entity::active_status_effects::{ActiveStatusEffect, ActiveStatusEffects}; +use valence_entity::entity::Flags; +use valence_entity::living::{PotionSwirlsAmbient, PotionSwirlsColor}; +use valence_protocol::packets::play::{ + EntityStatusEffectS2c, RemoveEntityStatusEffectS2c, entity_status_effect_s2c, +}; +use valence_protocol::status_effects::StatusEffect; +use valence_protocol::{VarInt, WritePacket}; + +use crate::EventLoopPostUpdate; +use crate::client::Client; + +/// Event for when a status effect is added to an entity or the amplifier or +/// duration of an existing status effect is changed. +#[derive(Event, Clone, PartialEq, Eq, Debug)] +pub struct StatusEffectAdded { + pub entity: Entity, + pub status_effect: StatusEffect, +} + +/// Event for when a status effect is removed from an entity. +#[derive(Event, Clone, PartialEq, Eq, Debug)] +pub struct StatusEffectRemoved { + pub entity: Entity, + pub status_effect: ActiveStatusEffect, +} + +pub struct StatusEffectPlugin; + +impl Plugin for StatusEffectPlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .add_event::() + .add_systems( + EventLoopPostUpdate, + ( + add_status_effects, + update_active_status_effects, + add_status_effects, + ), + ); + } +} + +fn update_active_status_effects( + world: &mut World, + state: &mut SystemState>, +) { + let mut query = state.get_mut(world); + for mut active_status_effects in query.iter_mut() { + active_status_effects.increment_active_ticks(); + } +} + +fn create_packet(effect: &ActiveStatusEffect) -> EntityStatusEffectS2c { + EntityStatusEffectS2c { + entity_id: VarInt(0), // We reserve ID 0 for clients. + effect_id: VarInt(effect.status_effect().to_raw() as i32), + amplifier: effect.amplifier(), + duration: VarInt(effect.remaining_duration().unwrap_or(-1)), + flags: entity_status_effect_s2c::Flags::new() + .with_is_ambient(effect.ambient()) + .with_show_particles(effect.show_particles()) + .with_show_icon(effect.show_icon()), + factor_codec: None, + } +} + +#[derive(WorldQuery)] +#[world_query(mutable)] +struct StatusEffectQuery { + entity: Entity, + active_effects: &'static mut ActiveStatusEffects, + client: Option<&'static mut Client>, + entity_flags: Option<&'static mut Flags>, + swirl_color: Option<&'static mut PotionSwirlsColor>, + swirl_ambient: Option<&'static mut PotionSwirlsAmbient>, +} + +fn add_status_effects( + mut query: Query, + mut add_events: EventWriter, + mut remove_events: EventWriter, +) { + for mut query in query.iter_mut() { + let updated = query.active_effects.apply_changes(); + + if updated.is_empty() { + continue; + } + + set_swirl( + &query.active_effects, + &mut query.swirl_color, + &mut query.swirl_ambient, + ); + + for (status_effect, prev) in updated { + if query.active_effects.has_effect(status_effect) { + add_events.send(StatusEffectAdded { + entity: query.entity, + status_effect, + }); + } else if let Some(prev) = prev { + remove_events.send(StatusEffectRemoved { + entity: query.entity, + status_effect: prev, + }); + } else { + // this should never happen + panic!("status effect was removed but was never added"); + } + + update_status_effect(&mut query, status_effect); + } + } +} + +fn update_status_effect(query: &mut StatusEffectQueryItem, status_effect: StatusEffect) { + let current_effect = query.active_effects.get_current_effect(status_effect); + + if let Some(ref mut client) = query.client { + if let Some(updated_effect) = current_effect { + client.write_packet(&create_packet(updated_effect)); + } else { + client.write_packet(&RemoveEntityStatusEffectS2c { + entity_id: VarInt(0), + effect_id: VarInt(status_effect.to_raw() as i32), + }); + } + } +} + +fn set_swirl( + active_status_effects: &ActiveStatusEffects, + swirl_color: &mut Option>, + swirl_ambient: &mut Option>, +) { + if let Some(ref mut swirl_ambient) = swirl_ambient { + swirl_ambient.0 = active_status_effects + .get_current_effects() + .iter() + .any(|effect| effect.ambient()); + } + + if let Some(swirl_color) = swirl_color { + swirl_color.0 = get_color(active_status_effects); + } +} + +/// Used to set the color of the swirls in the potion effect. +/// +/// Equivalent to net.minecraft.potion.PotionUtil#getColor +fn get_color(effects: &ActiveStatusEffects) -> i32 { + if effects.no_effects() { + // vanilla mc seems to return 0x385dc6 if there are no effects + // dunno why + // imma just say to return 0 to remove the swirls + return 0; + } + + let effects = effects.get_current_effects(); + let mut f = 0.0; + let mut g = 0.0; + let mut h = 0.0; + let mut j = 0.0; + + for status_effect_instance in effects { + if !status_effect_instance.show_particles() { + continue; + } + + let k = status_effect_instance.status_effect().color(); + let l = (status_effect_instance.amplifier() + 1) as f32; + f += (l * ((k >> 16) & 0xff) as f32) / 255.0; + g += (l * ((k >> 8) & 0xff) as f32) / 255.0; + h += (l * ((k) & 0xff) as f32) / 255.0; + j += l; + } + + if j == 0.0 { + return 0; + } + + f = f / j * 255.0; + g = g / j * 255.0; + h = h / j * 255.0; + + ((f as i32) << 16) | ((g as i32) << 8) | (h as i32) +} diff --git a/vendor/valence/crates/valence_server/src/teleport.rs b/vendor/valence/crates/valence_server/src/teleport.rs new file mode 100644 index 00000000..07a9539e --- /dev/null +++ b/vendor/valence/crates/valence_server/src/teleport.rs @@ -0,0 +1,139 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use tracing::warn; +use valence_entity::{Look, Position}; +use valence_math::DVec3; +use valence_protocol::WritePacket; +use valence_protocol::packets::play::player_position_look_s2c::PlayerPositionLookFlags; +use valence_protocol::packets::play::{PlayerPositionLookS2c, TeleportConfirmC2s}; + +use crate::client::{Client, UpdateClientsSet, update_view_and_layers}; +use crate::event_loop::{EventLoopPreUpdate, PacketEvent}; +use crate::spawn::update_respawn_position; + +pub struct TeleportPlugin; + +impl Plugin for TeleportPlugin { + fn build(&self, app: &mut App) { + app.add_systems( + PostUpdate, + teleport + .after(update_view_and_layers) + .before(update_respawn_position) + .in_set(UpdateClientsSet), + ) + .add_systems(EventLoopPreUpdate, handle_teleport_confirmations); + } +} + +#[derive(Component, Debug)] +pub struct TeleportState { + /// Counts up as teleports are made. + teleport_id_counter: u32, + /// The number of pending client teleports that have yet to receive a + /// confirmation. Inbound client position packets should be ignored while + /// this is nonzero. + pending_teleports: u32, + pub(super) synced_pos: DVec3, + pub(super) synced_look: Look, +} + +impl TeleportState { + pub(super) fn new() -> Self { + Self { + teleport_id_counter: 0, + pending_teleports: 0, + // Set initial synced pos and look to NaN so a teleport always happens when first + // joining. + synced_pos: DVec3::NAN, + synced_look: Look { + yaw: f32::NAN, + pitch: f32::NAN, + }, + } + } + + pub fn teleport_id_counter(&self) -> u32 { + self.teleport_id_counter + } + + pub fn pending_teleports(&self) -> u32 { + self.pending_teleports + } +} + +/// Syncs the client's position and look with the server. +/// +/// This should happen after chunks are loaded so the client doesn't fall though +/// the floor. +#[allow(clippy::type_complexity)] +fn teleport( + mut clients: Query< + (&mut Client, &mut TeleportState, &Position, &Look), + Or<(Changed, Changed)>, + >, +) { + for (mut client, mut state, pos, look) in &mut clients { + let changed_pos = pos.0 != state.synced_pos; + let changed_yaw = look.yaw != state.synced_look.yaw; + let changed_pitch = look.pitch != state.synced_look.pitch; + + if changed_pos || changed_yaw || changed_pitch { + state.synced_pos = pos.0; + state.synced_look = *look; + + let flags = PlayerPositionLookFlags::new() + .with_x(!changed_pos) + .with_y(!changed_pos) + .with_z(!changed_pos) + .with_y_rot(!changed_yaw) + .with_x_rot(!changed_pitch); + + client.write_packet(&PlayerPositionLookS2c { + position: if changed_pos { pos.0 } else { DVec3::ZERO }, + yaw: if changed_yaw { look.yaw } else { 0.0 }, + pitch: if changed_pitch { look.pitch } else { 0.0 }, + flags, + teleport_id: (state.teleport_id_counter as i32).into(), + }); + + state.pending_teleports = state.pending_teleports.wrapping_add(1); + state.teleport_id_counter = state.teleport_id_counter.wrapping_add(1); + } + } +} + +fn handle_teleport_confirmations( + mut packets: EventReader, + mut clients: Query<&mut TeleportState>, + mut commands: Commands, +) { + for packet in packets.read() { + if let Some(pkt) = packet.decode::() { + if let Ok(mut state) = clients.get_mut(packet.client) { + if state.pending_teleports == 0 { + warn!( + "unexpected teleport confirmation from client {:?}", + packet.client + ); + commands.entity(packet.client).remove::(); + } + + let got = pkt.teleport_id.0 as u32; + let expected = state + .teleport_id_counter + .wrapping_sub(state.pending_teleports); + + if got == expected { + state.pending_teleports -= 1; + } else { + warn!( + "unexpected teleport ID for client {:?} (expected {expected}, got {got}", + packet.client + ); + commands.entity(packet.client).remove::(); + } + } + } + } +} diff --git a/vendor/valence/crates/valence_server/src/title.rs b/vendor/valence/crates/valence_server/src/title.rs new file mode 100644 index 00000000..6f0613f9 --- /dev/null +++ b/vendor/valence/crates/valence_server/src/title.rs @@ -0,0 +1,64 @@ +use valence_protocol::encode::WritePacket; +use valence_protocol::packets::play::{ + ClearTitleS2c, OverlayMessageS2c, SubtitleS2c, TitleFadeS2c, TitleS2c, +}; +use valence_protocol::text::IntoText; + +pub trait SetTitle { + /// Displays a title to a client. + /// + /// A title is a large piece of text displayed in the center of the screen + /// which may also include a subtitle underneath it. The title can be + /// configured to fade in and out using + /// [`set_title_times`](Self::set_title_times). + fn set_title<'a>(&mut self, text: impl IntoText<'a>); + + fn set_subtitle<'a>(&mut self, text: impl IntoText<'a>); + + fn set_action_bar<'a>(&mut self, text: impl IntoText<'a>); + + /// - `fade_in`: Ticks to spend fading in. + /// - `stay`: Ticks to keep the title displayed. + /// - `fade_out`: Ticks to spend fading out. + fn set_title_times(&mut self, fade_in: i32, stay: i32, fade_out: i32); + + fn clear_title(&mut self); + + fn reset_title(&mut self); +} + +impl SetTitle for T { + fn set_title<'a>(&mut self, text: impl IntoText<'a>) { + self.write_packet(&TitleS2c { + title_text: text.into_cow_text(), + }); + } + + fn set_subtitle<'a>(&mut self, text: impl IntoText<'a>) { + self.write_packet(&SubtitleS2c { + subtitle_text: text.into_cow_text(), + }); + } + + fn set_action_bar<'a>(&mut self, text: impl IntoText<'a>) { + self.write_packet(&OverlayMessageS2c { + action_bar_text: text.into_cow_text(), + }); + } + + fn set_title_times(&mut self, fade_in: i32, stay: i32, fade_out: i32) { + self.write_packet(&TitleFadeS2c { + fade_in, + stay, + fade_out, + }); + } + + fn clear_title(&mut self) { + self.write_packet(&ClearTitleS2c { reset: false }); + } + + fn reset_title(&mut self) { + self.write_packet(&ClearTitleS2c { reset: true }); + } +} diff --git a/vendor/valence/crates/valence_server_common/Cargo.toml b/vendor/valence/crates/valence_server_common/Cargo.toml new file mode 100644 index 00000000..12d62c51 --- /dev/null +++ b/vendor/valence/crates/valence_server_common/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "valence_server_common" +description = "Common code for the valence_server family of crates" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_ecs.workspace = true +bevy_app.workspace = true +derive_more.workspace = true +uuid.workspace = true +rand.workspace = true +valence_protocol.workspace = true \ No newline at end of file diff --git a/vendor/valence/crates/valence_server_common/README.md b/vendor/valence/crates/valence_server_common/README.md new file mode 100644 index 00000000..da10c50c --- /dev/null +++ b/vendor/valence/crates/valence_server_common/README.md @@ -0,0 +1,3 @@ +# valence_server_common + +Contains some miscellaneous types for the `valence_server` family of crates, like `valence_entity`. `valence_registry`, and `valence_server`. diff --git a/vendor/valence/crates/valence_server_common/src/despawn.rs b/vendor/valence/crates/valence_server_common/src/despawn.rs new file mode 100644 index 00000000..17a9c22b --- /dev/null +++ b/vendor/valence/crates/valence_server_common/src/despawn.rs @@ -0,0 +1,26 @@ +use bevy_ecs::prelude::*; + +/// A marker [`Component`] for entities that should be despawned at the end of +/// the tick. +/// +/// In Valence, some entities such as Minecraft entities must not be removed +/// from the [`World`] directly. Valence needs an opportunity to perform +/// deinitialization work while the entity's components still exist. +/// +/// To resolve this problem, you must give the entities you wish to despawn the +/// `Despawned` component. At the end of the tick, Valence will despawn all +/// entities with this component for you. +/// +/// The `Despawned` component can be used on entities that Valence does not know +/// about. The entity will be despawned regardless. +#[derive(Component, Copy, Clone, Default, PartialEq, Eq, Debug)] +pub struct Despawned; + +pub(super) fn despawn_marked_entities( + entities: Query>, + mut commands: Commands, +) { + for entity in &entities { + commands.entity(entity).despawn(); + } +} diff --git a/vendor/valence/crates/valence_server_common/src/lib.rs b/vendor/valence/crates/valence_server_common/src/lib.rs new file mode 100644 index 00000000..b3a4c573 --- /dev/null +++ b/vendor/valence/crates/valence_server_common/src/lib.rs @@ -0,0 +1,134 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] +#![allow(clippy::unusual_byte_groupings)] + +mod despawn; +mod uuid; + +use std::num::NonZeroU32; +use std::time::Duration; + +use bevy_app::ScheduleRunnerPlugin; +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +pub use despawn::*; +use valence_protocol::CompressionThreshold; + +pub use crate::uuid::*; + +/// Minecraft's standard ticks per second (TPS). +pub const DEFAULT_TPS: NonZeroU32 = match NonZeroU32::new(20) { + Some(n) => n, + None => unreachable!(), +}; + +#[derive(Clone, Resource)] +pub struct ServerSettings { + /// The target ticks per second (TPS) of the server. This is the number of + /// game updates that should occur in one second. + /// + /// On each game update (tick), the server is expected to update game logic + /// and respond to packets from clients. Once this is complete, the server + /// will sleep for any remaining time until a full tick duration has passed. + /// + /// Note that the official Minecraft client only processes packets at 20hz, + /// so there is little benefit to a tick rate higher than the default 20. + /// + /// # Default Value + /// + /// [`DEFAULT_TPS`] + pub tick_rate: NonZeroU32, + /// The compression threshold to use for compressing packets. For a + /// compression threshold of `Some(N)`, packets with encoded lengths >= `N` + /// are compressed while all others are not. `None` disables compression + /// completely. + /// + /// If the server is used behind a proxy on the same machine, you will + /// likely want to disable compression. + /// + /// # Default Value + /// + /// Compression is enabled with an unspecified value. This value may + /// change in future versions. + pub compression_threshold: CompressionThreshold, +} + +impl Default for ServerSettings { + fn default() -> Self { + Self { + tick_rate: DEFAULT_TPS, + compression_threshold: CompressionThreshold(256), + } + } +} + +pub struct ServerPlugin; + +impl Plugin for ServerPlugin { + fn build(&self, app: &mut App) { + let settings = app + .world + .get_resource_or_insert_with(ServerSettings::default) + .clone(); + + app.insert_resource(Server { + current_tick: 0, + threshold: settings.compression_threshold, + tick_rate: settings.tick_rate, + }); + + let tick_period = Duration::from_secs_f64((settings.tick_rate.get() as f64).recip()); + + // Make the app loop forever at the configured TPS. + app.add_plugins(ScheduleRunnerPlugin::run_loop(tick_period)); + + fn increment_tick_counter(mut server: ResMut) { + server.current_tick += 1; + } + + app.add_systems(Last, (increment_tick_counter, despawn_marked_entities)); + } +} + +/// Contains global server state accessible as a [`Resource`]. +#[derive(Resource)] +pub struct Server { + /// Incremented on every tick. + current_tick: i64, + threshold: CompressionThreshold, + tick_rate: NonZeroU32, +} + +impl Server { + /// Returns the number of ticks that have elapsed since the server began. + pub fn current_tick(&self) -> i64 { + self.current_tick + } + + /// Returns the server's [compression + /// threshold](ServerSettings::compression_threshold). + pub fn compression_threshold(&self) -> CompressionThreshold { + self.threshold + } + + // Returns the server's [tick rate](ServerPlugin::tick_rate). + pub fn tick_rate(&self) -> NonZeroU32 { + self.tick_rate + } +} diff --git a/vendor/valence/crates/valence_server_common/src/uuid.rs b/vendor/valence/crates/valence_server_common/src/uuid.rs new file mode 100644 index 00000000..ea24169f --- /dev/null +++ b/vendor/valence/crates/valence_server_common/src/uuid.rs @@ -0,0 +1,18 @@ +use bevy_ecs::prelude::*; +use derive_more::Deref; +use uuid::Uuid; + +/// The universally unique identifier of an entity. Component wrapper for a +/// [`Uuid`]. +/// +/// This component is expected to remain _unique_ and _constant_ during the +/// lifetime of the entity. The [`Default`] impl generates a new random UUID. +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, PartialOrd, Ord, Hash, Deref)] +pub struct UniqueId(pub Uuid); + +/// Generates a new random UUID. +impl Default for UniqueId { + fn default() -> Self { + Self(Uuid::from_bytes(rand::random())) + } +} diff --git a/vendor/valence/crates/valence_spatial/Cargo.toml b/vendor/valence/crates/valence_spatial/Cargo.toml new file mode 100644 index 00000000..1505d432 --- /dev/null +++ b/vendor/valence/crates/valence_spatial/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "valence_spatial" +description = "Spatial partitioning for entities in Valence" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +approx.workspace = true +rayon.workspace = true +vek = "0.16.1" # TODO: remove this. \ No newline at end of file diff --git a/vendor/valence/crates/valence_spatial/README.md b/vendor/valence/crates/valence_spatial/README.md new file mode 100644 index 00000000..b6157ac0 --- /dev/null +++ b/vendor/valence/crates/valence_spatial/README.md @@ -0,0 +1,3 @@ +# valence_spatial + +An implementation of a [bounding volume hierarchy](https://en.wikipedia.org/wiki/Bounding_volume_hierarchy) (BVH) for fast spatial queries. diff --git a/vendor/valence/crates/valence_spatial/src/bvh.rs b/vendor/valence/crates/valence_spatial/src/bvh.rs new file mode 100644 index 00000000..66926209 --- /dev/null +++ b/vendor/valence/crates/valence_spatial/src/bvh.rs @@ -0,0 +1,429 @@ +use std::iter::FusedIterator; +use std::mem; + +use approx::abs_diff_eq; +use rayon::iter::{ + IndexedParallelIterator, IntoParallelRefIterator, IntoParallelRefMutIterator, ParallelIterator, +}; +use vek::{Aabb, Vec3}; + +use crate::{ray_box_intersect, Bounded3D, RaycastHit, SpatialIndex}; + +#[derive(Clone, Debug)] +pub struct Bvh { + internal_nodes: Vec, + leaf_nodes: Vec, + root: NodeIdx, +} + +#[derive(Clone, Debug)] +struct InternalNode { + bb: Aabb, + left: NodeIdx, + right: NodeIdx, +} + +// TODO: we could use usize here to store more elements. +type NodeIdx = u32; + +impl Bvh { + pub fn new() -> Self { + Self { + internal_nodes: vec![], + leaf_nodes: vec![], + root: NodeIdx::MAX, + } + } + + pub fn rebuild(&mut self, leaves: impl IntoIterator) { + self.internal_nodes.clear(); + self.leaf_nodes.clear(); + + self.leaf_nodes.extend(leaves); + + let leaf_count = self.leaf_nodes.len(); + + if leaf_count == 0 { + return; + } + + self.internal_nodes.reserve_exact(leaf_count - 1); + self.internal_nodes.resize( + leaf_count - 1, + InternalNode { + bb: Aabb::default(), + left: NodeIdx::MAX, + right: NodeIdx::MAX, + }, + ); + + if NodeIdx::try_from(leaf_count) + .ok() + .and_then(|count| count.checked_add(count - 1)) + .is_none() + { + panic!("too many elements in BVH"); + } + + let id = self.leaf_nodes[0].aabb(); + let scene_bounds = self + .leaf_nodes + .par_iter() + .map(|l| l.aabb()) + .reduce(|| id, Aabb::union); + + self.root = rebuild_rec( + 0, + scene_bounds, + &mut self.internal_nodes, + &mut self.leaf_nodes, + leaf_count as NodeIdx, + ) + .0; + + debug_assert_eq!(self.internal_nodes.len(), self.leaf_nodes.len() - 1); + } + + pub fn traverse(&self) -> Option> { + if !self.leaf_nodes.is_empty() { + Some(Node::from_idx(self, self.root)) + } else { + None + } + } + + pub fn iter(&self) -> impl ExactSizeIterator + FusedIterator + Clone + '_ { + self.leaf_nodes.iter() + } + + pub fn iter_mut(&mut self) -> impl ExactSizeIterator + FusedIterator + '_ { + self.leaf_nodes.iter_mut() + } + + pub fn par_iter(&self) -> impl IndexedParallelIterator + Clone + '_ { + self.leaf_nodes.par_iter() + } + + pub fn par_iter_mut(&mut self) -> impl IndexedParallelIterator + '_ { + self.leaf_nodes.par_iter_mut() + } +} + +impl Default for Bvh { + fn default() -> Self { + Self::new() + } +} + +#[derive(Debug)] +pub enum Node<'a, T> { + Internal(Internal<'a, T>), + Leaf(&'a T), +} + +impl<'a, T> Node<'a, T> { + fn from_idx(bvh: &'a Bvh, idx: NodeIdx) -> Self { + if idx < bvh.internal_nodes.len() as NodeIdx { + Self::Internal(Internal { bvh, idx }) + } else { + Self::Leaf(&bvh.leaf_nodes[(idx - bvh.internal_nodes.len() as NodeIdx) as usize]) + } + } +} + +impl Bounded3D for Node<'_, T> { + fn aabb(&self) -> Aabb { + match self { + Node::Internal(int) => int.aabb(), + Node::Leaf(t) => t.aabb(), + } + } +} + +impl Clone for Node<'_, T> { + fn clone(&self) -> Self { + *self + } +} + +impl Copy for Node<'_, T> {} + +#[derive(Debug)] +pub struct Internal<'a, T> { + bvh: &'a Bvh, + idx: NodeIdx, +} + +impl<'a, T> Internal<'a, T> { + pub fn split(self) -> (Aabb, Node<'a, T>, Node<'a, T>) { + let internal = &self.bvh.internal_nodes[self.idx as usize]; + + let bb = internal.bb; + let left = Node::from_idx(self.bvh, internal.left); + let right = Node::from_idx(self.bvh, internal.right); + + (bb, left, right) + } +} + +impl Bounded3D for Internal<'_, T> { + fn aabb(&self) -> Aabb { + self.bvh.internal_nodes[self.idx as usize].bb + } +} + +impl Clone for Internal<'_, T> { + fn clone(&self) -> Self { + *self + } +} + +impl Copy for Internal<'_, T> {} + +fn rebuild_rec( + idx: NodeIdx, + mut bounds: Aabb, + internal_nodes: &mut [InternalNode], + leaf_nodes: &mut [T], + total_leaf_count: NodeIdx, +) -> (NodeIdx, Aabb) { + debug_assert_eq!(leaf_nodes.len() - 1, internal_nodes.len()); + + if leaf_nodes.len() == 1 { + // Leaf node + return (total_leaf_count - 1 + idx, leaf_nodes[0].aabb()); + } + + loop { + debug_assert!(bounds.is_valid()); + let dims = bounds.max - bounds.min; + + let (mut split, bounds_left, bounds_right) = if dims.x >= dims.y && dims.x >= dims.z { + let mid = middle(bounds.min.x, bounds.max.x); + let [bounds_left, bounds_right] = bounds.split_at_x(mid); + + let p = partition(leaf_nodes, |l| { + middle(l.aabb().min.x, l.aabb().max.x) <= mid + }); + + (p, bounds_left, bounds_right) + } else if dims.y >= dims.x && dims.y >= dims.z { + let mid = middle(bounds.min.y, bounds.max.y); + let [bounds_left, bounds_right] = bounds.split_at_y(mid); + + let p = partition(leaf_nodes, |l| { + middle(l.aabb().min.y, l.aabb().max.y) <= mid + }); + + (p, bounds_left, bounds_right) + } else { + let mid = middle(bounds.min.z, bounds.max.z); + let [bounds_left, bounds_right] = bounds.split_at_z(mid); + + let p = partition(leaf_nodes, |l| { + middle(l.aabb().min.z, l.aabb().max.z) <= mid + }); + + (p, bounds_left, bounds_right) + }; + + // Check if one of the halves is empty. (We can't have empty nodes) + // Also take care to handle the edge case of overlapping points. + if split == 0 { + if abs_diff_eq!( + bounds_right.min, + bounds_right.max, + epsilon = f64::EPSILON * 100.0 + ) { + split += 1; + } else { + bounds = bounds_right; + continue; + } + } else if split == leaf_nodes.len() { + if abs_diff_eq!( + bounds_left.min, + bounds_left.max, + epsilon = f64::EPSILON * 100.0 + ) { + split -= 1; + } else { + bounds = bounds_left; + continue; + } + } + + let (leaves_left, leaves_right) = leaf_nodes.split_at_mut(split); + + let (internal_left, internal_right) = internal_nodes.split_at_mut(split); + let (internal, internal_left) = internal_left.split_last_mut().unwrap(); + + let ((left, bounds_left), (right, bounds_right)) = rayon::join( + || { + rebuild_rec( + idx, + bounds_left, + internal_left, + leaves_left, + total_leaf_count, + ) + }, + || { + rebuild_rec( + idx + split as NodeIdx, + bounds_right, + internal_right, + leaves_right, + total_leaf_count, + ) + }, + ); + + internal.bb = bounds_left.union(bounds_right); + internal.left = left; + internal.right = right; + + break (idx + split as NodeIdx - 1, internal.bb); + } +} + +fn partition(s: &mut [T], mut pred: impl FnMut(&T) -> bool) -> usize { + let mut it = s.iter_mut(); + let mut true_count = 0; + + while let Some(head) = it.find(|x| { + if pred(x) { + true_count += 1; + false + } else { + true + } + }) { + if let Some(tail) = it.rfind(|x| pred(x)) { + mem::swap(head, tail); + true_count += 1; + } else { + break; + } + } + true_count +} + +fn middle(a: f64, b: f64) -> f64 { + (a + b) / 2.0 +} + +impl SpatialIndex for Bvh { + type Object = O; + + fn query(&self, mut collides: C, mut f: F) -> Option + where + C: FnMut(Aabb) -> bool, + F: FnMut(&O) -> Option, + { + fn query_rec(node: Node, collides: &mut C, f: &mut F) -> Option + where + C: FnMut(Aabb) -> bool, + F: FnMut(&O) -> Option, + O: Bounded3D, + { + match node { + Node::Internal(int) => { + let (bb, left, right) = int.split(); + + if collides(bb) { + query_rec(left, collides, f).or_else(|| query_rec(right, collides, f)) + } else { + None + } + } + Node::Leaf(leaf) => { + if collides(leaf.aabb()) { + f(leaf) + } else { + None + } + } + } + } + + query_rec(self.traverse()?, &mut collides, &mut f) + } + + fn raycast(&self, origin: Vec3, direction: Vec3, mut f: F) -> Option> + where + F: FnMut(RaycastHit) -> bool, + { + fn raycast_rec<'a, O: Bounded3D>( + node: Node<'a, O>, + hit: &mut Option>, + near: f64, + far: f64, + origin: Vec3, + direction: Vec3, + f: &mut impl FnMut(RaycastHit) -> bool, + ) { + if let Some(hit) = hit { + if hit.near <= near { + return; + } + } + + match node { + Node::Internal(int) => { + let (_, left, right) = int.split(); + + let int_left = ray_box_intersect(origin, direction, left.aabb()); + let int_right = ray_box_intersect(origin, direction, right.aabb()); + + match (int_left, int_right) { + (Some((near_left, far_left)), Some((near_right, far_right))) => { + // Explore closest subtree first. + if near_left < near_right { + raycast_rec(left, hit, near_left, far_left, origin, direction, f); + raycast_rec( + right, hit, near_right, far_right, origin, direction, f, + ); + } else { + raycast_rec( + right, hit, near_right, far_right, origin, direction, f, + ); + raycast_rec(left, hit, near_left, far_left, origin, direction, f); + } + } + (Some((near, far)), None) => { + raycast_rec(left, hit, near, far, origin, direction, f) + } + (None, Some((near, far))) => { + raycast_rec(right, hit, near, far, origin, direction, f) + } + (None, None) => {} + } + } + Node::Leaf(leaf) => { + let this_hit = RaycastHit { + object: leaf, + near, + far, + }; + + if f(this_hit) { + *hit = Some(this_hit); + } + } + } + } + + debug_assert!( + direction.is_normalized(), + "the ray direction must be normalized" + ); + + let root = self.traverse()?; + let (near, far) = ray_box_intersect(origin, direction, root.aabb())?; + + let mut hit = None; + raycast_rec(root, &mut hit, near, far, origin, direction, &mut f); + hit + } +} diff --git a/vendor/valence/crates/valence_spatial/src/lib.rs b/vendor/valence/crates/valence_spatial/src/lib.rs new file mode 100644 index 00000000..df9d7a55 --- /dev/null +++ b/vendor/valence/crates/valence_spatial/src/lib.rs @@ -0,0 +1,193 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use vek::{Aabb, Vec3}; + +pub mod bvh; + +pub trait SpatialIndex { + type Object: Bounded3D; + + /// Invokes `f` with every object in the spatial index considered + /// colliding according to `collides` in an arbitrary order. + /// + /// `collides` takes an AABB and returns whether or not a collision + /// occurred with the given AABB. + /// + /// `f` is called with every object considered colliding. If `f` returns + /// with `Some(x)`, then `query` exits early with `Some(x)`. If `f` never + /// returns with `Some`, then query returns `None`. + fn query(&self, collides: C, f: F) -> Option + where + C: FnMut(Aabb) -> bool, + F: FnMut(&Self::Object) -> Option; + + /// Casts a ray defined by `origin` and `direction` through object AABBs + /// and returns the closest intersection for which `f` returns `true`. + /// + /// `f` is a predicate used to filter intersections. For instance, if a ray + /// is shot from a player's eye position, you probably don't want the + /// ray to intersect with the player's own hitbox. + /// + /// If no intersections are found or if `f` never returns `true` then `None` + /// is returned. Additionally, the given ray direction must be + /// normalized. + fn raycast( + &self, + origin: Vec3, + direction: Vec3, + f: F, + ) -> Option> + where + F: FnMut(RaycastHit) -> bool; +} + +pub trait Bounded3D { + fn aabb(&self) -> Aabb; +} + +/// Represents an intersection between a ray and an entity's axis-aligned +/// bounding box (hitbox). +#[derive(PartialEq, Eq, Debug)] +pub struct RaycastHit<'a, O, N = f64> { + /// The object that was hit by the ray. + pub object: &'a O, + /// The distance from the ray origin to the closest intersection point. + /// If the origin of the ray is inside the bounding box, then this will be + /// zero. + pub near: N, + /// The distance from the ray origin to the second intersection point. This + /// represents the point at which the ray exits the bounding box. + pub far: N, +} + +impl Clone for RaycastHit<'_, O, N> { + fn clone(&self) -> Self { + Self { + object: self.object, + near: self.near.clone(), + far: self.far.clone(), + } + } +} + +impl Copy for RaycastHit<'_, O, N> {} + +impl Bounded3D for Aabb { + fn aabb(&self) -> Aabb { + self.clone() + } +} + +#[derive(Copy, Clone, PartialEq, Eq, Hash, Default, Debug)] +pub struct WithAabb { + pub object: O, + pub aabb: Aabb, +} + +impl WithAabb { + pub fn new(object: O, aabb: Aabb) -> Self { + Self { object, aabb } + } +} + +impl Bounded3D for WithAabb { + fn aabb(&self) -> Aabb { + self.aabb.clone() + } +} + +/// Calculates the intersection between an axis-aligned bounding box and a ray +/// defined by its origin `ro` and direction `rd`. +/// +/// If an intersection occurs, `Some((near, far))` is returned. `near` and `far` +/// are the distance from the origin to the closest and furthest intersection +/// points respectively. If the intersection occurs inside the bounding box, +/// then `near` is zero. +pub fn ray_box_intersect(ro: Vec3, rd: Vec3, bb: Aabb) -> Option<(f64, f64)> { + let mut near = -f64::INFINITY; + let mut far = f64::INFINITY; + + for i in 0..3 { + // Rust's definition of min and max properly handle the NaNs that these + // computations might produce. + let t0 = (bb.min[i] - ro[i]) / rd[i]; + let t1 = (bb.max[i] - ro[i]) / rd[i]; + + near = near.max(t0.min(t1)); + far = far.min(t0.max(t1)); + } + + if near <= far && far >= 0.0 { + Some((near.max(0.0), far)) + } else { + None + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn ray_box_edge_cases() { + let bb = Aabb { + min: Vec3::new(0.0, 0.0, 0.0), + max: Vec3::new(1.0, 1.0, 1.0), + }; + + let ros = [ + // On a corner + Vec3::new(0.0, 0.0, 0.0), + // Outside + Vec3::new(-0.5, 0.5, -0.5), + // In the center + Vec3::new(0.5, 0.5, 0.5), + // On an edge + Vec3::new(0.0, 0.5, 0.0), + // On a face + Vec3::new(0.0, 0.5, 0.5), + // Outside slabs + Vec3::new(-2.0, -2.0, -2.0), + ]; + + let rds = [ + Vec3::new(1.0, 0.0, 0.0), + Vec3::new(-1.0, 0.0, 0.0), + Vec3::new(0.0, 1.0, 0.0), + Vec3::new(0.0, -1.0, 0.0), + Vec3::new(0.0, 0.0, 1.0), + Vec3::new(0.0, 0.0, -1.0), + ]; + + assert!(rds.iter().all(|d| d.is_normalized())); + + for ro in ros { + for rd in rds { + if let Some((near, far)) = ray_box_intersect(ro, rd, bb) { + assert!(near.is_finite()); + assert!(far.is_finite()); + assert!(near <= far); + assert!(near >= 0.0); + assert!(far >= 0.0); + } + } + } + } +} diff --git a/vendor/valence/crates/valence_text/Cargo.toml b/vendor/valence/crates/valence_text/Cargo.toml new file mode 100644 index 00000000..f79b9a9f --- /dev/null +++ b/vendor/valence/crates/valence_text/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "valence_text" +description = "Parsing and writing Minecraft's JSON text format" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +thiserror.workspace = true +uuid = { workspace = true, features = ["serde"] } +valence_ident.workspace = true +valence_nbt.workspace = true diff --git a/vendor/valence/crates/valence_text/README.md b/vendor/valence/crates/valence_text/README.md new file mode 100644 index 00000000..b3364ba2 --- /dev/null +++ b/vendor/valence/crates/valence_text/README.md @@ -0,0 +1,3 @@ +# valence_text + +A library for parsing and writing Minecraft's [JSON text format](https://minecraft.wiki/w/Raw_JSON_text_format) diff --git a/vendor/valence/crates/valence_text/src/color.rs b/vendor/valence/crates/valence_text/src/color.rs new file mode 100644 index 00000000..c0583158 --- /dev/null +++ b/vendor/valence/crates/valence_text/src/color.rs @@ -0,0 +1,368 @@ +//! [`Color`] and related data structures. + +use std::fmt; +use std::hash::Hash; + +use serde::de::Visitor; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use thiserror::Error; + +/// Text color +#[derive(Default, Debug, PartialOrd, Eq, Ord, Clone, Copy)] +pub enum Color { + /// The default color for the text will be used, which varies by context + /// (in some cases, it's white; in others, it's black; in still others, it + /// is a shade of gray that isn't normally used on text). + #[default] + Reset, + /// RGB Color + Rgb(RgbColor), + /// One of the 16 named Minecraft colors + Named(NamedColor), +} + +/// RGB Color +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] +pub struct RgbColor { + /// Red channel + pub r: u8, + /// Green channel + pub g: u8, + /// Blue channel + pub b: u8, +} + +/// Named Minecraft color +#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)] +pub enum NamedColor { + /// Hex digit: `0`, name: `black` + Black = 0, + /// Hex digit: `1`, name: `dark_blue` + DarkBlue, + /// Hex digit: `2`, name: `dark_green` + DarkGreen, + /// Hex digit: `3`, name: `dark_aqua` + DarkAqua, + /// Hex digit: `4`, name: `dark_red` + DarkRed, + /// Hex digit: `5`, name: `dark_purple` + DarkPurple, + /// Hex digit: `6`, name: `gold` + Gold, + /// Hex digit: `7`, name: `gray` + Gray, + /// Hex digit: `8`, name: `dark_gray` + DarkGray, + /// Hex digit: `9`, name: `blue` + Blue, + /// Hex digit: `a`, name: `green` + Green, + /// Hex digit: `b`, name: `aqua` + Aqua, + /// Hex digit: `c`, name: `red` + Red, + /// Hex digit: `d`, name: `light_purple` + LightPurple, + /// Hex digit: `e`, name: `yellow` + Yellow, + /// Hex digit: `f`, name: `white` + White, +} + +/// Color parsing error +#[derive(Debug, Error, PartialEq, PartialOrd, Clone, Copy, Hash, Eq, Ord)] +#[error("invalid color name or hex code")] +pub struct ColorError; + +impl Color { + pub const RESET: Self = Self::Reset; + pub const AQUA: Self = Self::Named(NamedColor::Aqua); + pub const BLACK: Self = Self::Named(NamedColor::Black); + pub const BLUE: Self = Self::Named(NamedColor::Blue); + pub const DARK_AQUA: Self = Self::Named(NamedColor::DarkAqua); + pub const DARK_BLUE: Self = Self::Named(NamedColor::DarkBlue); + pub const DARK_GRAY: Self = Self::Named(NamedColor::DarkGray); + pub const DARK_GREEN: Self = Self::Named(NamedColor::DarkGreen); + pub const DARK_PURPLE: Self = Self::Named(NamedColor::DarkPurple); + pub const DARK_RED: Self = Self::Named(NamedColor::DarkRed); + pub const GOLD: Self = Self::Named(NamedColor::Gold); + pub const GRAY: Self = Self::Named(NamedColor::Gray); + pub const GREEN: Self = Self::Named(NamedColor::Green); + pub const LIGHT_PURPLE: Self = Self::Named(NamedColor::LightPurple); + pub const RED: Self = Self::Named(NamedColor::Red); + pub const WHITE: Self = Self::Named(NamedColor::White); + pub const YELLOW: Self = Self::Named(NamedColor::Yellow); + + /// Constructs a new RGB color + pub const fn rgb(r: u8, g: u8, b: u8) -> Self { + Self::Rgb(RgbColor::new(r, g, b)) + } +} + +impl RgbColor { + /// Constructs a new color from red, green, and blue components. + pub const fn new(r: u8, g: u8, b: u8) -> Self { + Self { r, g, b } + } + /// Converts the RGB color to the closest [`NamedColor`] equivalent (lossy). + pub fn to_named_lossy(self) -> NamedColor { + // calculates the squared distance between 2 colors + fn squared_distance(c1: RgbColor, c2: RgbColor) -> i32 { + (c1.r as i32 - c2.r as i32).pow(2) + + (c1.g as i32 - c2.g as i32).pow(2) + + (c1.b as i32 - c2.b as i32).pow(2) + } + + [ + NamedColor::Aqua, + NamedColor::Black, + NamedColor::Blue, + NamedColor::DarkAqua, + NamedColor::DarkBlue, + NamedColor::DarkGray, + NamedColor::DarkGreen, + NamedColor::DarkPurple, + NamedColor::DarkRed, + NamedColor::Gold, + NamedColor::Gray, + NamedColor::Green, + NamedColor::LightPurple, + NamedColor::Red, + NamedColor::White, + NamedColor::Yellow, + ] + .into_iter() + .min_by_key(|&named| squared_distance(named.into(), self)) + .unwrap() + } +} + +impl NamedColor { + /// Returns the corresponding hex digit of the color. + pub const fn hex_digit(self) -> char { + b"0123456789abcdef"[self as usize] as char + } + /// Returns the identifier of the color. + pub const fn name(self) -> &'static str { + [ + "black", + "dark_blue", + "dark_green", + "dark_aqua", + "dark_red", + "dark_purple", + "gold", + "gray", + "dark_gray", + "blue", + "green", + "aqua", + "red", + "light_purple", + "yellow", + "white", + ][self as usize] + } +} + +impl PartialEq for Color { + fn eq(&self, other: &Self) -> bool { + match (*self, *other) { + (Self::Reset, Self::Reset) => true, + (Self::Rgb(rgb1), Self::Rgb(rgb2)) => rgb1 == rgb2, + (Self::Named(normal1), Self::Named(normal2)) => normal1 == normal2, + (Self::Rgb(rgb), Self::Named(normal)) | (Self::Named(normal), Self::Rgb(rgb)) => { + rgb == RgbColor::from(normal) + } + (Self::Reset, _) | (_, Self::Reset) => false, + } + } +} + +impl Hash for Color { + fn hash(&self, state: &mut H) { + match self { + Self::Reset => state.write_u8(0), + Self::Rgb(rgb) => { + state.write_u8(1); + rgb.hash(state); + } + Self::Named(normal) => { + state.write_u8(1); + RgbColor::from(*normal).hash(state); + } + } + } +} + +impl From for RgbColor { + fn from(value: NamedColor) -> Self { + match value { + NamedColor::Aqua => Self::new(85, 255, 255), + NamedColor::Black => Self::new(0, 0, 0), + NamedColor::Blue => Self::new(85, 85, 255), + NamedColor::DarkAqua => Self::new(0, 170, 170), + NamedColor::DarkBlue => Self::new(0, 0, 170), + NamedColor::DarkGray => Self::new(85, 85, 85), + NamedColor::DarkGreen => Self::new(0, 170, 0), + NamedColor::DarkPurple => Self::new(170, 0, 170), + NamedColor::DarkRed => Self::new(170, 0, 0), + NamedColor::Gold => Self::new(255, 170, 0), + NamedColor::Gray => Self::new(170, 170, 170), + NamedColor::Green => Self::new(85, 255, 85), + NamedColor::LightPurple => Self::new(255, 85, 255), + NamedColor::Red => Self::new(255, 85, 85), + NamedColor::White => Self::new(255, 255, 255), + NamedColor::Yellow => Self::new(255, 255, 85), + } + } +} + +impl From for Color { + fn from(value: RgbColor) -> Self { + Self::Rgb(value) + } +} + +impl From for Color { + fn from(value: NamedColor) -> Self { + Self::Named(value) + } +} + +impl TryFrom<&str> for Color { + type Error = ColorError; + + fn try_from(value: &str) -> Result { + if value.starts_with('#') { + return Ok(Self::Rgb(RgbColor::try_from(value)?)); + } + + if value == "reset" { + return Ok(Self::Reset); + } + + Ok(Self::Named(NamedColor::try_from(value)?)) + } +} + +impl TryFrom<&str> for NamedColor { + type Error = ColorError; + + fn try_from(value: &str) -> Result { + match value { + "black" => Ok(NamedColor::Black), + "dark_blue" => Ok(NamedColor::DarkBlue), + "dark_green" => Ok(NamedColor::DarkGreen), + "dark_aqua" => Ok(NamedColor::DarkAqua), + "dark_red" => Ok(NamedColor::DarkRed), + "dark_purple" => Ok(NamedColor::DarkPurple), + "gold" => Ok(NamedColor::Gold), + "gray" => Ok(NamedColor::Gray), + "dark_gray" => Ok(NamedColor::DarkGray), + "blue" => Ok(NamedColor::Blue), + "green" => Ok(NamedColor::Green), + "aqua" => Ok(NamedColor::Aqua), + "red" => Ok(NamedColor::Red), + "light_purple" => Ok(NamedColor::LightPurple), + "yellow" => Ok(NamedColor::Yellow), + "white" => Ok(NamedColor::White), + _ => Err(ColorError), + } + } +} + +impl TryFrom<&str> for RgbColor { + type Error = ColorError; + + fn try_from(value: &str) -> Result { + let to_num = |d| match d { + b'0'..=b'9' => Ok(d - b'0'), + b'a'..=b'f' => Ok(d - b'a' + 0xa), + b'A'..=b'F' => Ok(d - b'A' + 0xa), + _ => Err(ColorError), + }; + + if let &[b'#', r0, r1, g0, g1, b0, b1] = value.as_bytes() { + Ok(RgbColor { + r: to_num(r0)? << 4 | to_num(r1)?, + g: to_num(g0)? << 4 | to_num(g1)?, + b: to_num(b0)? << 4 | to_num(b1)?, + }) + } else { + Err(ColorError) + } + } +} + +impl Serialize for Color { + fn serialize(&self, serializer: S) -> Result { + format!("{}", self).serialize(serializer) + } +} + +impl<'de> Deserialize<'de> for Color { + fn deserialize>(deserializer: D) -> Result { + deserializer.deserialize_str(ColorVisitor) + } +} + +struct ColorVisitor; + +impl<'de> Visitor<'de> for ColorVisitor { + type Value = Color; + + fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "a hex color (#rrggbb), a normal color or 'reset'") + } + + fn visit_str(self, s: &str) -> Result { + Color::try_from(s).map_err(|_| E::custom("invalid color")) + } +} + +impl fmt::Display for Color { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Color::Reset => write!(f, "reset"), + Color::Rgb(rgb) => rgb.fmt(f), + Color::Named(normal) => normal.fmt(f), + } + } +} + +impl fmt::Display for RgbColor { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "#{:02x}{:02x}{:02x}", self.r, self.g, self.b) + } +} + +impl fmt::Display for NamedColor { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", self.name()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn colors() { + assert_eq!( + Color::try_from("#aBcDeF"), + Ok(RgbColor::new(0xab, 0xcd, 0xef).into()) + ); + assert_eq!( + Color::try_from("#fFfFfF"), + Ok(RgbColor::new(255, 255, 255).into()) + ); + assert_eq!(Color::try_from("#000000"), Ok(NamedColor::Black.into())); + assert_eq!(Color::try_from("red"), Ok(NamedColor::Red.into())); + assert_eq!(Color::try_from("blue"), Ok(NamedColor::Blue.into())); + assert!(Color::try_from("#ffTf00").is_err()); + assert!(Color::try_from("#ffš00").is_err()); + assert!(Color::try_from("#00000000").is_err()); + assert!(Color::try_from("#").is_err()); + } +} diff --git a/vendor/valence/crates/valence_text/src/into_text.rs b/vendor/valence/crates/valence_text/src/into_text.rs new file mode 100644 index 00000000..981b8c52 --- /dev/null +++ b/vendor/valence/crates/valence_text/src/into_text.rs @@ -0,0 +1,377 @@ +//! Provides the [`IntoText`] trait and implementations. + +use std::borrow::Cow; + +use super::{ClickEvent, Color, Font, HoverEvent, Text}; + +/// Trait for any data that can be converted to a [`Text`] object. +/// +/// Also conveniently provides many useful methods for modifying a [`Text`] +/// object. +/// +/// # Usage +/// +/// ``` +/// # use valence_text::{IntoText, color::NamedColor}; +/// let mut my_text = "".into_text(); +/// my_text = my_text.color(NamedColor::Red).bold(); +/// my_text = my_text.add_child("CRABBBBB".obfuscated()); +pub trait IntoText<'a>: Sized { + /// Converts to a [`Text`] object, either owned or borrowed. + fn into_cow_text(self) -> Cow<'a, Text>; + + /// Converts to an owned [`Text`] object. + fn into_text(self) -> Text { + self.into_cow_text().into_owned() + } + + /// Sets the color of the text. + fn color(self, color: impl Into) -> Text { + let mut value = self.into_text(); + value.color = Some(color.into()); + value + } + /// Clears the color of the text. Color of parent [`Text`] object will be + /// used. + fn clear_color(self) -> Text { + let mut value = self.into_text(); + value.color = None; + value + } + + /// Sets the font of the text. + fn font(self, font: Font) -> Text { + let mut value = self.into_text(); + value.font = Some(font); + value + } + /// Clears the font of the text. Font of parent [`Text`] object will be + /// used. + fn clear_font(self) -> Text { + let mut value = self.into_text(); + value.font = None; + value + } + + /// Makes the text bold. + fn bold(self) -> Text { + let mut value = self.into_text(); + value.bold = Some(true); + value + } + /// Makes the text not bold. + fn not_bold(self) -> Text { + let mut value = self.into_text(); + value.bold = Some(false); + value + } + /// Clears the `bold` property of the text. Property of the parent [`Text`] + /// object will be used. + fn clear_bold(self) -> Text { + let mut value = self.into_text(); + value.bold = None; + value + } + + /// Makes the text italic. + fn italic(self) -> Text { + let mut value = self.into_text(); + value.italic = Some(true); + value + } + /// Makes the text not italic. + fn not_italic(self) -> Text { + let mut value = self.into_text(); + value.italic = Some(false); + value + } + /// Clears the `italic` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_italic(self) -> Text { + let mut value = self.into_text(); + value.italic = None; + value + } + + /// Makes the text underlined. + fn underlined(self) -> Text { + let mut value = self.into_text(); + value.underlined = Some(true); + value + } + /// Makes the text not underlined. + fn not_underlined(self) -> Text { + let mut value = self.into_text(); + value.underlined = Some(false); + value + } + /// Clears the `underlined` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_underlined(self) -> Text { + let mut value = self.into_text(); + value.underlined = None; + value + } + + /// Adds a strikethrough effect to the text. + fn strikethrough(self) -> Text { + let mut value = self.into_text(); + value.strikethrough = Some(true); + value + } + /// Removes the strikethrough effect from the text. + fn not_strikethrough(self) -> Text { + let mut value = self.into_text(); + value.strikethrough = Some(false); + value + } + /// Clears the `strikethrough` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_strikethrough(self) -> Text { + let mut value = self.into_text(); + value.strikethrough = None; + value + } + + /// Makes the text obfuscated. + fn obfuscated(self) -> Text { + let mut value = self.into_text(); + value.obfuscated = Some(true); + value + } + /// Makes the text not obfuscated. + fn not_obfuscated(self) -> Text { + let mut value = self.into_text(); + value.obfuscated = Some(false); + value + } + /// Clears the `obfuscated` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_obfuscated(self) -> Text { + let mut value = self.into_text(); + value.obfuscated = None; + value + } + + /// Adds an `insertion` property to the text. When shift-clicked, the given + /// text will be inserted into chat box for the client. + fn insertion(self, insertion: impl Into>) -> Text { + let mut value = self.into_text(); + value.insertion = Some(insertion.into()); + value + } + /// Clears the `insertion` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_insertion(self) -> Text { + let mut value = self.into_text(); + value.insertion = None; + value + } + + /// On click, opens the given URL. Has to be `http` or `https` protocol. + fn on_click_open_url(self, url: impl Into>) -> Text { + let mut value = self.into_text(); + value.click_event = Some(ClickEvent::OpenUrl(url.into())); + value + } + /// On click, sends a command. Doesn't actually have to be a command, can be + /// a simple chat message. + fn on_click_run_command(self, command: impl Into>) -> Text { + let mut value = self.into_text(); + value.click_event = Some(ClickEvent::RunCommand(command.into())); + value + } + /// On click, copies the given text to the chat box. + fn on_click_suggest_command(self, command: impl Into>) -> Text { + let mut value = self.into_text(); + value.click_event = Some(ClickEvent::SuggestCommand(command.into())); + value + } + /// On click, turns the page of the opened book to the given number. + /// Indexing starts at `1`. + fn on_click_change_page(self, page: impl Into) -> Text { + let mut value = self.into_text(); + value.click_event = Some(ClickEvent::ChangePage(page.into())); + value + } + /// On click, copies the given text to clipboard. + fn on_click_copy_to_clipboard(self, text: impl Into>) -> Text { + let mut value = self.into_text(); + value.click_event = Some(ClickEvent::CopyToClipboard(text.into())); + value + } + /// Clears the `click_event` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_click_event(self) -> Text { + let mut value = self.into_text(); + value.click_event = None; + value + } + + /// On mouse hover, shows the given text in a tooltip. + fn on_hover_show_text(self, text: impl IntoText<'static>) -> Text { + let mut value = self.into_text(); + value.hover_event = Some(HoverEvent::ShowText(text.into_text())); + value + } + /// Clears the `hover_event` property of the text. Property of the parent + /// [`Text`] object will be used. + fn clear_hover_event(self) -> Text { + let mut value = self.into_text(); + value.hover_event = None; + value + } + + /// Adds a child [`Text`] object. + fn add_child(self, text: impl IntoText<'static>) -> Text { + let mut value = self.into_text(); + value.extra.push(text.into_text()); + value + } +} + +impl<'a> IntoText<'a> for Text { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Owned(self) + } +} +impl<'a> IntoText<'a> for &'a Text { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Borrowed(self) + } +} +impl<'a> From<&'a Text> for Text { + fn from(value: &'a Text) -> Self { + value.clone() + } +} + +impl<'a> IntoText<'a> for Cow<'a, Text> { + fn into_cow_text(self) -> Cow<'a, Text> { + self + } +} +impl<'a> From> for Text { + fn from(value: Cow<'a, Text>) -> Self { + value.into_owned() + } +} +impl<'a, 'b> IntoText<'a> for &'a Cow<'b, Text> { + fn into_cow_text(self) -> Cow<'a, Text> { + self.clone() + } +} +impl<'a, 'b> From<&'a Cow<'b, Text>> for Text { + fn from(value: &'a Cow<'b, Text>) -> Self { + value.clone().into_owned() + } +} + +impl<'a> IntoText<'a> for String { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Owned(Text::text(self)) + } +} +impl From for Text { + fn from(value: String) -> Self { + value.into_text() + } +} +impl<'b> IntoText<'b> for &String { + fn into_cow_text(self) -> Cow<'b, Text> { + Cow::Owned(Text::text(self.clone())) + } +} +impl<'a> From<&'a String> for Text { + fn from(value: &'a String) -> Self { + value.into_text() + } +} + +impl<'a> IntoText<'a> for Cow<'static, str> { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Owned(Text::text(self)) + } +} +impl From> for Text { + fn from(value: Cow<'static, str>) -> Self { + value.into_text() + } +} +impl IntoText<'static> for &Cow<'static, str> { + fn into_cow_text(self) -> Cow<'static, Text> { + Cow::Owned(Text::text(self.clone())) + } +} +impl<'a> From<&'a Cow<'static, str>> for Text { + fn from(value: &'a Cow<'static, str>) -> Self { + value.into_text() + } +} + +impl<'a> IntoText<'a> for &'static str { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Owned(Text::text(self)) + } +} +impl From<&'static str> for Text { + fn from(value: &'static str) -> Self { + value.into_text() + } +} + +impl<'a, 'b, T: IntoText<'a>, const N: usize> IntoText<'b> for [T; N] { + fn into_cow_text(self) -> Cow<'b, Text> { + let mut txt = Text::text(""); + + for child in self { + txt = txt.add_child(child.into_cow_text().into_owned()); + } + + Cow::Owned(txt) + } +} + +impl<'a, 'c, T: IntoText<'a> + Clone, const N: usize> IntoText<'c> for &[T; N] { + fn into_cow_text(self) -> Cow<'c, Text> { + let mut txt = Text::text(""); + + for child in self { + txt = txt.add_child(child.clone().into_cow_text().into_owned()); + } + + Cow::Owned(txt) + } +} + +macro_rules! impl_primitives { + ($($primitive:ty),+) => { + $( + impl<'a> IntoText<'a> for $primitive { + fn into_cow_text(self) -> Cow<'a, Text> { + Cow::Owned(Text::text(self.to_string())) + } + } + )+ + }; +} +impl_primitives! {char, bool, f32, f64, isize, usize, i8, i16, i32, i64, i128, u8, u16, u32, u64, u128} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn intotext_trait() { + fn is_borrowed<'a>(value: impl IntoText<'a>) -> bool { + matches!(value.into_cow_text(), Cow::Borrowed(..)) + } + + assert!(is_borrowed("this should be borrowed".into_text())); + assert!(is_borrowed("this should be borrowed too".bold())); + assert!(!is_borrowed("this should be owned?".bold())); + assert!(!is_borrowed("this should be owned")); + assert!(!is_borrowed(465)); + assert!(!is_borrowed(false)); + } +} diff --git a/vendor/valence/crates/valence_text/src/lib.rs b/vendor/valence/crates/valence_text/src/lib.rs new file mode 100644 index 00000000..19a528a6 --- /dev/null +++ b/vendor/valence/crates/valence_text/src/lib.rs @@ -0,0 +1,650 @@ +#![doc = include_str!("../README.md")] + +use std::borrow::Cow; +use std::ops::{Deref, DerefMut}; +use std::str::FromStr; +use std::{fmt, ops}; + +use serde::de::Visitor; +use serde::{Deserialize, Deserializer, Serialize, de}; +use uuid::Uuid; +use valence_ident::Ident; +use valence_nbt::Value; + +pub mod color; +mod into_text; +#[cfg(test)] +mod tests; + +pub use color::Color; +pub use into_text::IntoText; + +/// Represents formatted text in Minecraft's JSON text format. +/// +/// Text is used in various places such as chat, window titles, +/// disconnect messages, written books, signs, and more. +/// +/// For more information, see the relevant [Minecraft Wiki article]. +/// +/// [Minecraft Wiki article]: https://minecraft.wiki/w/Raw_JSON_text_format +/// +/// # Examples +/// +/// With [`IntoText`] in scope, you can write the following: +/// ``` +/// use valence_text::{Color, IntoText, Text}; +/// +/// let txt = "The text is ".into_text() +/// + "Red".color(Color::RED) +/// + ", " +/// + "Green".color(Color::GREEN) +/// + ", and also " +/// + "Blue".color(Color::BLUE) +/// + "! And maybe even " +/// + "Italic".italic() +/// + "."; +/// +/// assert_eq!( +/// txt.to_string(), +/// r#"{"text":"The text is ","extra":[{"text":"Red","color":"red"},{"text":", "},{"text":"Green","color":"green"},{"text":", and also "},{"text":"Blue","color":"blue"},{"text":"! And maybe even "},{"text":"Italic","italic":true},{"text":"."}]}"# +/// ); +/// ``` +#[derive(Clone, PartialEq, Default, Serialize)] +#[serde(transparent)] +pub struct Text(Box); + +/// Text data and formatting. +#[derive(Clone, PartialEq, Default, Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TextInner { + #[serde(flatten)] + pub content: TextContent, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub color: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub font: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub bold: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub italic: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub underlined: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub strikethrough: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub obfuscated: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub insertion: Option>, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub click_event: Option, + + #[serde(default, skip_serializing_if = "Option::is_none")] + pub hover_event: Option, + + #[serde(default, skip_serializing_if = "Vec::is_empty")] + pub extra: Vec, +} + +/// The text content of a Text object. +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(untagged)] +pub enum TextContent { + /// Normal text + // TODO: Use Utf8Bytes + Text { text: Cow<'static, str> }, + /// A piece of text that will be translated on the client based on the + /// client language. If no corresponding translation can be found, the + /// identifier itself is used as the translated text. + Translate { + /// A translation identifier, corresponding to the identifiers found in + /// loaded language files. + translate: Cow<'static, str>, + /// Optional list of text components to be inserted into slots in the + /// translation text. Ignored if `translate` is not present. + #[serde(default, skip_serializing_if = "Vec::is_empty")] + with: Vec, + }, + /// Displays a score holder's current score in an objective. + ScoreboardValue { score: ScoreboardValueContent }, + /// Displays the name of one or more entities found by a [`selector`]. + /// + /// [`selector`]: https://minecraft.wiki/w/Target_selectors + EntityNames { + /// A string containing a [`selector`]. + /// + /// [`selector`]: https://minecraft.wiki/w/Target_selectors + selector: Cow<'static, str>, + /// An optional custom separator used when the selector returns multiple + /// entities. Defaults to the ", " text with gray color. + #[serde(default, skip_serializing_if = "Option::is_none")] + separator: Option, + }, + /// Displays the name of the button that is currently bound to a certain + /// configurable control on the client. + Keybind { + /// A [`keybind identifier`], to be displayed as the name of the button + /// that is currently bound to that action. + /// + /// [`keybind identifier`]: https://minecraft.wiki/w/Controls#Configurable_controls + keybind: Cow<'static, str>, + }, + /// Displays NBT values from block entities. + BlockNbt { + block: Cow<'static, str>, + nbt: Cow<'static, str>, + #[serde(default, skip_serializing_if = "Option::is_none")] + interpret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + separator: Option, + }, + /// Displays NBT values from entities. + EntityNbt { + entity: Cow<'static, str>, + nbt: Cow<'static, str>, + #[serde(default, skip_serializing_if = "Option::is_none")] + interpret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + separator: Option, + }, + /// Displays NBT values from command storage. + StorageNbt { + storage: Ident, + nbt: Cow<'static, str>, + #[serde(default, skip_serializing_if = "Option::is_none")] + interpret: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + separator: Option, + }, +} + +/// Scoreboard value. +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +pub struct ScoreboardValueContent { + /// The name of the score holder whose score should be displayed. This + /// can be a [`selector`] or an explicit name. + /// + /// [`selector`]: https://minecraft.wiki/w/Target_selectors + pub name: Cow<'static, str>, + /// The internal name of the objective to display the player's score in. + pub objective: Cow<'static, str>, + /// If present, this value is displayed regardless of what the score + /// would have been. + #[serde(default, skip_serializing_if = "Option::is_none")] + pub value: Option>, +} + +/// Action to take on click of the text. +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(tag = "action", content = "value", rename_all = "snake_case")] +pub enum ClickEvent { + /// Opens an URL + OpenUrl(Cow<'static, str>), + /// Only usable by internal servers for security reasons. + OpenFile(Cow<'static, str>), + /// Sends a chat command. Doesn't actually have to be a command, can be a + /// normal chat message. + RunCommand(Cow<'static, str>), + /// Replaces the contents of the chat box with the text, not necessarily a + /// command. + SuggestCommand(Cow<'static, str>), + /// Only usable within written books. Changes the page of the book. Indexing + /// starts at 1. + ChangePage(i32), + /// Copies the given text to clipboard + CopyToClipboard(Cow<'static, str>), +} + +/// Action to take when mouse-hovering on the text. +#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)] +#[serde(tag = "action", content = "contents", rename_all = "snake_case")] +#[allow(clippy::enum_variant_names)] +pub enum HoverEvent { + /// Displays a tooltip with the given text. + ShowText(Text), + /// Shows an item. + ShowItem { + /// Resource identifier of the item + id: Ident, + /// Number of the items in the stack + count: Option, + /// NBT information about the item (sNBT format) + tag: Cow<'static, str>, + }, + /// Shows an entity. + ShowEntity { + /// The entity's UUID + id: Uuid, + /// Resource identifier of the entity + #[serde(rename = "type")] + #[serde(default, skip_serializing_if = "Option::is_none")] + kind: Option, + /// Optional custom name for the entity + #[serde(default, skip_serializing_if = "Option::is_none")] + name: Option, + }, +} + +/// The font of the text. +#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)] +pub enum Font { + /// The default font. + #[serde(rename = "minecraft:default")] + Default, + /// Unicode font. + #[serde(rename = "minecraft:uniform")] + Uniform, + /// Enchanting table font. + #[serde(rename = "minecraft:alt")] + Alt, +} + +#[allow(clippy::self_named_constructors)] +impl Text { + /// Constructs a new plain text object. + pub fn text(plain: impl Into>) -> Self { + Self(Box::new(TextInner { + content: TextContent::Text { text: plain.into() }, + ..Default::default() + })) + } + + /// Create translated text based on the given translation key, with extra + /// text components to be inserted into the slots of the translation text. + pub fn translate(key: impl Into>, with: impl Into>) -> Self { + Self(Box::new(TextInner { + content: TextContent::Translate { + translate: key.into(), + with: with.into(), + }, + ..Default::default() + })) + } + + /// Create a score from the scoreboard with an optional custom value. + pub fn score( + name: impl Into>, + objective: impl Into>, + value: Option>, + ) -> Self { + Self(Box::new(TextInner { + content: TextContent::ScoreboardValue { + score: ScoreboardValueContent { + name: name.into(), + objective: objective.into(), + value, + }, + }, + ..Default::default() + })) + } + + /// Creates a text component for selecting entity names with an optional + /// custom separator. + pub fn selector(selector: impl Into>, separator: Option) -> Self { + Self(Box::new(TextInner { + content: TextContent::EntityNames { + selector: selector.into(), + separator, + }, + ..Default::default() + })) + } + + /// Creates a text component for a keybind. The keybind should be a valid + /// [`keybind identifier`]. + /// + /// [`keybind identifier`]: https://minecraft.wiki/w/Controls#Configurable_controls + pub fn keybind(keybind: impl Into>) -> Self { + Self(Box::new(TextInner { + content: TextContent::Keybind { + keybind: keybind.into(), + }, + ..Default::default() + })) + } + + /// Creates a text component for a block NBT tag. + pub fn block_nbt( + block: impl Into>, + nbt: impl Into>, + interpret: Option, + separator: Option, + ) -> Self { + Self(Box::new(TextInner { + content: TextContent::BlockNbt { + block: block.into(), + nbt: nbt.into(), + interpret, + separator, + }, + ..Default::default() + })) + } + + /// Creates a text component for an entity NBT tag. + pub fn entity_nbt( + entity: impl Into>, + nbt: impl Into>, + interpret: Option, + separator: Option, + ) -> Self { + Self(Box::new(TextInner { + content: TextContent::EntityNbt { + entity: entity.into(), + nbt: nbt.into(), + interpret, + separator, + }, + ..Default::default() + })) + } + + /// Creates a text component for a command storage NBT tag. + pub fn storage_nbt( + storage: impl Into, + nbt: impl Into>, + interpret: Option, + separator: Option, + ) -> Self { + Self(Box::new(TextInner { + content: TextContent::StorageNbt { + storage: storage.into(), + nbt: nbt.into(), + interpret, + separator, + }, + ..Default::default() + })) + } + + /// Returns `true` if the text contains no characters. Returns `false` + /// otherwise. + pub fn is_empty(&self) -> bool { + for extra in &self.0.extra { + if !extra.is_empty() { + return false; + } + } + + match &self.0.content { + TextContent::Text { text } => text.is_empty(), + TextContent::Translate { translate, .. } => translate.is_empty(), + TextContent::ScoreboardValue { score } => { + let ScoreboardValueContent { + name, objective, .. + } = score; + + name.is_empty() || objective.is_empty() + } + TextContent::EntityNames { selector, .. } => selector.is_empty(), + TextContent::Keybind { keybind } => keybind.is_empty(), + TextContent::BlockNbt { nbt, .. } => nbt.is_empty(), + TextContent::EntityNbt { nbt, .. } => nbt.is_empty(), + TextContent::StorageNbt { nbt, .. } => nbt.is_empty(), + } + } + + /// Converts the [`Text`] object to a plain string with the [legacy formatting (`§` and format codes)](https://wiki.vg/Chat#Old_system) + /// + /// Removes everything that can't be represented with a `§` and a modifier. + /// Any colors not on the [the legacy color list](https://wiki.vg/Chat#Colors) will be replaced with their closest equivalent. + pub fn to_legacy_lossy(&self) -> String { + // For keeping track of the currently active modifiers + #[derive(Default, Clone)] + struct Modifiers { + obfuscated: Option, + bold: Option, + strikethrough: Option, + underlined: Option, + italic: Option, + color: Option, + } + + impl Modifiers { + // Writes all active modifiers to a String as `§` + fn write(&self, output: &mut String) { + if let Some(color) = self.color { + let code = match color { + Color::Rgb(rgb) => rgb.to_named_lossy().hex_digit(), + Color::Named(normal) => normal.hex_digit(), + Color::Reset => return, + }; + + output.push('§'); + output.push(code); + } + if let Some(true) = self.obfuscated { + output.push_str("§k"); + } + if let Some(true) = self.bold { + output.push_str("§l"); + } + if let Some(true) = self.strikethrough { + output.push_str("§m"); + } + if let Some(true) = self.underlined { + output.push_str("§n"); + } + if let Some(true) = self.italic { + output.push_str("§o"); + } + } + // Merges 2 Modifiers. The result is what you would get if you applied them both + // sequentially. + fn add(&self, other: &Self) -> Self { + Self { + obfuscated: other.obfuscated.or(self.obfuscated), + bold: other.bold.or(self.bold), + strikethrough: other.strikethrough.or(self.strikethrough), + underlined: other.underlined.or(self.underlined), + italic: other.italic.or(self.italic), + color: other.color.or(self.color), + } + } + } + + fn to_legacy_inner(this: &Text, result: &mut String, mods: &mut Modifiers) { + let new_mods = Modifiers { + obfuscated: this.0.obfuscated, + bold: this.0.bold, + strikethrough: this.0.strikethrough, + underlined: this.0.underlined, + italic: this.0.italic, + color: this.0.color, + }; + + // If any modifiers were removed + if [ + this.0.obfuscated, + this.0.bold, + this.0.strikethrough, + this.0.underlined, + this.0.italic, + ] + .contains(&Some(false)) + || this.0.color == Some(Color::Reset) + { + // Reset and print sum of old and new modifiers + result.push_str("§r"); + mods.add(&new_mods).write(result); + } else { + // Print only new modifiers + new_mods.write(result); + } + + *mods = mods.add(&new_mods); + + if let TextContent::Text { text } = &this.0.content { + result.push_str(text); + } + + for child in &this.0.extra { + to_legacy_inner(child, result, mods); + } + } + + let mut result = String::new(); + let mut mods = Modifiers::default(); + to_legacy_inner(self, &mut result, &mut mods); + + result + } +} + +impl Deref for Text { + type Target = TextInner; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for Text { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +impl> ops::Add for Text { + type Output = Self; + + fn add(self, rhs: T) -> Self::Output { + self.add_child(rhs) + } +} + +impl> ops::AddAssign for Text { + fn add_assign(&mut self, rhs: T) { + self.extra.push(rhs.into_text()); + } +} + +impl<'a> From for Cow<'a, Text> { + fn from(value: Text) -> Self { + Cow::Owned(value) + } +} + +impl<'a> From<&'a Text> for Cow<'a, Text> { + fn from(value: &'a Text) -> Self { + Cow::Borrowed(value) + } +} + +impl FromStr for Text { + type Err = serde_json::error::Error; + + fn from_str(s: &str) -> Result { + if s.is_empty() { + Ok(Text::default()) + } else { + serde_json::from_str(s) + } + } +} + +impl From for String { + fn from(value: Text) -> Self { + format!("{value}") + } +} + +impl From for Value { + fn from(value: Text) -> Self { + Value::String(value.into()) + } +} + +impl fmt::Debug for Text { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl fmt::Display for Text { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let string = if f.alternate() { + serde_json::to_string_pretty(self) + } else { + serde_json::to_string(self) + } + .map_err(|_| fmt::Error)?; + + f.write_str(&string) + } +} + +impl Default for TextContent { + fn default() -> Self { + Self::Text { text: "".into() } + } +} + +impl<'de> Deserialize<'de> for Text { + fn deserialize>(deserializer: D) -> Result { + struct TextVisitor; + + impl<'de> Visitor<'de> for TextVisitor { + type Value = Text; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + write!(formatter, "a text component data type") + } + + fn visit_bool(self, v: bool) -> Result { + Ok(Text::text(v.to_string())) + } + + fn visit_i64(self, v: i64) -> Result { + Ok(Text::text(v.to_string())) + } + + fn visit_u64(self, v: u64) -> Result { + Ok(Text::text(v.to_string())) + } + + fn visit_f64(self, v: f64) -> Result { + Ok(Text::text(v.to_string())) + } + + fn visit_str(self, v: &str) -> Result { + Ok(Text::text(v.to_string())) + } + + fn visit_string(self, v: String) -> Result { + Ok(Text::text(v)) + } + + fn visit_seq>(self, mut seq: A) -> Result { + let Some(mut res) = seq.next_element()? else { + return Ok(Text::default()); + }; + + while let Some(child) = seq.next_element::()? { + res += child; + } + + Ok(res) + } + + fn visit_map>(self, map: A) -> Result { + use de::value::MapAccessDeserializer; + + Ok(Text(Box::new(TextInner::deserialize( + MapAccessDeserializer::new(map), + )?))) + } + } + + deserializer.deserialize_any(TextVisitor) + } +} diff --git a/vendor/valence/crates/valence_text/src/tests.rs b/vendor/valence/crates/valence_text/src/tests.rs new file mode 100644 index 00000000..28b03729 --- /dev/null +++ b/vendor/valence/crates/valence_text/src/tests.rs @@ -0,0 +1,136 @@ +use valence_ident::ident; + +use super::*; + +#[test] +fn text_round_trip() { + let before = "foo".color(Color::RED).bold() + + ("bar".obfuscated().color(Color::YELLOW) + + "baz".underlined().not_bold().italic().color(Color::BLACK)); + + let json = format!("{before:#}"); + + let after = Text::from_str(&json).unwrap(); + + println!("==== Before ====\n"); + println!("{before:#?}"); + println!("==== After ====\n"); + println!("{after:#?}"); + + assert_eq!(before, after); + assert_eq!(before.to_string(), after.to_string()); +} + +#[test] +fn non_object_data_types() { + let input = r#"["foo", true, false, 1.9E10, 9999]"#; + let txt: Text = serde_json::from_str(input).unwrap(); + + assert_eq!(txt, "foo".into_text() + true + false + 1.9E10 + 9999); +} + +#[test] +fn translate() { + let txt = Text::translate( + "chat.type.advancement.task", + ["arg1".into_text(), "arg2".into_text()], + ); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + assert_eq!( + serialized, + r#"{"translate":"chat.type.advancement.task","with":[{"text":"arg1"},{"text":"arg2"}]}"# + ); + assert_eq!(txt, deserialized); +} + +#[test] +fn score() { + let txt = Text::score("foo", "bar", Some(Cow::from("baz"))); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + assert_eq!( + serialized, + r#"{"score":{"name":"foo","objective":"bar","value":"baz"}}"# + ); + assert_eq!(txt, deserialized); +} + +#[test] +fn selector() { + let separator = Text::text("bar").color(Color::RED).bold(); + let txt = Text::selector("foo", Some(separator)); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + assert_eq!( + serialized, + r#"{"selector":"foo","separator":{"text":"bar","color":"red","bold":true}}"# + ); + assert_eq!(txt, deserialized); +} + +#[test] +fn keybind() { + let txt = Text::keybind("foo"); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + assert_eq!(serialized, r#"{"keybind":"foo"}"#); + assert_eq!(txt, deserialized); +} + +#[test] +fn block_nbt() { + let txt = Text::block_nbt("foo", "bar", Some(true), Some("baz".into_text())); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + let expected = r#"{"block":"foo","nbt":"bar","interpret":true,"separator":{"text":"baz"}}"#; + assert_eq!(serialized, expected); + assert_eq!(txt, deserialized); +} + +#[test] +fn entity_nbt() { + let txt = Text::entity_nbt("foo", "bar", Some(true), Some("baz".into_text())); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + let expected = r#"{"entity":"foo","nbt":"bar","interpret":true,"separator":{"text":"baz"}}"#; + assert_eq!(serialized, expected); + assert_eq!(txt, deserialized); +} + +#[test] +fn storage_nbt() { + let txt = Text::storage_nbt(ident!("foo"), "bar", Some(true), Some("baz".into_text())); + let serialized = txt.to_string(); + let deserialized = Text::from_str(&serialized).unwrap(); + let expected = + r#"{"storage":"minecraft:foo","nbt":"bar","interpret":true,"separator":{"text":"baz"}}"#; + assert_eq!(serialized, expected); + assert_eq!(txt, deserialized); +} + +#[test] +fn text_to_legacy_lossy() { + let text = "Heavily formatted green text\n" + .bold() + .italic() + .strikethrough() + .underlined() + .obfuscated() + .color(Color::GREEN) + + "Lightly formatted red text\n" + .not_bold() + .not_strikethrough() + .not_obfuscated() + .color(Color::RED) + + "Not formatted blue text" + .not_italic() + .not_underlined() + .color(Color::BLUE); + + assert_eq!( + text.to_legacy_lossy(), + "§a§k§l§m§n§oHeavily formatted green text\n§r§c§n§oLightly formatted red text\n§r§9Not \ + formatted blue text" + ); +} diff --git a/vendor/valence/crates/valence_weather/Cargo.toml b/vendor/valence/crates/valence_weather/Cargo.toml new file mode 100644 index 00000000..18fc33ae --- /dev/null +++ b/vendor/valence/crates/valence_weather/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "valence_weather" +description = "Weather support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +valence_server.workspace = true +bevy_ecs.workspace = true +bevy_app.workspace = true +derive_more.workspace = true \ No newline at end of file diff --git a/vendor/valence/crates/valence_weather/README.md b/vendor/valence/crates/valence_weather/README.md new file mode 100644 index 00000000..fe5b850c --- /dev/null +++ b/vendor/valence/crates/valence_weather/README.md @@ -0,0 +1,3 @@ +# valence_weather + +Support for weather effects in layers. (rain, thunder, etc.) diff --git a/vendor/valence/crates/valence_weather/src/lib.rs b/vendor/valence/crates/valence_weather/src/lib.rs new file mode 100644 index 00000000..49fbe6b4 --- /dev/null +++ b/vendor/valence/crates/valence_weather/src/lib.rs @@ -0,0 +1,133 @@ +#![doc = include_str!("../README.md")] +#![allow(clippy::type_complexity)] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +use valence_server::client::{Client, FlushPacketsSet, UpdateClientsSet, VisibleChunkLayer}; +use valence_server::protocol::packets::play::game_state_change_s2c::GameEventKind; +use valence_server::protocol::packets::play::GameStateChangeS2c; +use valence_server::protocol::WritePacket; +use valence_server::ChunkLayer; + +pub struct WeatherPlugin; + +impl Plugin for WeatherPlugin { + fn build(&self, app: &mut App) { + app.add_systems( + PostUpdate, + ( + init_weather_on_layer_join, + change_client_rain_level, + change_client_thunder_level, + ) + .before(FlushPacketsSet), + ) + .add_systems( + PostUpdate, + (change_layer_rain_level, change_layer_thunder_level).before(UpdateClientsSet), + ); + } +} + +/// Bundle containing rain and thunder components. `valence_weather` allows this +/// to be added to clients and chunk layer entities. +#[derive(Bundle, Default, PartialEq, PartialOrd)] +pub struct WeatherBundle { + pub rain: Rain, + pub thunder: Thunder, +} + +/// Component containing the rain level. Valid values are in \[0, 1] with 0 +/// being no rain and 1 being full rain. +#[derive(Component, Default, PartialEq, PartialOrd, Deref, DerefMut)] +pub struct Rain(pub f32); + +/// Component containing the thunder level. Valid values are in \[0, 1] with 0 +/// being no rain and 1 being full rain. +#[derive(Component, Default, PartialEq, PartialOrd, Deref, DerefMut)] +pub struct Thunder(pub f32); + +fn init_weather_on_layer_join( + mut clients: Query<(&mut Client, &VisibleChunkLayer), Changed>, + layers: Query<(Option<&Rain>, Option<&Thunder>), With>, +) { + for (mut client, visible_chunk_layer) in &mut clients { + if let Ok((rain, thunder)) = layers.get(visible_chunk_layer.0) { + if let Some(rain) = rain { + if rain.0 != 0.0 { + client.write_packet(&GameStateChangeS2c { + kind: GameEventKind::RainLevelChange, + value: rain.0, + }); + } + } + + if let Some(thunder) = thunder { + if thunder.0 != 0.0 { + client.write_packet(&GameStateChangeS2c { + kind: GameEventKind::ThunderLevelChange, + value: thunder.0, + }); + } + } + } + } +} + +fn change_layer_rain_level( + mut layers: Query<(&mut ChunkLayer, &Rain), (Changed, Without)>, +) { + for (mut layer, rain) in &mut layers { + layer.write_packet(&GameStateChangeS2c { + kind: GameEventKind::RainLevelChange, + value: rain.0, + }); + } +} + +fn change_layer_thunder_level( + mut layers: Query<(&mut ChunkLayer, &Thunder), (Changed, Without)>, +) { + for (mut layer, thunder) in &mut layers { + layer.write_packet(&GameStateChangeS2c { + kind: GameEventKind::ThunderLevelChange, + value: thunder.0, + }); + } +} + +fn change_client_rain_level(mut clients: Query<(&mut Client, &Rain), Changed>) { + for (mut client, rain) in &mut clients { + client.write_packet(&GameStateChangeS2c { + kind: GameEventKind::RainLevelChange, + value: rain.0, + }); + } +} + +fn change_client_thunder_level(mut clients: Query<(&mut Client, &Thunder), Changed>) { + for (mut client, thunder) in &mut clients { + client.write_packet(&GameStateChangeS2c { + kind: GameEventKind::RainLevelChange, + value: thunder.0, + }); + } +} diff --git a/vendor/valence/crates/valence_weather/src/packet.rs b/vendor/valence/crates/valence_weather/src/packet.rs new file mode 100644 index 00000000..e69de29b diff --git a/vendor/valence/crates/valence_world_border/Cargo.toml b/vendor/valence/crates/valence_world_border/Cargo.toml new file mode 100644 index 00000000..d1dc00aa --- /dev/null +++ b/vendor/valence/crates/valence_world_border/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "valence_world_border" +description = "World border support for Valence" +readme = "README.md" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true + +[dependencies] +bevy_app.workspace = true +bevy_ecs.workspace = true +derive_more.workspace = true +valence_server.workspace = true diff --git a/vendor/valence/crates/valence_world_border/README.md b/vendor/valence/crates/valence_world_border/README.md new file mode 100644 index 00000000..985186e8 --- /dev/null +++ b/vendor/valence/crates/valence_world_border/README.md @@ -0,0 +1,29 @@ +# valence_world_border + +Contains the plugin for working with Minecraft's [world border](https://minecraft.wiki/w/World_border). + +To enable world border functionality for a layer, insert the [`WorldBorderBundle`] component on the layer entity. +Note that the layer entity must have the [`ChunkLayer`] component for this to work. + +## Example + +```rust +use bevy_ecs::prelude::*; +use valence_world_border::*; + +fn example_system(mut world_borders: Query<(&mut WorldBorderCenter, &mut WorldBorderLerp)>) { + for (mut center, mut lerp) in &mut world_borders { + // Change the center position of the world border. + center.x = 123.0; + center.z = 456.0; + + // Change the diameter of the world border. + // If you want to change the diameter without interpolating, stop after this. + lerp.target_diameter = 100.0; + + // Have the world border linearly interpolate its diameter from 50 to 100 over 200 ticks. + // `current_diameter` and `remaining_ticks` will change automatically, but you can modify their values at any time. + lerp.current_diameter = 50.0; + lerp.remaining_ticks = 200; + } +} diff --git a/vendor/valence/crates/valence_world_border/src/lib.rs b/vendor/valence/crates/valence_world_border/src/lib.rs new file mode 100644 index 00000000..16ffae51 --- /dev/null +++ b/vendor/valence/crates/valence_world_border/src/lib.rs @@ -0,0 +1,257 @@ +#![doc = include_str!("../README.md")] +#![allow(clippy::type_complexity)] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use derive_more::{Deref, DerefMut}; +use valence_server::client::{Client, UpdateClientsSet, VisibleChunkLayer}; +use valence_server::protocol::packets::play::{ + WorldBorderCenterChangedS2c, WorldBorderInitializeS2c, WorldBorderInterpolateSizeS2c, + WorldBorderSizeChangedS2c, WorldBorderWarningBlocksChangedS2c, + WorldBorderWarningTimeChangedS2c, +}; +use valence_server::protocol::WritePacket; +use valence_server::{ChunkLayer, Server}; + +// https://minecraft.wiki/w/World_border +pub const DEFAULT_PORTAL_LIMIT: i32 = 29999984; +pub const DEFAULT_DIAMETER: f64 = (DEFAULT_PORTAL_LIMIT * 2) as f64; +pub const DEFAULT_WARN_TIME: i32 = 15; +pub const DEFAULT_WARN_BLOCKS: i32 = 5; + +pub struct WorldBorderPlugin; + +#[derive(SystemSet, Copy, Clone, PartialEq, Eq, Hash, Debug)] +pub struct UpdateWorldBorderSet; + +impl Plugin for WorldBorderPlugin { + fn build(&self, app: &mut App) { + app.configure_sets(PostUpdate, UpdateWorldBorderSet.before(UpdateClientsSet)) + .add_systems( + PostUpdate, + ( + init_world_border_for_new_clients, + tick_world_border_lerp, + change_world_border_center, + change_world_border_warning_blocks, + change_world_border_warning_time, + change_world_border_portal_tp_boundary, + ) + .in_set(UpdateWorldBorderSet), + ); + } +} + +/// A bundle containing necessary components to enable world border +/// functionality. Add this to an entity with the [`ChunkLayer`] component. +#[derive(Bundle, Default, Debug)] +pub struct WorldBorderBundle { + pub center: WorldBorderCenter, + pub lerp: WorldBorderLerp, + pub portal_teleport_boundary: WorldBorderPortalTpBoundary, + pub warn_time: WorldBorderWarnTime, + pub warn_blocks: WorldBorderWarnBlocks, +} + +#[derive(Component, Default, Copy, Clone, PartialEq, Debug)] +pub struct WorldBorderCenter { + pub x: f64, + pub z: f64, +} + +impl WorldBorderCenter { + pub fn set(&mut self, x: f64, z: f64) { + self.x = x; + self.z = z; + } +} + +/// Component containing information to linearly interpolate the world border. +/// Contains the world border's diameter. +#[derive(Component, Clone, Copy, Debug)] +pub struct WorldBorderLerp { + /// The current diameter of the world border. This is updated automatically + /// as the remaining ticks count down. + pub current_diameter: f64, + /// The desired diameter of the world border after lerping has finished. + /// Modify this if you want to change the world border diameter. + pub target_diameter: f64, + /// Server ticks until the target diameter is reached. This counts down + /// automatically. + pub remaining_ticks: u64, +} +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Deref, DerefMut)] +pub struct WorldBorderWarnTime(pub i32); + +impl Default for WorldBorderWarnTime { + fn default() -> Self { + Self(DEFAULT_WARN_TIME) + } +} + +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Deref, DerefMut)] +pub struct WorldBorderWarnBlocks(pub i32); + +impl Default for WorldBorderWarnBlocks { + fn default() -> Self { + Self(DEFAULT_WARN_BLOCKS) + } +} + +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Deref, DerefMut)] +pub struct WorldBorderPortalTpBoundary(pub i32); + +impl Default for WorldBorderPortalTpBoundary { + fn default() -> Self { + Self(DEFAULT_PORTAL_LIMIT) + } +} + +impl Default for WorldBorderLerp { + fn default() -> Self { + Self { + current_diameter: DEFAULT_DIAMETER, + target_diameter: DEFAULT_DIAMETER, + remaining_ticks: 0, + } + } +} + +fn init_world_border_for_new_clients( + mut clients: Query<(&mut Client, &VisibleChunkLayer), Changed>, + wbs: Query<( + &WorldBorderCenter, + &WorldBorderLerp, + &WorldBorderPortalTpBoundary, + &WorldBorderWarnTime, + &WorldBorderWarnBlocks, + )>, + server: Res, +) { + for (mut client, layer) in &mut clients { + if let Ok((center, lerp, portal_tp_boundary, warn_time, warn_blocks)) = wbs.get(layer.0) { + let millis = lerp.remaining_ticks as i64 * 1000 / server.tick_rate().get() as i64; + + client.write_packet(&WorldBorderInitializeS2c { + x: center.x, + z: center.z, + old_diameter: lerp.current_diameter, + new_diameter: lerp.target_diameter, + duration_millis: millis.into(), + portal_teleport_boundary: portal_tp_boundary.0.into(), + warning_blocks: warn_blocks.0.into(), + warning_time: warn_time.0.into(), + }); + } + } +} + +fn tick_world_border_lerp( + mut wbs: Query<(&mut ChunkLayer, &mut WorldBorderLerp)>, + server: Res, +) { + for (mut layer, mut lerp) in &mut wbs { + if lerp.is_changed() { + if lerp.remaining_ticks == 0 { + layer.write_packet(&WorldBorderSizeChangedS2c { + diameter: lerp.target_diameter, + }); + + lerp.current_diameter = lerp.target_diameter; + } else { + let millis = lerp.remaining_ticks as i64 * 1000 / server.tick_rate().get() as i64; + + layer.write_packet(&WorldBorderInterpolateSizeS2c { + old_diameter: lerp.current_diameter, + new_diameter: lerp.target_diameter, + duration_millis: millis.into(), + }); + } + } + + if lerp.remaining_ticks > 0 { + let diff = lerp.target_diameter - lerp.current_diameter; + lerp.current_diameter += diff / lerp.remaining_ticks as f64; + + lerp.remaining_ticks -= 1; + } + } +} + +fn change_world_border_center( + mut wbs: Query<(&mut ChunkLayer, &WorldBorderCenter), Changed>, +) { + for (mut layer, center) in &mut wbs { + layer.write_packet(&WorldBorderCenterChangedS2c { + x_pos: center.x, + z_pos: center.z, + }); + } +} + +fn change_world_border_warning_blocks( + mut wbs: Query<(&mut ChunkLayer, &WorldBorderWarnBlocks), Changed>, +) { + for (mut layer, warn_blocks) in &mut wbs { + layer.write_packet(&WorldBorderWarningBlocksChangedS2c { + warning_blocks: warn_blocks.0.into(), + }); + } +} + +fn change_world_border_warning_time( + mut wbs: Query<(&mut ChunkLayer, &WorldBorderWarnTime), Changed>, +) { + for (mut layer, warn_time) in &mut wbs { + layer.write_packet(&WorldBorderWarningTimeChangedS2c { + warning_time: warn_time.0.into(), + }); + } +} + +fn change_world_border_portal_tp_boundary( + mut wbs: Query< + ( + &mut ChunkLayer, + &WorldBorderCenter, + &WorldBorderLerp, + &WorldBorderPortalTpBoundary, + &WorldBorderWarnTime, + &WorldBorderWarnBlocks, + ), + Changed, + >, + server: Res, +) { + for (mut layer, center, lerp, portal_tp_boundary, warn_time, warn_blocks) in &mut wbs { + let millis = lerp.remaining_ticks as i64 * 1000 / server.tick_rate().get() as i64; + + layer.write_packet(&WorldBorderInitializeS2c { + x: center.x, + z: center.z, + old_diameter: lerp.current_diameter, + new_diameter: lerp.target_diameter, + duration_millis: millis.into(), + portal_teleport_boundary: portal_tp_boundary.0.into(), + warning_blocks: warn_blocks.0.into(), + warning_time: warn_time.0.into(), + }); + } +} diff --git a/vendor/valence/examples/advancement.rs b/vendor/valence/examples/advancement.rs new file mode 100644 index 00000000..dd46800d --- /dev/null +++ b/vendor/valence/examples/advancement.rs @@ -0,0 +1,314 @@ +use std::collections::HashMap; + +use valence::advancement::bevy_hierarchy::{BuildChildren, Children, Parent}; +use valence::advancement::ForceTabUpdate; +use valence::prelude::*; + +#[derive(Component)] +struct RootCriteria; + +#[derive(Component)] +struct Root2Criteria; + +#[derive(Component)] +struct RootAdvancement; + +#[derive(Component)] +struct RootCriteriaDone(bool); + +#[derive(Component)] +struct TabChangeCount(u8); + +#[derive(Resource, Default)] +struct ClientSave(HashMap); + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .init_resource::() + .add_systems(Startup, setup) + .add_systems( + Update, + ( + load_clients, + apply_deferred.after(load_clients).before(init_advancements), + init_clients, + init_advancements, + sneak, + tab_change, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer.chunk.set_block([x, 64, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); + + let root_criteria = commands + .spawn(( + AdvancementCriteria::new(ident!("custom:root_criteria").into()), + RootCriteria, + )) + .id(); + + let root_advancement = commands + .spawn(( + AdvancementBundle { + advancement: Advancement::new(ident!("custom:root").into()), + requirements: AdvancementRequirements(vec![vec![root_criteria]]), + cached_bytes: Default::default(), + }, + AdvancementDisplay { + title: "Root".into(), + description: "Toggles when you sneak".into(), + icon: ItemStack::new(ItemKind::Stone, 1, None), + frame_type: AdvancementFrameType::Task, + show_toast: true, + hidden: false, + background_texture: Some(ident!("textures/block/stone.png").into()), + x_coord: 0.0, + y_coord: 0.0, + }, + RootAdvancement, + )) + .add_child(root_criteria) + .id(); + + commands + .spawn(( + AdvancementBundle { + advancement: Advancement::new(ident!("custom:first").into()), + requirements: AdvancementRequirements::default(), + cached_bytes: Default::default(), + }, + AdvancementDisplay { + title: "First".into(), + description: "First advancement".into(), + icon: ItemStack::new(ItemKind::OakWood, 1, None), + frame_type: AdvancementFrameType::Task, + show_toast: false, + hidden: false, + background_texture: None, + x_coord: 1.0, + y_coord: -0.5, + }, + )) + .set_parent(root_advancement); + + commands + .spawn(( + AdvancementBundle { + advancement: Advancement::new(ident!("custom:second").into()), + requirements: AdvancementRequirements::default(), + cached_bytes: Default::default(), + }, + AdvancementDisplay { + title: "Second".into(), + description: "Second advancement".into(), + icon: ItemStack::new(ItemKind::AcaciaWood, 1, None), + frame_type: AdvancementFrameType::Task, + show_toast: false, + hidden: false, + background_texture: None, + x_coord: 1.0, + y_coord: 0.5, + }, + )) + .set_parent(root_advancement); + + let root2_criteria = commands + .spawn(( + AdvancementCriteria::new(ident!("custom:root2_criteria").into()), + Root2Criteria, + )) + .id(); + + commands + .spawn(( + AdvancementBundle { + advancement: Advancement::new(ident!("custom:root2").into()), + requirements: AdvancementRequirements(vec![vec![root2_criteria]]), + cached_bytes: Default::default(), + }, + AdvancementDisplay { + title: "Root2".into(), + description: "Go to this tab 5 times to earn this advancement".into(), + icon: ItemStack::new(ItemKind::IronSword, 1, None), + frame_type: AdvancementFrameType::Challenge, + show_toast: false, + hidden: false, + background_texture: Some(Ident::new("textures/block/andesite.png").unwrap()), + x_coord: 0.0, + y_coord: 0.0, + }, + )) + .add_child(root2_criteria); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.5, 65.0, 0.5]); + *game_mode = GameMode::Creative; + } +} + +fn load_clients( + mut commands: Commands, + clients: Query<(Entity, &UniqueId), Added>, + mut client_save: ResMut, +) { + for (client, uuid) in clients.iter() { + let (root_criteria_done, tab_change_count) = + client_save.0.entry(uuid.0).or_insert((false, 0)); + + commands.entity(client).insert(( + RootCriteriaDone(*root_criteria_done), + TabChangeCount(*tab_change_count), + )); + } +} + +fn init_advancements( + mut clients: Query< + ( + &mut AdvancementClientUpdate, + &RootCriteriaDone, + &TabChangeCount, + ), + Added, + >, + root_advancement_query: Query, With)>, + children_query: Query<&Children>, + advancement_check_query: Query<(), With>, + root2_criteria: Query>, + root_criteria: Query>, +) { + let root_c = root_criteria.single(); + let root2_c = root2_criteria.single(); + for (mut advancement_client_update, root_criteria, tab_change) in clients.iter_mut() { + for root_advancement in root_advancement_query.iter() { + advancement_client_update.send_advancements( + root_advancement, + &children_query, + &advancement_check_query, + ); + if root_criteria.0 { + advancement_client_update.criteria_done(root_c); + } + if tab_change.0 > 5 { + advancement_client_update.criteria_done(root2_c); + } + } + } +} + +fn sneak( + mut sneaking: EventReader, + mut client: Query<(&mut AdvancementClientUpdate, &mut RootCriteriaDone)>, + root_criteria: Query>, + client_uuid: Query<&UniqueId>, + mut client_save: ResMut, +) { + let root_criteria = root_criteria.single(); + for sneaking in sneaking.read() { + if sneaking.state == SneakState::Stop { + continue; + } + let Ok((mut advancement_client_update, mut root_criteria_done)) = + client.get_mut(sneaking.client) + else { + continue; + }; + root_criteria_done.0 = !root_criteria_done.0; + match root_criteria_done.0 { + true => advancement_client_update.criteria_done(root_criteria), + false => advancement_client_update.criteria_undone(root_criteria), + } + client_save + .0 + .get_mut(&client_uuid.get(sneaking.client).unwrap().0) + .unwrap() + .0 = root_criteria_done.0; + } +} + +fn tab_change( + mut tab_change: EventReader, + mut client: Query<(&mut AdvancementClientUpdate, &mut TabChangeCount)>, + root2_criteria: Query>, + root: Query>, + client_uuid: Query<&UniqueId>, + mut client_save: ResMut, +) { + let root2_criteria = root2_criteria.single(); + let root = root.single(); + for tab_change in tab_change.read() { + let Ok((mut advancement_client_update, mut tab_change_count)) = + client.get_mut(tab_change.client) + else { + continue; + }; + if let Some(ref opened) = tab_change.opened_tab { + if opened.as_str() == "custom:root2" { + tab_change_count.0 += 1; + } else { + continue; + } + } else { + continue; + } + if tab_change_count.0 == 5 { + advancement_client_update.criteria_done(root2_criteria); + } else if tab_change_count.0 >= 10 { + advancement_client_update.force_tab_update = ForceTabUpdate::Spec(root); + } + client_save + .0 + .get_mut(&client_uuid.get(tab_change.client).unwrap().0) + .unwrap() + .1 = tab_change_count.0; + } +} diff --git a/vendor/valence/examples/anvil_loading.rs b/vendor/valence/examples/anvil_loading.rs new file mode 100644 index 00000000..d6245721 --- /dev/null +++ b/vendor/valence/examples/anvil_loading.rs @@ -0,0 +1,158 @@ +#![allow(clippy::type_complexity)] + +use std::path::PathBuf; + +use clap::Parser; +use valence::abilities::{FlyingSpeed, FovModifier, PlayerAbilitiesFlags}; +use valence::message::SendMessage; +use valence::prelude::*; +use valence_anvil::{AnvilLevel, ChunkLoadEvent, ChunkLoadStatus}; + +const SPAWN_POS: DVec3 = DVec3::new(0.0, 256.0, 0.0); + +#[derive(Parser, Resource)] +#[clap(author, version, about)] +struct Cli { + /// The path to a Minecraft world save containing a `region` subdirectory. + path: PathBuf, +} + +pub fn main() { + let cli = Cli::parse(); + + if !cli.path.exists() { + eprintln!( + "Directory `{}` does not exist. Exiting.", + cli.path.display() + ); + return; + } + + if !cli.path.is_dir() { + eprintln!("`{}` is not a directory. Exiting.", cli.path.display()); + return; + } + + App::new() + .add_plugins(DefaultPlugins) + .insert_resource(cli) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + despawn_disconnected_clients, + (init_clients, handle_chunk_loads).chain(), + display_loaded_chunk_count, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + dimensions: Res, + biomes: Res, + server: Res, + cli: Res, +) { + let layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + let mut level = AnvilLevel::new(&cli.path, &biomes); + + // Force a 16x16 area of chunks around the origin to be loaded at all times. + // This is similar to "spawn chunks" in vanilla. This isn't necessary for the + // example to function, but it's done to demonstrate that it's possible. + for z in -8..8 { + for x in -8..8 { + let pos = ChunkPos::new(x, z); + + level.ignored_chunks.insert(pos); + level.force_chunk_load(pos); + } + } + + commands.spawn((layer, level)); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + &mut PlayerAbilitiesFlags, + &mut FlyingSpeed, + &mut FovModifier, + ), + Added, + >, + layers: Query>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + mut abilities, + mut flying_speed, + mut fov_modifier, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set(SPAWN_POS); + *game_mode = GameMode::Adventure; + abilities.set_allow_flying(true); + flying_speed.0 = 0.1; + fov_modifier.0 = 0.05; + } +} + +fn handle_chunk_loads( + mut events: EventReader, + mut layers: Query<&mut ChunkLayer, With>, +) { + let mut layer = layers.single_mut(); + + for event in events.read() { + match &event.status { + ChunkLoadStatus::Success { .. } => { + // The chunk was inserted into the world. Nothing for us to do. + } + ChunkLoadStatus::Empty => { + // There's no chunk here so let's insert an empty chunk. If we were doing + // terrain generation we would prepare that here. + layer.insert_chunk(event.pos, UnloadedChunk::new()); + } + ChunkLoadStatus::Failed(e) => { + // Something went wrong. + let errmsg = format!( + "failed to load chunk at ({}, {}): {e:#}", + event.pos.x, event.pos.z + ); + + eprintln!("{errmsg}"); + layer.send_chat_message(errmsg.color(Color::RED)); + + layer.insert_chunk(event.pos, UnloadedChunk::new()); + } + } + } +} + +// Display the number of loaded chunks in the action bar of all clients. +fn display_loaded_chunk_count(mut layers: Query<&mut ChunkLayer>, mut last_count: Local) { + let mut layer = layers.single_mut(); + + let cnt = layer.chunks().count(); + + if *last_count != cnt { + *last_count = cnt; + layer.send_action_bar_message("Chunk Count: ".into_text() + cnt.color(Color::LIGHT_PURPLE)); + } +} diff --git a/vendor/valence/examples/bench_players.rs b/vendor/valence/examples/bench_players.rs new file mode 100644 index 00000000..d5810c81 --- /dev/null +++ b/vendor/valence/examples/bench_players.rs @@ -0,0 +1,102 @@ +#![allow(clippy::type_complexity)] + +use std::time::Instant; + +use valence::client::{VisibleChunkLayer, VisibleEntityLayers}; +use valence::prelude::*; +use valence::ServerSettings; + +const SPAWN_Y: i32 = 64; + +#[derive(Resource)] +struct TickStart(Instant); + +fn main() { + App::new() + .insert_resource(ServerSettings { + compression_threshold: Default::default(), + ..Default::default() + }) + .insert_resource(NetworkSettings { + connection_mode: ConnectionMode::Offline, + max_connections: 50_000, + max_players: 50_000, + ..Default::default() + }) + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(First, record_tick_start_time) + .add_systems(Update, (init_clients, despawn_disconnected_clients)) + .add_systems(Last, print_tick_time) + .run(); +} + +fn record_tick_start_time(mut commands: Commands) { + commands.insert_resource(TickStart(Instant::now())); +} + +fn print_tick_time(server: Res, time: Res, clients: Query<(), With>) { + let tick = server.current_tick(); + if tick % (server.tick_rate().get() as i64 / 2) == 0 { + let client_count = clients.iter().len(); + + let millis = time.0.elapsed().as_secs_f32() * 1000.0; + println!("Tick={tick}, MSPT={millis:.04}ms, Clients={client_count}"); + } +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -50..50 { + for x in -50..50 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} diff --git a/vendor/valence/examples/biomes.rs b/vendor/valence/examples/biomes.rs new file mode 100644 index 00000000..1e9c4439 --- /dev/null +++ b/vendor/valence/examples/biomes.rs @@ -0,0 +1,119 @@ +#![allow(clippy::type_complexity)] + +use rand::seq::IteratorRandom; +use rand::Rng; +use valence::prelude::*; +use valence::registry::biome::BiomeEffects; +use valence_server::BiomePos; + +const SPAWN_Y: i32 = 0; +const SIZE: i32 = 5; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + (init_clients, despawn_disconnected_clients, set_biomes), + ) + .run(); +} + +fn setup( + mut commands: Commands, + dimensions: Res, + mut biomes: ResMut, + server: Res, +) { + let colors = [ + 0xeb4034, 0xffffff, 0xe3d810, 0x1fdbde, 0x1121d1, 0xe60ed7, 0xe68f0e, 0x840ee6, 0x0ee640, + ]; + + biomes.clear(); + + // Client will be sad if you don't have a "plains" biome. + biomes.insert(ident!("plains"), Biome::default()); + + for color in colors { + let name = Ident::new(format!("biome_{color:x}")).unwrap(); + + let biome = Biome { + effects: BiomeEffects { + grass_color: Some(color), + ..Default::default() + }, + ..Default::default() + }; + + biomes.insert(name, biome); + } + + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -SIZE..SIZE { + for x in -SIZE..SIZE { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for x in -SIZE * 16..SIZE * 16 { + for z in -SIZE * 16..SIZE * 16 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn set_biomes(mut layers: Query<&mut ChunkLayer>, biomes: Res) { + let mut layer = layers.single_mut(); + + let mut rng = rand::thread_rng(); + + for _ in 0..10 { + let x = rng.gen_range(-SIZE * 4..SIZE * 4); + let z = rng.gen_range(-SIZE * 4..SIZE * 4); + + let biome = biomes + .iter() + .choose(&mut rng) + .map(|(biome, _, _)| biome) + .unwrap_or_default(); + + layer.set_biome(BiomePos::new(x, SPAWN_Y / 4, z), biome); + } +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} diff --git a/vendor/valence/examples/block_entities.rs b/vendor/valence/examples/block_entities.rs new file mode 100644 index 00000000..54f9b414 --- /dev/null +++ b/vendor/valence/examples/block_entities.rs @@ -0,0 +1,164 @@ +#![allow(clippy::type_complexity)] + +use valence::interact_block::InteractBlockEvent; +use valence::message::ChatMessageEvent; +use valence::nbt::{compound, List}; +use valence::prelude::*; + +const FLOOR_Y: i32 = 64; +const SIGN_POS: [i32; 3] = [3, FLOOR_Y + 1, 2]; +const SKULL_POS: BlockPos = BlockPos::new(3, FLOOR_Y + 1, 3); + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + (event_handler, init_clients, despawn_disconnected_clients), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in 0..16 { + for x in 0..8 { + layer + .chunk + .set_block([x, FLOOR_Y, z], BlockState::WHITE_CONCRETE); + } + } + + layer.chunk.set_block( + [3, FLOOR_Y + 1, 1], + BlockState::CHEST.set(PropName::Facing, PropValue::West), + ); + + layer.chunk.set_block( + SIGN_POS, + Block { + state: BlockState::OAK_SIGN.set(PropName::Rotation, PropValue::_4), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + // All 4 lines are required, otherwise no text is displayed. + "Type in chat:".color(Color::RED).into(), + "".into_text().into(), + "".into_text().into(), + "".into_text().into(), + ]), + } + }), + }, + ); + + layer.chunk.set_block( + SKULL_POS, + BlockState::PLAYER_HEAD.set(PropName::Rotation, PropValue::_12), + ); + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, FLOOR_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +fn event_handler( + clients: Query<(&Username, &Properties, &UniqueId)>, + mut messages: EventReader, + mut block_interacts: EventReader, + mut layers: Query<&mut ChunkLayer>, +) { + let mut layer = layers.single_mut(); + + for ChatMessageEvent { + client, message, .. + } in messages.read() + { + let Ok((username, _, _)) = clients.get(*client) else { + continue; + }; + + let nbt = layer.block_entity_mut(SIGN_POS).unwrap(); + nbt.merge(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "Type in chat:".color(Color::RED).into(), + message.to_string().color(Color::DARK_GREEN).into(), + format!("~{username}").italic().into(), + "".into_text().into(), + ]), + }, + }); + } + + for InteractBlockEvent { + client, + position, + hand, + .. + } in block_interacts.read() + { + if *hand == Hand::Main && *position == SKULL_POS { + let Ok((_, properties, uuid)) = clients.get(*client) else { + continue; + }; + + let Some(textures) = properties.textures() else { + continue; + }; + + *layer.block_entity_mut(SKULL_POS).unwrap() = compound! { + "SkullOwner" => compound! { + "Id" => uuid.0, + "Properties" => compound! { + "textures" => List::Compound(vec![compound! { + "Value" => textures.value.clone(), + }]) + } + } + }; + } + } +} diff --git a/vendor/valence/examples/boss_bar.rs b/vendor/valence/examples/boss_bar.rs new file mode 100644 index 00000000..868e9a49 --- /dev/null +++ b/vendor/valence/examples/boss_bar.rs @@ -0,0 +1,223 @@ +#![allow(clippy::type_complexity)] + +use rand::seq::SliceRandom; +use valence::prelude::*; +use valence_boss_bar::{ + BossBarBundle, BossBarColor, BossBarDivision, BossBarFlags, BossBarHealth, BossBarStyle, + BossBarTitle, +}; +use valence_server::entity::cow::CowEntityBundle; +use valence_server::message::ChatMessageEvent; +use valence_text::color::NamedColor; + +const SPAWN_Y: i32 = 64; + +#[derive(Component)] +struct CustomBossBar; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + (init_clients, despawn_disconnected_clients, listen_messages), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + let layer_id = commands.spawn(layer).id(); + + commands.spawn(( + BossBarBundle { + title: BossBarTitle("Boss Bar".into_text()), + health: BossBarHealth(0.5), + layer: EntityLayerId(layer_id), + ..Default::default() + }, + CustomBossBar, + )); + + commands.spawn(( + CowEntityBundle { + position: Position::new([0.0, SPAWN_Y as f64 + 1.0, 0.0]), + layer: EntityLayerId(layer_id), + ..Default::default() + }, + BossBarTitle("Louis XVI".color(NamedColor::Red)), + BossBarHealth(0.5), + BossBarStyle { + color: BossBarColor::Red, + division: BossBarDivision::default(), + }, + BossBarFlags::default(), + )); +} + +fn init_clients( + mut clients_query: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers_query: Query, With)>, +) { + let layer = layers_query.single(); + + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients_query + { + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.5, SPAWN_Y as f64 + 1.0, 0.5]); + *game_mode = GameMode::Creative; + + client.send_chat_message( + "Type 'view' to toggle bar display" + .on_click_suggest_command("view") + .on_hover_show_text("Type 'view'"), + ); + client.send_chat_message( + "Type 'color' to set a random color" + .on_click_suggest_command("color") + .on_hover_show_text("Type 'color'"), + ); + client.send_chat_message( + "Type 'division' to set a random division" + .on_click_suggest_command("division") + .on_hover_show_text("Type 'division'"), + ); + client.send_chat_message( + "Type 'flags' to set random flags" + .on_click_suggest_command("flags") + .on_hover_show_text("Type 'flags'"), + ); + client.send_chat_message( + "Type any string to set the title".on_click_suggest_command("title"), + ); + client.send_chat_message( + "Type any number between 0 and 1 to set the health".on_click_suggest_command("health"), + ); + } +} + +fn listen_messages( + mut message_events: EventReader, + mut boss_bars_query: Query< + ( + &mut BossBarStyle, + &mut BossBarFlags, + &mut BossBarHealth, + &mut BossBarTitle, + &EntityLayerId, + ), + With, + >, + mut clients_query: Query<&mut VisibleEntityLayers, With>, +) { + let ( + mut boss_bar_style, + mut boss_bar_flags, + mut boss_bar_health, + mut boss_bar_title, + entity_layer_id, + ) = boss_bars_query.single_mut(); + + for ChatMessageEvent { + client, message, .. + } in message_events.read() + { + match message.as_ref() { + "view" => { + if let Ok(mut visible_entity_layers) = clients_query.get_mut(*client) { + if visible_entity_layers.0.contains(&entity_layer_id.0) { + visible_entity_layers.0.remove(&entity_layer_id.0); + } else { + visible_entity_layers.0.insert(entity_layer_id.0); + } + } + } + "color" => { + let mut colors = vec![ + BossBarColor::Pink, + BossBarColor::Blue, + BossBarColor::Red, + BossBarColor::Green, + BossBarColor::Yellow, + ]; + colors.retain(|c| *c != boss_bar_style.color); + + let random_color = colors.choose(&mut rand::thread_rng()).unwrap(); + + boss_bar_style.color = *random_color; + } + "division" => { + let mut divisions = vec![ + BossBarDivision::NoDivision, + BossBarDivision::SixNotches, + BossBarDivision::TenNotches, + BossBarDivision::TwelveNotches, + BossBarDivision::TwentyNotches, + ]; + divisions.retain(|d| *d != boss_bar_style.division); + + let random_division = divisions.choose(&mut rand::thread_rng()).unwrap(); + + boss_bar_style.division = *random_division; + } + "flags" => { + let darken_sky: bool = rand::random(); + let dragon_bar: bool = rand::random(); + let create_fog: bool = rand::random(); + + boss_bar_flags.set_darken_sky(darken_sky); + boss_bar_flags.set_dragon_bar(dragon_bar); + boss_bar_flags.set_create_fog(create_fog); + } + _ => { + if let Ok(health) = message.parse::() { + if (0.0..=1.0).contains(&health) { + boss_bar_health.0 = health; + } + } else { + boss_bar_title.0 = message.to_string().into_text(); + } + } + }; + } +} diff --git a/vendor/valence/examples/building.rs b/vendor/valence/examples/building.rs new file mode 100644 index 00000000..de4f69c7 --- /dev/null +++ b/vendor/valence/examples/building.rs @@ -0,0 +1,173 @@ +#![allow(clippy::type_complexity)] + +use valence::interact_block::InteractBlockEvent; +use valence::inventory::HeldItem; +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + toggle_gamemode_on_sneak, + digging, + place_blocks, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -50..50 { + for x in -50..50 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + + client.send_chat_message("Welcome to Valence! Build something cool.".italic()); + } +} + +fn toggle_gamemode_on_sneak( + mut clients: Query<&mut GameMode>, + mut events: EventReader, +) { + for event in events.read() { + let Ok(mut mode) = clients.get_mut(event.client) else { + continue; + }; + if event.state == SneakState::Start { + *mode = match *mode { + GameMode::Survival => GameMode::Creative, + GameMode::Creative => GameMode::Survival, + _ => GameMode::Creative, + }; + } + } +} + +fn digging( + clients: Query<&GameMode>, + mut layers: Query<&mut ChunkLayer>, + mut events: EventReader, +) { + let mut layer = layers.single_mut(); + + for event in events.read() { + let Ok(game_mode) = clients.get(event.client) else { + continue; + }; + + if (*game_mode == GameMode::Creative && event.state == DiggingState::Start) + || (*game_mode == GameMode::Survival && event.state == DiggingState::Stop) + { + layer.set_block(event.position, BlockState::AIR); + } + } +} + +fn place_blocks( + mut clients: Query<(&mut Inventory, &GameMode, &HeldItem)>, + mut layers: Query<&mut ChunkLayer>, + mut events: EventReader, +) { + let mut layer = layers.single_mut(); + + for event in events.read() { + let Ok((mut inventory, game_mode, held)) = clients.get_mut(event.client) else { + continue; + }; + if event.hand != Hand::Main { + continue; + } + + // get the held item + let slot_id = held.slot(); + let stack = inventory.slot(slot_id); + if stack.is_empty() { + // no item in the slot + continue; + }; + + let Some(block_kind) = BlockKind::from_item_kind(stack.item) else { + // can't place this item as a block + continue; + }; + + if *game_mode == GameMode::Survival { + // check if the player has the item in their inventory and remove + // it. + if stack.count > 1 { + let amount = stack.count - 1; + inventory.set_slot_amount(slot_id, amount); + } else { + inventory.set_slot(slot_id, ItemStack::EMPTY); + } + } + let real_pos = event.position.get_in_direction(event.face); + let state = block_kind.to_state().set( + PropName::Axis, + match event.face { + Direction::Down | Direction::Up => PropValue::Y, + Direction::North | Direction::South => PropValue::Z, + Direction::West | Direction::East => PropValue::X, + }, + ); + layer.set_block(real_pos, state); + } +} diff --git a/vendor/valence/examples/chest.rs b/vendor/valence/examples/chest.rs new file mode 100644 index 00000000..15910ce3 --- /dev/null +++ b/vendor/valence/examples/chest.rs @@ -0,0 +1,121 @@ +#![allow(clippy::type_complexity)] + +use valence::interact_block::InteractBlockEvent; +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; +const CHEST_POS: [i32; 3] = [0, SPAWN_Y + 1, 3]; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + toggle_gamemode_on_sneak, + open_chest, + despawn_disconnected_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + layer.chunk.set_block(CHEST_POS, BlockState::CHEST); + + commands.spawn(layer); + + let inventory = Inventory::with_title( + InventoryKind::Generic9x3, + "Extra".italic() + " Chesty".not_italic().bold().color(Color::RED) + " Chest".not_italic(), + ); + + commands.spawn(inventory); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +fn toggle_gamemode_on_sneak( + mut clients: Query<&mut GameMode>, + mut events: EventReader, +) { + for event in events.read() { + let Ok(mut mode) = clients.get_mut(event.client) else { + continue; + }; + + if event.state == SneakState::Start { + *mode = match *mode { + GameMode::Survival => GameMode::Creative, + GameMode::Creative => GameMode::Survival, + _ => GameMode::Creative, + }; + } + } +} + +fn open_chest( + mut commands: Commands, + inventories: Query, Without)>, + mut events: EventReader, +) { + for event in events.read() { + if event.position != CHEST_POS.into() { + continue; + } + let open_inventory = OpenInventory::new(inventories.single()); + commands.entity(event.client).insert(open_inventory); + } +} diff --git a/vendor/valence/examples/combat.rs b/vendor/valence/examples/combat.rs new file mode 100644 index 00000000..60573a0e --- /dev/null +++ b/vendor/valence/examples/combat.rs @@ -0,0 +1,181 @@ +#![allow(clippy::type_complexity)] + +use bevy_ecs::query::WorldQuery; +use rand::Rng; +use valence::entity::EntityStatuses; +use valence::math::Vec3Swizzles; +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; +const ARENA_RADIUS: i32 = 32; + +/// Attached to every client. +#[derive(Component)] +struct CombatState { + /// The tick the client was last attacked. + last_attacked_tick: i64, + has_bonus_knockback: bool, +} + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(EventLoopUpdate, handle_combat_events) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + teleport_oob_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + let mut rng = rand::thread_rng(); + + // Create circular arena. + for z in -ARENA_RADIUS..ARENA_RADIUS { + for x in -ARENA_RADIUS..ARENA_RADIUS { + let dist = f64::hypot(x as _, z as _) / ARENA_RADIUS as f64; + + if dist > 1.0 { + continue; + } + + let block = if rng.gen::() < dist { + BlockState::STONE + } else { + BlockState::DEEPSLATE + }; + + for y in 0..SPAWN_Y { + layer.chunk.set_block([x, y, z], block); + } + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +#[derive(WorldQuery)] +#[world_query(mutable)] +struct CombatQuery { + client: &'static mut Client, + pos: &'static Position, + state: &'static mut CombatState, + statuses: &'static mut EntityStatuses, +} + +fn handle_combat_events( + server: Res, + mut clients: Query, + mut sprinting: EventReader, + mut interact_entity: EventReader, +) { + for &SprintEvent { client, state } in sprinting.read() { + if let Ok(mut client) = clients.get_mut(client) { + client.state.has_bonus_knockback = state == SprintState::Start; + } + } + + for &InteractEntityEvent { + client: attacker_client, + entity: victim_client, + .. + } in interact_entity.read() + { + let Ok([mut attacker, mut victim]) = clients.get_many_mut([attacker_client, victim_client]) + else { + // Victim or attacker does not exist, or the attacker is attacking itself. + continue; + }; + + if server.current_tick() - victim.state.last_attacked_tick < 10 { + // Victim is still on attack cooldown. + continue; + } + + victim.state.last_attacked_tick = server.current_tick(); + + let victim_pos = victim.pos.0.xz(); + let attacker_pos = attacker.pos.0.xz(); + + let dir = (victim_pos - attacker_pos).normalize().as_vec2(); + + let knockback_xz = if attacker.state.has_bonus_knockback { + 18.0 + } else { + 8.0 + }; + let knockback_y = if attacker.state.has_bonus_knockback { + 8.432 + } else { + 6.432 + }; + + victim + .client + .set_velocity([dir.x * knockback_xz, knockback_y, dir.y * knockback_xz]); + + attacker.state.has_bonus_knockback = false; + + victim.client.trigger_status(EntityStatus::PlayAttackSound); + + victim.statuses.trigger(EntityStatus::PlayAttackSound); + } +} + +fn teleport_oob_clients(mut clients: Query<&mut Position, With>) { + for mut pos in &mut clients { + if pos.0.y < 0.0 { + pos.set([0.0, SPAWN_Y as _, 0.0]); + } + } +} diff --git a/vendor/valence/examples/command.rs b/vendor/valence/examples/command.rs new file mode 100644 index 00000000..76402c8a --- /dev/null +++ b/vendor/valence/examples/command.rs @@ -0,0 +1,676 @@ +#![allow(clippy::type_complexity)] + +use std::ops::DerefMut; + +use command::graph::CommandGraphBuilder; +use command::handler::CommandResultEvent; +use command::parsers::entity_selector::{EntitySelector, EntitySelectors}; +use command::parsers::{CommandArg, GreedyString, QuotableString}; +use command::scopes::CommandScopes; +use command::{parsers, AddCommand, Command, CommandScopeRegistry, ModifierValue}; +use command_macros::Command; +use parsers::{Vec2 as Vec2Parser, Vec3 as Vec3Parser}; +use rand::prelude::IteratorRandom; +use valence::entity::living::LivingEntity; +use valence::prelude::*; +use valence::*; +use valence_server::op_level::OpLevel; + +const SPAWN_Y: i32 = 64; + +#[derive(Command, Debug, Clone)] +#[paths("teleport", "tp")] +#[scopes("valence.command.teleport")] +enum TeleportCommand { + #[paths = "{location}"] + ExecutorToLocation { location: Vec3Parser }, + #[paths = "{target}"] + ExecutorToTarget { target: EntitySelector }, + #[paths = "{from} {to}"] + TargetToTarget { + from: EntitySelector, + to: EntitySelector, + }, + #[paths = "{target} {location}"] + TargetToLocation { + target: EntitySelector, + location: Vec3Parser, + }, +} + +#[derive(Command, Debug, Clone)] +#[paths("gamemode", "gm")] +#[scopes("valence.command.gamemode")] +enum GamemodeCommand { + #[paths("survival {target?}", "{/} gms {target?}")] + Survival { target: Option }, + #[paths("creative {target?}", "{/} gmc {target?}")] + Creative { target: Option }, + #[paths("adventure {target?}", "{/} gma {target?}")] + Adventure { target: Option }, + #[paths("spectator {target?}", "{/} gmspec {target?}")] + Spectator { target: Option }, +} + +#[derive(Command, Debug, Clone)] +#[paths("struct {gamemode} {target?}")] +#[scopes("valence.command.gamemode")] +#[allow(dead_code)] +pub(crate) struct StructCommand { + gamemode: GameMode, + target: Option, +} + +#[derive(Command, Debug, Clone)] +#[paths("test", "t")] +#[scopes("valence.command.test")] +#[allow(dead_code)] +enum TestCommand { + // 3 literals with an arg each + #[paths("a {a} b {b} c {c}", "{a} {b} {c}")] + A { a: String, b: i32, c: f32 }, + // 2 literals with an arg last being optional (Because of the greedy string before the end + // this is technically unreachable) + #[paths = "a {a} {b} b {c?}"] + B { + a: Vec3Parser, + b: GreedyString, + c: Option, + }, + // greedy string optional arg + #[paths = "a {a} b {b?}"] + C { a: String, b: Option }, + // greedy string required arg + #[paths = "a {a} b {b}"] + D { a: String, b: GreedyString }, + // five optional args and an ending greedyString + #[paths("options {a?} {b?} {c?} {d?} {e?}", "options {b?} {a?} {d?} {c?} {e?}")] + E { + a: Option, + b: Option, + c: Option, + d: Option, + e: Option, + }, +} + +#[derive(Debug, Clone)] +enum ComplexRedirectionCommand { + A(Vec3Parser), + B, + C(Vec2Parser), + D, + E(Vec3Parser), +} + +impl Command for ComplexRedirectionCommand { + fn assemble_graph(graph: &mut CommandGraphBuilder) + where + Self: Sized, + { + let root = graph.root().id(); + + let command_root = graph + .literal("complex") + .with_scopes(vec!["valence.command.complex"]) + .id(); + let a = graph.literal("a").id(); + + graph + .at(a) + .argument("a") + .with_parser::() + .with_executable(|input| { + ComplexRedirectionCommand::A(Vec3Parser::parse_arg(input).unwrap()) + }); + + let b = graph.literal("b").id(); + + graph + .at(b) + .with_executable(|_| ComplexRedirectionCommand::B); + graph.at(b).redirect_to(root); + + let c = graph.literal("c").id(); + + graph + .at(c) + .argument("c") + .with_parser::() + .with_executable(|input| { + ComplexRedirectionCommand::C(Vec2Parser::parse_arg(input).unwrap()) + }); + + let d = graph + .at(command_root) + .literal("d") + .with_modifier(|_, modifiers| { + let entry = modifiers.entry("d_pass_count".into()).or_insert(0.into()); + if let ModifierValue::I32(i) = entry { + *i += 1; + } + }) + .id(); + + graph + .at(d) + .with_executable(|_| ComplexRedirectionCommand::D); + graph.at(d).redirect_to(command_root); + + let e = graph.literal("e").id(); + + graph + .at(e) + .argument("e") + .with_parser::() + .with_executable(|input| { + ComplexRedirectionCommand::E(Vec3Parser::parse_arg(input).unwrap()) + }); + } +} + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_command::() + .add_command::() + .add_command::() + .add_command::() + .add_command::() + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + // Command handlers + handle_test_command, + handle_teleport_command, + handle_complex_command, + handle_gamemode_command, + handle_struct_command, + ), + ) + .run(); +} + +enum TeleportTarget { + Targets(Vec), +} + +#[derive(Debug)] +enum TeleportDestination { + Location(Vec3Parser), + Target(Option), +} + +fn handle_teleport_command( + mut events: EventReader>, + living_entities: Query>, + mut clients: Query<(Entity, &mut Client)>, + entity_layers: Query<&EntityLayerId>, + mut positions: Query<&mut Position>, + usernames: Query<(Entity, &Username)>, +) { + for event in events.read() { + let compiled_command = match &event.result { + TeleportCommand::ExecutorToLocation { location } => ( + TeleportTarget::Targets(vec![event.executor]), + TeleportDestination::Location(*location), + ), + TeleportCommand::ExecutorToTarget { target } => ( + TeleportTarget::Targets(vec![event.executor]), + TeleportDestination::Target( + find_targets( + &living_entities, + &mut clients, + &positions, + &entity_layers, + &usernames, + event, + target, + ) + .first() + .copied(), + ), + ), + TeleportCommand::TargetToTarget { from, to } => ( + TeleportTarget::Targets( + find_targets( + &living_entities, + &mut clients, + &positions, + &entity_layers, + &usernames, + event, + from, + ) + .to_vec(), + ), + TeleportDestination::Target( + find_targets( + &living_entities, + &mut clients, + &positions, + &entity_layers, + &usernames, + event, + to, + ) + .first() + .copied(), + ), + ), + TeleportCommand::TargetToLocation { target, location } => ( + TeleportTarget::Targets( + find_targets( + &living_entities, + &mut clients, + &positions, + &entity_layers, + &usernames, + event, + target, + ) + .to_vec(), + ), + TeleportDestination::Location(*location), + ), + }; + + let (TeleportTarget::Targets(targets), destination) = compiled_command; + + println!( + "executing teleport command {:#?} -> {:#?}", + targets, destination + ); + match destination { + TeleportDestination::Location(location) => { + for target in targets { + let mut pos = positions.get_mut(target).unwrap(); + pos.0.x = location.x.get(pos.0.x as f32) as f64; + pos.0.y = location.y.get(pos.0.y as f32) as f64; + pos.0.z = location.z.get(pos.0.z as f32) as f64; + } + } + TeleportDestination::Target(target) => { + let target = target.unwrap(); + let target_pos = **positions.get(target).unwrap(); + for target in targets { + let mut position = positions.get_mut(target).unwrap(); + position.0 = target_pos; + } + } + } + } +} + +fn find_targets( + living_entities: &Query>, + clients: &mut Query<(Entity, &mut Client)>, + positions: &Query<&mut Position>, + entity_layers: &Query<&EntityLayerId>, + usernames: &Query<(Entity, &Username)>, + event: &CommandResultEvent, + target: &EntitySelector, +) -> Vec { + match target { + EntitySelector::SimpleSelector(selector) => match selector { + EntitySelectors::AllEntities => { + let executor_entity_layer = *entity_layers.get(event.executor).unwrap(); + living_entities + .iter() + .filter(|entity| { + let entity_layer = entity_layers.get(*entity).unwrap(); + entity_layer.0 == executor_entity_layer.0 + }) + .collect() + } + EntitySelectors::SinglePlayer(name) => { + let target = usernames.iter().find(|(_, username)| username.0 == *name); + match target { + None => { + let client = &mut clients.get_mut(event.executor).unwrap().1; + client.send_chat_message(format!("Could not find target: {}", name)); + vec![] + } + Some(target_entity) => { + vec![target_entity.0] + } + } + } + EntitySelectors::AllPlayers => { + let executor_entity_layer = *entity_layers.get(event.executor).unwrap(); + clients + .iter_mut() + .filter_map(|(entity, ..)| { + let entity_layer = entity_layers.get(entity).unwrap(); + if entity_layer.0 == executor_entity_layer.0 { + Some(entity) + } else { + None + } + }) + .collect() + } + EntitySelectors::SelfPlayer => { + vec![event.executor] + } + EntitySelectors::NearestPlayer => { + let executor_entity_layer = *entity_layers.get(event.executor).unwrap(); + let executor_pos = positions.get(event.executor).unwrap(); + let target = clients + .iter_mut() + .filter(|(entity, ..)| { + *entity_layers.get(*entity).unwrap() == executor_entity_layer + }) + .filter(|(target, ..)| *target != event.executor) + .map(|(target, ..)| target) + .min_by(|target, target2| { + let target_pos = positions.get(*target).unwrap(); + let target2_pos = positions.get(*target2).unwrap(); + let target_dist = target_pos.distance(**executor_pos); + let target2_dist = target2_pos.distance(**executor_pos); + target_dist.partial_cmp(&target2_dist).unwrap() + }); + match target { + None => { + let mut client = clients.get_mut(event.executor).unwrap().1; + client.send_chat_message("Could not find target".to_string()); + vec![] + } + Some(target_entity) => { + vec![target_entity] + } + } + } + EntitySelectors::RandomPlayer => { + let executor_entity_layer = *entity_layers.get(event.executor).unwrap(); + let target = clients + .iter_mut() + .filter(|(entity, ..)| { + *entity_layers.get(*entity).unwrap() == executor_entity_layer + }) + .choose(&mut rand::thread_rng()) + .map(|(target, ..)| target); + match target { + None => { + let mut client = clients.get_mut(event.executor).unwrap().1; + client.send_chat_message("Could not find target".to_string()); + vec![] + } + Some(target_entity) => { + vec![target_entity] + } + } + } + }, + EntitySelector::ComplexSelector(_, _) => { + let mut client = clients.get_mut(event.executor).unwrap().1; + client.send_chat_message("complex selector not implemented".to_string()); + vec![] + } + } +} + +fn handle_test_command( + mut events: EventReader>, + mut clients: Query<&mut Client>, +) { + for event in events.read() { + let client = &mut clients.get_mut(event.executor).unwrap(); + client.send_chat_message(format!( + "Test command executed with data:\n {:#?}", + &event.result + )); + } +} + +fn handle_complex_command( + mut events: EventReader>, + mut clients: Query<&mut Client>, +) { + for event in events.read() { + let client = &mut clients.get_mut(event.executor).unwrap(); + client.send_chat_message(format!( + "complex command executed with data:\n {:#?}\n and with the modifiers:\n {:#?}", + &event.result, &event.modifiers + )); + } +} + +fn handle_struct_command( + mut events: EventReader>, + mut clients: Query<&mut Client>, +) { + for event in events.read() { + let client = &mut clients.get_mut(event.executor).unwrap(); + client.send_chat_message(format!( + "Struct command executed with data:\n {:#?}", + &event.result + )); + } +} + +fn handle_gamemode_command( + mut events: EventReader>, + mut clients: Query<(&mut Client, &mut GameMode, &Username, Entity)>, + positions: Query<&Position>, +) { + for event in events.read() { + let game_mode_to_set = match &event.result { + GamemodeCommand::Survival { .. } => GameMode::Survival, + GamemodeCommand::Creative { .. } => GameMode::Creative, + GamemodeCommand::Adventure { .. } => GameMode::Adventure, + GamemodeCommand::Spectator { .. } => GameMode::Spectator, + }; + + let selector = match &event.result { + GamemodeCommand::Survival { target } => target.clone(), + GamemodeCommand::Creative { target } => target.clone(), + GamemodeCommand::Adventure { target } => target.clone(), + GamemodeCommand::Spectator { target } => target.clone(), + }; + + match selector { + None => { + let (mut client, mut game_mode, ..) = clients.get_mut(event.executor).unwrap(); + *game_mode = game_mode_to_set; + client.send_chat_message(format!( + "Gamemode command executor -> self executed with data:\n {:#?}", + &event.result + )); + } + Some(selector) => match selector { + EntitySelector::SimpleSelector(selector) => match selector { + EntitySelectors::AllEntities => { + for (mut client, mut game_mode, ..) in &mut clients.iter_mut() { + *game_mode = game_mode_to_set; + client.send_chat_message(format!( + "Gamemode command executor -> all entities executed with data:\n \ + {:#?}", + &event.result + )); + } + } + EntitySelectors::SinglePlayer(name) => { + let target = clients + .iter_mut() + .find(|(.., username, _)| username.0 == *name) + .map(|(.., target)| target); + + match target { + None => { + let client = &mut clients.get_mut(event.executor).unwrap().0; + client + .send_chat_message(format!("Could not find target: {}", name)); + } + Some(target) => { + let mut game_mode = clients.get_mut(target).unwrap().1; + *game_mode = game_mode_to_set; + + let client = &mut clients.get_mut(event.executor).unwrap().0; + client.send_chat_message(format!( + "Gamemode command executor -> single player executed with \ + data:\n {:#?}", + &event.result + )); + } + } + } + EntitySelectors::AllPlayers => { + for (mut client, mut game_mode, ..) in &mut clients.iter_mut() { + *game_mode = game_mode_to_set; + client.send_chat_message(format!( + "Gamemode command executor -> all entities executed with data:\n \ + {:#?}", + &event.result + )); + } + } + EntitySelectors::SelfPlayer => { + let (mut client, mut game_mode, ..) = + clients.get_mut(event.executor).unwrap(); + *game_mode = game_mode_to_set; + client.send_chat_message(format!( + "Gamemode command executor -> self executed with data:\n {:#?}", + &event.result + )); + } + EntitySelectors::NearestPlayer => { + let executor_pos = positions.get(event.executor).unwrap(); + let target = clients + .iter_mut() + .filter(|(.., target)| *target != event.executor) + .min_by(|(.., target), (.., target2)| { + let target_pos = positions.get(*target).unwrap(); + let target2_pos = positions.get(*target2).unwrap(); + let target_dist = target_pos.distance(**executor_pos); + let target2_dist = target2_pos.distance(**executor_pos); + target_dist.partial_cmp(&target2_dist).unwrap() + }) + .map(|(.., target)| target); + + match target { + None => { + let client = &mut clients.get_mut(event.executor).unwrap().0; + client.send_chat_message("Could not find target".to_string()); + } + Some(target) => { + let mut game_mode = clients.get_mut(target).unwrap().1; + *game_mode = game_mode_to_set; + + let client = &mut clients.get_mut(event.executor).unwrap().0; + client.send_chat_message(format!( + "Gamemode command executor -> single player executed with \ + data:\n {:#?}", + &event.result + )); + } + } + } + EntitySelectors::RandomPlayer => { + let target = clients + .iter_mut() + .choose(&mut rand::thread_rng()) + .map(|(.., target)| target); + + match target { + None => { + let client = &mut clients.get_mut(event.executor).unwrap().0; + client.send_chat_message("Could not find target".to_string()); + } + Some(target) => { + let mut game_mode = clients.get_mut(target).unwrap().1; + *game_mode = game_mode_to_set; + + let client = &mut clients.get_mut(event.executor).unwrap().0; + client.send_chat_message(format!( + "Gamemode command executor -> single player executed with \ + data:\n {:#?}", + &event.result + )); + } + } + } + }, + EntitySelector::ComplexSelector(_, _) => { + let client = &mut clients.get_mut(event.executor).unwrap().0; + client + .send_chat_message("Complex selectors are not implemented yet".to_string()); + } + }, + } + } +} + +fn setup( + mut commands: Commands, + server: Res, + mut dimensions: ResMut, + biomes: Res, + mut command_scopes: ResMut, +) { + dimensions + .deref_mut() + .insert(Ident::new("pooland").unwrap(), DimensionType::default()); + + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + command_scopes.link("valence.admin", "valence.command"); + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut CommandScopes, + &mut Position, + &mut GameMode, + &mut OpLevel, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut permissions, + mut pos, + mut game_mode, + mut op_level, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + + pos.0 = [0.0, SPAWN_Y as f64 + 1.0, 0.0].into(); + *game_mode = GameMode::Creative; + op_level.set(4); + + permissions.add("valence.admin"); + } +} diff --git a/vendor/valence/examples/cow_sphere.rs b/vendor/valence/examples/cow_sphere.rs new file mode 100644 index 00000000..dccd2df0 --- /dev/null +++ b/vendor/valence/examples/cow_sphere.rs @@ -0,0 +1,170 @@ +#![allow(clippy::type_complexity)] + +use std::f64::consts::TAU; + +use valence::abilities::{PlayerStartFlyingEvent, PlayerStopFlyingEvent}; +use valence::math::{DQuat, EulerRot}; +use valence::message::SendMessage; +use valence::prelude::*; +use valence_text::color::NamedColor; + +type SpherePartBundle = valence::entity::cow::CowEntityBundle; + +const SPHERE_CENTER: DVec3 = DVec3::new(0.5, SPAWN_POS.y as f64 + 2.0, 0.5); +const SPHERE_AMOUNT: usize = 200; +const SPHERE_MIN_RADIUS: f64 = 6.0; +const SPHERE_MAX_RADIUS: f64 = 12.0; +const SPHERE_FREQ: f64 = 0.5; + +const SPAWN_POS: BlockPos = BlockPos::new(0, 100, -16); + +/// Marker component for entities that are part of the sphere. +#[derive(Component)] +struct SpherePart; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + update_sphere, + despawn_disconnected_clients, + display_is_flying, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + layer.chunk.set_block(SPAWN_POS, BlockState::BEDROCK); + + let layer_id = commands.spawn(layer).id(); + + commands.spawn_batch([0; SPHERE_AMOUNT].map(|_| { + ( + SpherePartBundle { + layer: EntityLayerId(layer_id), + ..Default::default() + }, + SpherePart, + ) + })); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([ + SPAWN_POS.x as f64 + 0.5, + SPAWN_POS.y as f64 + 1.0, + SPAWN_POS.z as f64 + 0.5, + ]); + *game_mode = GameMode::Creative; + } +} + +fn update_sphere( + server: Res, + mut parts: Query<(&mut Position, &mut Look, &mut HeadYaw), With>, +) { + let time = server.current_tick() as f64 / server.tick_rate().get() as f64; + + let rot_angles = DVec3::new(0.2, 0.4, 0.6) * SPHERE_FREQ * time * TAU % TAU; + let rot = DQuat::from_euler(EulerRot::XYZ, rot_angles.x, rot_angles.y, rot_angles.z); + + let radius = lerp( + SPHERE_MIN_RADIUS, + SPHERE_MAX_RADIUS, + ((time * SPHERE_FREQ * TAU).sin() + 1.0) / 2.0, + ); + + for ((mut pos, mut look, mut head_yaw), p) in + parts.iter_mut().zip(fibonacci_spiral(SPHERE_AMOUNT)) + { + debug_assert!(p.is_normalized()); + + let dir = rot * p; + + pos.0 = SPHERE_CENTER + dir * radius; + look.set_vec(dir.as_vec3()); + head_yaw.0 = look.yaw; + } +} + +/// Distributes N points on the surface of a unit sphere. +fn fibonacci_spiral(n: usize) -> impl Iterator { + let golden_ratio = (1.0 + 5_f64.sqrt()) / 2.0; + + (0..n).map(move |i| { + // Map to unit square + let x = i as f64 / golden_ratio % 1.0; + let y = i as f64 / n as f64; + + // Map from unit square to unit sphere. + let theta = x * TAU; + let phi = (1.0 - 2.0 * y).acos(); + DVec3::new(theta.cos() * phi.sin(), theta.sin() * phi.sin(), phi.cos()) + }) +} + +fn lerp(a: f64, b: f64, t: f64) -> f64 { + a * (1.0 - t) + b * t +} + +// Send an actionbar message to all clients when their flying state changes. +fn display_is_flying( + mut player_start_flying_events: EventReader, + mut player_stop_flying_events: EventReader, + mut clients: Query<&mut Client>, +) { + for event in player_start_flying_events.read() { + if let Ok(mut client) = clients.get_mut(event.client) { + client.send_action_bar_message("You are flying!".color(NamedColor::Green)); + } + } + + for event in player_stop_flying_events.read() { + if let Ok(mut client) = clients.get_mut(event.client) { + client.send_action_bar_message("You are no longer flying!".color(NamedColor::Red)); + } + } +} diff --git a/vendor/valence/examples/ctf.rs b/vendor/valence/examples/ctf.rs new file mode 100644 index 00000000..3f7675de --- /dev/null +++ b/vendor/valence/examples/ctf.rs @@ -0,0 +1,1050 @@ +#![allow(clippy::type_complexity)] + +use std::collections::HashMap; + +use bevy_ecs::query::WorldQuery; +use valence::entity::cow::CowEntityBundle; +use valence::entity::entity::Flags; +use valence::entity::living::Health; +use valence::entity::pig::PigEntityBundle; +use valence::entity::player::PlayerEntityBundle; +use valence::entity::{EntityAnimations, EntityStatuses, OnGround, Velocity}; +use valence::interact_block::InteractBlockEvent; +use valence::inventory::HeldItem; +use valence::log::debug; +use valence::math::Vec3Swizzles; +use valence::nbt::{compound, List}; +use valence::prelude::*; +use valence::scoreboard::*; +use valence::status::RequestRespawnEvent; + +const ARENA_Y: i32 = 64; +const ARENA_MID_WIDTH: i32 = 2; +const SPAWN_BOX: [i32; 3] = [0, ARENA_Y + 20, 0]; +const SPAWN_POS: [f64; 3] = [ + SPAWN_BOX[0] as f64, + SPAWN_BOX[1] as f64 + 1.0, + SPAWN_BOX[2] as f64, +]; +const SPAWN_BOX_WIDTH: i32 = 5; +const SPAWN_BOX_HEIGHT: i32 = 4; +const PLAYER_MAX_HEALTH: f32 = 20.0; + +pub fn main() { + App::new() + .insert_resource(NetworkSettings { + connection_mode: ConnectionMode::Offline, + ..Default::default() + }) + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(EventLoopUpdate, handle_combat_events) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + digging, + place_blocks, + do_team_selector_portals, + update_flag_visuals, + do_flag_capturing, + // visualize_triggers, + update_clones, + teleport_oob_clients, + necromancy, + update_scoreboard, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -50..50 { + for x in -50..50 { + let block = match x { + x if x < -ARENA_MID_WIDTH => BlockState::RED_CONCRETE, + x if x > ARENA_MID_WIDTH => BlockState::BLUE_CONCRETE, + _ => BlockState::WHITE_CONCRETE, + }; + layer.chunk.set_block([x, ARENA_Y, z], block); + } + } + + let red_flag = build_flag( + &mut layer, + Team::Red, + BlockPos { + x: -48, + y: ARENA_Y + 1, + z: 0, + }, + ); + let blue_flag = build_flag( + &mut layer, + Team::Blue, + BlockPos { + x: 48, + y: ARENA_Y + 1, + z: 0, + }, + ); + + build_spawn_box(&mut layer, SPAWN_BOX, &mut commands); + + commands.spawn(layer); + + let ctf_objective_layer = commands.spawn(EntityLayer::new(&server)).id(); + let ctf_objective = ObjectiveBundle { + name: Objective::new("ctf-captures"), + display: ObjectiveDisplay("Captures".into_text()), + layer: EntityLayerId(ctf_objective_layer), + ..Default::default() + }; + commands.spawn(ctf_objective); + + let red_capture_trigger = + TriggerArea::new(red_flag.offset(-5, -3, -5), red_flag.offset(5, 3, 5)); + let blue_capture_trigger = + TriggerArea::new(blue_flag.offset(-5, -3, -5), blue_flag.offset(5, 3, 5)); + let mappos = CtfGlobals { + scoreboard_layer: ctf_objective_layer, + + red_flag, + blue_flag, + + red_capture_trigger, + blue_capture_trigger, + }; + + commands.insert_resource(mappos); + commands.insert_resource(FlagManager { + red: None, + blue: None, + }); + + let ctf_team_layers = CtfLayers::init(&mut commands, &server); + + // add some debug entities to the ctf entity layers + let mut flags = Flags::default(); + flags.set_glowing(true); + let mut pig = commands.spawn(PigEntityBundle { + layer: EntityLayerId(ctf_team_layers.friendly_layers[&Team::Red]), + position: Position([-30.0, 65.0, 2.0].into()), + entity_flags: flags.clone(), + ..Default::default() + }); + pig.insert(Team::Red); + + let mut cow = commands.spawn(CowEntityBundle { + layer: EntityLayerId(ctf_team_layers.friendly_layers[&Team::Blue]), + position: Position([30.0, 65.0, 2.0].into()), + entity_flags: flags, + ..Default::default() + }); + cow.insert(Team::Blue); + + commands.insert_resource(ctf_team_layers); + commands.insert_resource(Score::default()); +} + +/// Build a flag at the given position. `pos` should be the position of the +/// bottom of the flag. +/// +/// Returns the block position of the flag. +fn build_flag(layer: &mut LayerBundle, team: Team, pos: impl Into) -> BlockPos { + let mut pos = pos.into(); + + // build the flag pole + for _ in 0..3 { + layer.chunk.set_block(pos, BlockState::OAK_FENCE); + pos.y += 1; + } + let moving_east = pos.x < 0; + layer.chunk.set_block( + pos, + BlockState::OAK_FENCE.set( + if moving_east { + PropName::East + } else { + PropName::West + }, + PropValue::True, + ), + ); + pos.x += if pos.x < 0 { 1 } else { -1 }; + layer.chunk.set_block( + pos, + BlockState::OAK_FENCE + .set(PropName::East, PropValue::True) + .set(PropName::West, PropValue::True), + ); + pos.x += if pos.x < 0 { 1 } else { -1 }; + layer.chunk.set_block( + pos, + BlockState::OAK_FENCE.set( + if moving_east { + PropName::West + } else { + PropName::East + }, + PropValue::True, + ), + ); + pos.y -= 1; + + // build the flag + layer.chunk.set_block( + pos, + match team { + Team::Red => BlockState::RED_WOOL, + Team::Blue => BlockState::BLUE_WOOL, + }, + ); + + pos +} + +fn build_spawn_box(layer: &mut LayerBundle, pos: impl Into, commands: &mut Commands) { + let pos = pos.into(); + + let spawn_box_block = BlockState::GLASS; + + // build floor and roof + for z in -SPAWN_BOX_WIDTH..=SPAWN_BOX_WIDTH { + for x in -SPAWN_BOX_WIDTH..=SPAWN_BOX_WIDTH { + layer + .chunk + .set_block([pos.x + x, pos.y, pos.z + z], spawn_box_block); + layer.chunk.set_block( + [pos.x + x, pos.y + SPAWN_BOX_HEIGHT, pos.z + z], + spawn_box_block, + ); + } + } + + // build walls + for z in [-SPAWN_BOX_WIDTH, SPAWN_BOX_WIDTH] { + for x in -SPAWN_BOX_WIDTH..=SPAWN_BOX_WIDTH { + for y in pos.y..=pos.y + SPAWN_BOX_HEIGHT - 1 { + layer + .chunk + .set_block([pos.x + x, y, pos.z + z], spawn_box_block); + } + } + } + + for x in [-SPAWN_BOX_WIDTH, SPAWN_BOX_WIDTH] { + for z in -SPAWN_BOX_WIDTH..=SPAWN_BOX_WIDTH { + for y in pos.y..=pos.y + SPAWN_BOX_HEIGHT - 1 { + layer + .chunk + .set_block([pos.x + x, y, pos.z + z], spawn_box_block); + } + } + } + + // build team selector portals + for (block, offset) in [ + ( + BlockState::RED_CONCRETE, + BlockPos::new(-SPAWN_BOX_WIDTH, 0, SPAWN_BOX_WIDTH - 2), + ), + ( + BlockState::BLUE_CONCRETE, + BlockPos::new(SPAWN_BOX_WIDTH - 2, 0, SPAWN_BOX_WIDTH - 2), + ), + ] { + for z in 0..3 { + for x in 0..3 { + layer.chunk.set_block( + [pos.x + offset.x + x, pos.y + offset.y, pos.z + offset.z + z], + block, + ); + } + } + } + + let red = [ + pos.x - SPAWN_BOX_WIDTH + 1, + pos.y, + pos.z + SPAWN_BOX_WIDTH - 1, + ]; + let red_area = TriggerArea::new(red, red); + let blue = [ + pos.x + SPAWN_BOX_WIDTH - 1, + pos.y, + pos.z + SPAWN_BOX_WIDTH - 1, + ]; + let blue_area = TriggerArea::new(blue, blue); + let portals = Portals { + portals: HashMap::from_iter(vec![(Team::Red, red_area), (Team::Blue, blue_area)]), + }; + + for area in portals.portals.values() { + for pos in area.iter_block_pos() { + layer.chunk.set_block(pos, BlockState::AIR); + } + layer + .chunk + .set_block(area.a.offset(0, -1, 0), BlockState::BARRIER); + } + + commands.insert_resource(portals); + + // build instruction signs + + let sign_pos = pos.offset(0, 2, SPAWN_BOX_WIDTH - 1); + layer.chunk.set_block( + sign_pos, + Block { + state: BlockState::OAK_WALL_SIGN.set(PropName::Rotation, PropValue::_3), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "Capture".color(Color::YELLOW).bold().to_string(), + "the".color(Color::YELLOW).bold().to_string(), + "Flag!".color(Color::YELLOW).bold().to_string(), + "Select a Team".color(Color::WHITE).italic().to_string(), + ]) + }, + }), + }, + ); + + layer.chunk.set_block( + sign_pos.offset(-1, 0, 0), + Block { + state: BlockState::OAK_WALL_SIGN.set(PropName::Rotation, PropValue::_3), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "".into_text().to_string(), + ("Join ".bold().color(Color::WHITE) + Team::Red.team_text()).to_string(), + "=>".bold().color(Color::WHITE).to_string(), + "".into_text().to_string(), + ]) + }, + }), + }, + ); + + layer.chunk.set_block( + sign_pos.offset(1, 0, 0), + Block { + state: BlockState::OAK_WALL_SIGN.set(PropName::Rotation, PropValue::_3), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "".into_text().to_string(), + ("Join ".bold().color(Color::WHITE) + Team::Blue.team_text()).to_string(), + "<=".bold().color(Color::WHITE).to_string(), + "".into_text().to_string(), + ]) + }, + }), + }, + ); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + &mut Health, + ), + Added, + >, + main_layers: Query, With)>, + globals: Res, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + mut health, + ) in &mut clients + { + let layer = main_layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + visible_entity_layers.0.insert(globals.scoreboard_layer); + pos.set(SPAWN_POS); + *game_mode = GameMode::Adventure; + health.0 = PLAYER_MAX_HEALTH; + + client.send_chat_message( + "Welcome to Valence! Select a team by jumping in the team's portal.".italic(), + ); + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Component)] +enum Team { + Red, + Blue, +} + +impl Team { + pub fn spawn_pos(&self) -> DVec3 { + [ + match self { + Team::Red => -40.0, + Team::Blue => 40.0, + }, + ARENA_Y as f64 + 1.0, + 0.0, + ] + .into() + } + + pub fn team_text(&self) -> Text { + match self { + Team::Red => "RED".color(Color::RED).bold(), + Team::Blue => "BLUE".color(Color::BLUE).bold(), + } + } + + pub fn iter() -> impl Iterator { + [Team::Red, Team::Blue].iter().copied() + } +} + +fn digging( + mut clients: Query<(&GameMode, &Team, Entity, &mut Client, &mut Inventory)>, + mut layers: Query<&mut ChunkLayer>, + mut events: EventReader, + mut commands: Commands, + globals: Res, + mut flag_manager: ResMut, +) { + let mut layer = layers.single_mut(); + + for event in events.read() { + let Ok((game_mode, team, ent, mut client, mut inv)) = clients.get_mut(event.client) else { + continue; + }; + + if (*game_mode == GameMode::Creative && event.state == DiggingState::Start) + || (*game_mode == GameMode::Survival && event.state == DiggingState::Stop) + { + let Some(block) = layer.block(event.position) else { + continue; + }; + let is_flag = event.position == globals.red_flag || event.position == globals.blue_flag; + + match (team, block.state) { + (Team::Blue, BlockState::RED_WOOL) => { + if event.position == globals.red_flag { + commands.entity(event.client).insert(HasFlag(Team::Red)); + client.send_chat_message("You have the flag!".italic()); + flag_manager.red = Some(ent); + return; + } + } + (Team::Red, BlockState::BLUE_WOOL) => { + if event.position == globals.blue_flag { + commands.entity(event.client).insert(HasFlag(Team::Blue)); + client.send_chat_message("You have the flag!".italic()); + flag_manager.blue = Some(ent); + return; + } + } + _ => {} + } + + if event.position.y <= ARENA_Y + || block.state.to_kind() == BlockKind::OakFence + || is_flag + { + continue; + } + + let prev = layer.set_block(event.position, BlockState::AIR); + + if let Some(prev) = prev { + let kind: ItemKind = prev.state.to_kind().to_item_kind(); + if let Some(slot) = inv.first_slot_with_item_in(kind, 64, 9..45) { + let count = inv.slot(slot).count; + inv.set_slot_amount(slot, count + 1); + } else { + let stack = ItemStack::new(kind, 1, None); + if let Some(empty_slot) = inv.first_empty_slot_in(9..45) { + inv.set_slot(empty_slot, stack); + } else { + debug!("No empty slot to give item to player: {:?}", kind); + } + } + } + } + } +} + +fn place_blocks( + mut clients: Query<(&mut Inventory, &GameMode, &HeldItem)>, + mut layers: Query<&mut ChunkLayer>, + mut events: EventReader, +) { + let mut layer = layers.single_mut(); + + for event in events.read() { + let Ok((mut inventory, game_mode, held)) = clients.get_mut(event.client) else { + continue; + }; + if event.hand != Hand::Main { + continue; + } + + // get the held item + let slot_id = held.slot(); + let stack = inventory.slot(slot_id); + if stack.is_empty() { + continue; + } + + let Some(block_kind) = BlockKind::from_item_kind(stack.item) else { + // can't place this item as a block + continue; + }; + + if *game_mode == GameMode::Survival { + // check if the player has the item in their inventory and remove + // it. + if stack.count > 1 { + let count = stack.count; + inventory.set_slot_amount(slot_id, count - 1); + } else { + inventory.set_slot(slot_id, ItemStack::EMPTY); + } + } + let real_pos = event.position.get_in_direction(event.face); + layer.set_block(real_pos, block_kind.to_state()); + } +} + +#[derive(Debug, Resource)] +struct Portals { + portals: HashMap, +} + +fn do_team_selector_portals( + mut players: Query< + ( + Entity, + &mut Position, + &mut Look, + &mut HeadYaw, + &mut GameMode, + &mut Client, + &mut VisibleEntityLayers, + &UniqueId, + ), + Without, + >, + portals: Res, + mut commands: Commands, + ctf_layers: Res, + main_layers: Query, With)>, +) { + for player in players.iter_mut() { + let ( + player, + mut pos, + mut look, + mut head_yaw, + mut game_mode, + mut client, + mut ent_layers, + unique_id, + ) = player; + if pos.0.y < SPAWN_BOX[1] as f64 - 5.0 { + pos.0 = SPAWN_POS.into(); + continue; + } + + let team = portals + .portals + .iter() + .filter(|(_, area)| area.contains_pos(pos.0)) + .map(|(team, _)| team) + .next() + .copied(); + + if let Some(team) = team { + *game_mode = GameMode::Survival; + let mut inventory = Inventory::new(InventoryKind::Player); + inventory.set_slot(36, ItemStack::new(ItemKind::WoodenSword, 1, None)); + inventory.set_slot( + 37, + ItemStack::new( + match team { + Team::Red => ItemKind::RedWool, + Team::Blue => ItemKind::BlueWool, + }, + 64, + None, + ), + ); + let combat_state = CombatState::default(); + commands + .entity(player) + .insert((team, inventory, combat_state)); + pos.0 = team.spawn_pos(); + let yaw = match team { + Team::Red => -90.0, + Team::Blue => 90.0, + }; + look.yaw = yaw; + look.pitch = 0.0; + head_yaw.0 = yaw; + let chat_text: Text = "You are on team ".into_text() + team.team_text() + "!"; + client.send_chat_message(chat_text); + + let main_layer = main_layers.single(); + ent_layers.as_mut().0.remove(&main_layer); + for t in Team::iter() { + let enemy_layer = ctf_layers.enemy_layers[&t]; + if t == team { + ent_layers.as_mut().0.remove(&enemy_layer); + } else { + ent_layers.as_mut().0.insert(enemy_layer); + } + } + let friendly_layer = ctf_layers.friendly_layers[&team]; + ent_layers.as_mut().0.insert(friendly_layer); + + // Copy the player entity to the friendly layer, and make them glow. + let mut flags = Flags::default(); + flags.set_glowing(true); + let mut player_glowing = commands.spawn(PlayerEntityBundle { + layer: EntityLayerId(friendly_layer), + uuid: *unique_id, + entity_flags: flags, + position: *pos, + ..Default::default() + }); + player_glowing.insert(ClonedEntity(player)); + + let enemy_layer = ctf_layers.enemy_layers[&team]; + let mut player_enemy = commands.spawn(PlayerEntityBundle { + layer: EntityLayerId(enemy_layer), + uuid: *unique_id, + position: *pos, + ..Default::default() + }); + player_enemy.insert(ClonedEntity(player)); + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +struct TriggerArea { + pub a: BlockPos, + pub b: BlockPos, +} + +impl TriggerArea { + pub fn new(a: impl Into, b: impl Into) -> Self { + Self { + a: a.into(), + b: b.into(), + } + } + + pub fn contains(&self, pos: BlockPos) -> bool { + let min = BlockPos::new( + self.a.x.min(self.b.x), + self.a.y.min(self.b.y), + self.a.z.min(self.b.z), + ); + let max = BlockPos::new( + self.a.x.max(self.b.x), + self.a.y.max(self.b.y), + self.a.z.max(self.b.z), + ); + + pos.x >= min.x + && pos.x <= max.x + && pos.y >= min.y + && pos.y <= max.y + && pos.z >= min.z + && pos.z <= max.z + } + + pub fn contains_pos(&self, pos: DVec3) -> bool { + self.contains(pos.into()) + } + + pub fn iter_block_pos(&self) -> impl Iterator { + let min = BlockPos::new( + self.a.x.min(self.b.x), + self.a.y.min(self.b.y), + self.a.z.min(self.b.z), + ); + let max = BlockPos::new( + self.a.x.max(self.b.x), + self.a.y.max(self.b.y), + self.a.z.max(self.b.z), + ); + + (min.x..=max.x) + .flat_map(move |x| (min.y..=max.y).map(move |y| (x, y))) + .flat_map(move |(x, y)| (min.z..=max.z).map(move |z| BlockPos::new(x, y, z))) + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Component)] +#[component(storage = "SparseSet")] +struct HasFlag(Team); + +#[derive(Debug, Resource)] +struct FlagManager { + red: Option, + blue: Option, +} + +#[derive(Debug, Resource)] +struct CtfGlobals { + pub scoreboard_layer: Entity, + + pub red_flag: BlockPos, + pub blue_flag: BlockPos, + + pub red_capture_trigger: TriggerArea, + pub blue_capture_trigger: TriggerArea, +} + +fn update_flag_visuals( + flag_manager: Res, + globals: Res, + mut layers: Query<&mut ChunkLayer>, +) { + if !flag_manager.is_changed() { + return; + } + let red_flag_block = match flag_manager.red { + Some(_) => BlockState::AIR, + None => BlockState::RED_WOOL, + }; + let blue_flag_block = match flag_manager.blue { + Some(_) => BlockState::AIR, + None => BlockState::BLUE_WOOL, + }; + + layers + .single_mut() + .set_block(globals.red_flag, red_flag_block); + layers + .single_mut() + .set_block(globals.blue_flag, blue_flag_block); +} + +fn do_flag_capturing( + globals: Res, + mut players: Query<(Entity, &mut Client, &Team, &Position, &HasFlag)>, + mut commands: Commands, + mut flag_manager: ResMut, + mut score: ResMut, +) { + for (ent, mut client, team, position, has_flag) in players.iter_mut() { + let capture_trigger = match team { + Team::Red => &globals.red_capture_trigger, + Team::Blue => &globals.blue_capture_trigger, + }; + + if capture_trigger.contains_pos(position.0) { + client.send_chat_message("You captured the flag!".italic()); + score + .scores + .entry(*team) + .and_modify(|score| *score += 1) + .or_insert(1); + client.send_chat_message(score.render_scores()); + commands.entity(ent).remove::(); + match has_flag.0 { + Team::Red => flag_manager.red = None, + Team::Blue => flag_manager.blue = None, + } + } + } +} + +#[derive(Debug, Default, Resource)] +struct Score { + pub scores: HashMap, +} + +impl Score { + pub fn render_scores(&self) -> Text { + let mut text = "Scores:\n".into_text(); + for team in Team::iter() { + let score = self.scores.get(&team).unwrap_or(&0); + text += team.team_text() + ": " + score.to_string() + "\n"; + } + text + } +} + +#[allow(dead_code)] +/// Visualizes the trigger areas, for debugging. +fn visualize_triggers(globals: Res, mut layers: Query<&mut ChunkLayer>) { + fn vis_trigger(trigger: &TriggerArea, layer: &mut ChunkLayer) { + for pos in trigger.iter_block_pos() { + layer.play_particle( + &Particle::Crit, + false, + [pos.x as f64 + 0.5, pos.y as f64 + 0.5, pos.z as f64 + 0.5], + [0., 0., 0.], + 0.0, + 1, + ); + } + } + + for mut layer in layers.iter_mut() { + vis_trigger(&globals.red_capture_trigger, &mut layer); + vis_trigger(&globals.blue_capture_trigger, &mut layer); + } +} + +/// Keeps track of the entity layers per team. +#[derive(Debug, Resource)] +struct CtfLayers { + /// Maps a team to the entity layer that contains how friendly players + /// should be viewed. + /// + /// This is used to make friendly players glow. + pub friendly_layers: HashMap, + /// Ditto, but for enemy players. + pub enemy_layers: HashMap, +} + +impl CtfLayers { + pub fn init(commands: &mut Commands, server: &Server) -> Self { + let mut friendly_layers = HashMap::new(); + let mut enemy_layers = HashMap::new(); + + for team in Team::iter() { + let friendly_layer = commands.spawn((EntityLayer::new(server), team)).id(); + friendly_layers.insert(team, friendly_layer); + let enemy_layer = commands.spawn((EntityLayer::new(server), team)).id(); + enemy_layers.insert(team, enemy_layer); + } + + Self { + friendly_layers, + enemy_layers, + } + } +} + +/// A marker component for entities that have been cloned, and the primary +/// entity they were cloned from. +#[derive(Debug, Component)] +struct ClonedEntity(Entity); + +#[derive(Debug, WorldQuery)] +#[world_query(mutable)] +struct CloneQuery { + position: &'static mut Position, + head_yaw: &'static mut HeadYaw, + velocity: &'static mut Velocity, + look: &'static mut Look, + animations: &'static mut EntityAnimations, + on_ground: &'static mut OnGround, + statuses: &'static mut EntityStatuses, +} + +fn update_clones( + ents: Query>, + mut clone_ents: Query<(CloneQuery, &ClonedEntity, Entity)>, + mut commands: Commands, +) { + for clone in clone_ents.iter_mut() { + let (mut clone, cloned_from, ent) = clone; + let Ok(src) = ents.get(cloned_from.0) else { + commands.entity(ent).insert(Despawned); + return; + }; + + *clone.position = *src.position; + *clone.head_yaw = *src.head_yaw; + *clone.velocity = *src.velocity; + *clone.look = *src.look; + *clone.animations = *src.animations; + *clone.on_ground = *src.on_ground; + *clone.statuses = *src.statuses; + } +} + +/// Attached to every client. +#[derive(Component, Default)] +struct CombatState { + /// The tick the client was last attacked. + last_attacked_tick: i64, + has_bonus_knockback: bool, +} + +#[derive(WorldQuery)] +#[world_query(mutable)] +struct CombatQuery { + client: &'static mut Client, + pos: &'static Position, + state: &'static mut CombatState, + statuses: &'static mut EntityStatuses, + health: &'static mut Health, + inventory: &'static Inventory, + held_item: &'static HeldItem, + team: &'static Team, +} + +fn handle_combat_events( + server: Res, + mut clients: Query, + mut sprinting: EventReader, + mut interact_entity: EventReader, + clones: Query<&ClonedEntity>, +) { + for &SprintEvent { client, state } in sprinting.read() { + if let Ok(mut client) = clients.get_mut(client) { + client.state.has_bonus_knockback = state == SprintState::Start; + } + } + + for &InteractEntityEvent { + client: attacker_client, + entity: victim_client, + .. + } in interact_entity.read() + { + let true_victim_ent = clones + .get(victim_client) + .map(|cloned| cloned.0) + .unwrap_or(victim_client); + let Ok([mut attacker, mut victim]) = + clients.get_many_mut([attacker_client, true_victim_ent]) + else { + debug!("Failed to get clients for combat event"); + // Victim or attacker does not exist, or the attacker is attacking itself. + continue; + }; + + if attacker.team == victim.team { + // Attacker and victim are on the same team. + continue; + } + + if server.current_tick() - victim.state.last_attacked_tick < 10 { + // Victim is still on attack cooldown. + continue; + } + + victim.state.last_attacked_tick = server.current_tick(); + + let victim_pos = victim.pos.0.xz(); + let attacker_pos = attacker.pos.0.xz(); + + let dir = (victim_pos - attacker_pos).normalize().as_vec2(); + + let knockback_xz = if attacker.state.has_bonus_knockback { + 18.0 + } else { + 8.0 + }; + let knockback_y = if attacker.state.has_bonus_knockback { + 8.432 + } else { + 6.432 + }; + + victim + .client + .set_velocity([dir.x * knockback_xz, knockback_y, dir.y * knockback_xz]); + + attacker.state.has_bonus_knockback = false; + + victim.client.trigger_status(EntityStatus::PlayAttackSound); + victim.statuses.trigger(EntityStatus::PlayAttackSound); + + let stack = attacker.inventory.slot(attacker.held_item.slot()); + + let damage = match stack.item { + ItemKind::WoodenSword => 4.0, + ItemKind::StoneSword => 5.0, + ItemKind::IronSword => 6.0, + ItemKind::DiamondSword => 7.0, + _ => 1.0, + }; + + victim.health.0 -= damage; + } +} + +fn teleport_oob_clients(mut clients: Query<(&mut Position, &Team), With>) { + for (mut pos, team) in &mut clients { + if pos.0.y < 0.0 { + pos.set(team.spawn_pos()); + } + } +} + +/// Handles respawning dead players. +fn necromancy( + mut clients: Query<( + &mut VisibleChunkLayer, + &mut RespawnPosition, + &Team, + &mut Health, + )>, + mut events: EventReader, + layers: Query, With)>, +) { + for event in events.read() { + if let Ok((mut visible_chunk_layer, mut respawn_pos, team, mut health)) = + clients.get_mut(event.client) + { + respawn_pos.pos = team.spawn_pos().into(); + health.0 = PLAYER_MAX_HEALTH; + + let main_layer = layers.single(); + + // this gets the client to get rid of the respawn screen + visible_chunk_layer.0 = main_layer; + } + } +} + +fn update_scoreboard( + mut objectives: Query<&mut ObjectiveScores, With>, + score: Res, +) { + if !score.is_changed() { + return; + } + let mut s = objectives.single_mut(); + s.insert("Red", *score.scores.get(&Team::Red).unwrap_or(&0) as i32); + s.insert("Blue", *score.scores.get(&Team::Blue).unwrap_or(&0) as i32); +} diff --git a/vendor/valence/examples/custom_npc.rs b/vendor/valence/examples/custom_npc.rs new file mode 100644 index 00000000..2a5fbc5a --- /dev/null +++ b/vendor/valence/examples/custom_npc.rs @@ -0,0 +1,109 @@ +use valence::entity::player::PlayerEntityBundle; +use valence::player_list::{DisplayName, Listed, PlayerListEntryBundle}; +use valence::prelude::*; +use valence::text::IntoText; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + apply_custom_skin, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + let layer_id = commands.spawn(layer).id(); + + let npc_id = UniqueId::default(); + + commands.spawn(PlayerEntityBundle { + layer: EntityLayerId(layer_id), + uuid: npc_id, + position: Position::new((0.0, SPAWN_Y as f64 + 1.0, 6.0)), + look: Look::new(180.0, 0.0), + head_yaw: HeadYaw(180.0), + ..Default::default() + }); + + // In order for the player entity to be visible to other players, there must + // be an entry in the player list. + commands.spawn(PlayerListEntryBundle { + uuid: npc_id, + username: Username("Alice".into()), + // adjusts the appearance of the name in the player list only + display_name: DisplayName("Alice".color(Color::RED).into()), + // makes the fake player not appear in the player list + listed: Listed(false), + ..Default::default() + }); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, 65.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +fn apply_custom_skin(mut query: Query<&mut Properties, (Added, Without)>) { + for mut props in query.iter_mut() { + props.set_skin( + "ewogICJ0aW1lc3RhbXAiIDogMTY5MTcwNjU3MzE1NiwKICAicHJvZmlsZUlkIiA6ICJlODgyNzRlYjNmNTE0ZDYwYmMxYWQ5NTQ4MTIxODMwMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmltYWxUaGVHYW1lciIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8xZGUyYzgzZjhmNGZiMzgwNjlmNTVmNTJlNGY4ZWU1ZjA4NjcyMjllYWQ5MWI3ZTc5ZGVmNzU0YjcwZWE5NDMzIiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=", + "k/g8JTYB0A5O+h8+XSdw3QFEVHnzomDsGl6eubV/sE396yAL7E4qCT24r3Uv88YYforuET1BXG0GBOewcij3uMajm+mc/P7v+0+C+NSS9g5dpSs2e9MdeGZBgDEr1kTnXzQmayZUvLGitW23GuRDHdVHx76JZpxBk3q0VsjgncNs6UVZwfYNCaUGZZx38bqG5FXGxE0MfFHKiJawKwWRaoAbHjrfsByLipIKUhssUF3pt+HPWbgaOD2rO0EOLBrGzvEnu9oeLPH4tqdlvurjGrdpM4wKCmS3j8K91OBTABciVR9xt0fRnhbL4JoZuLK+iefNXx8nBCVEOm9sNk4pXHNWZvKEkqMb3jvpxuYHsSZPm0IdN+74FEmjHy0sY/7+ZG/h/IUHs4CyrPAtR/rqON6MG8nVVBxUq4kWV+2Xj+U+O02gQUVFqMM77AqArRsPIkeFIgVQ6+WvBZYXuRe1Ryo6qwjmYGc4AeTZTtvafzv8vfAMFfJJmT69nkTTDO5hAtDTUnCd86nNFQ3qijdO9CW7OFDyysb9M0a1O7pQ7Nu10rkNwY+6uTfKoATtT80+RoMzvKwcIAG4cY+PR5jhsKP+sf+AEymovD+cPVnLOuZQ6bAyKW6yjf9Xd0vyirCgNaU1CGmDE1mihGK2kC0fm11RaoDbyKvMcLKAq+OFos0=", + ); + } +} diff --git a/vendor/valence/examples/death.rs b/vendor/valence/examples/death.rs new file mode 100644 index 00000000..f6248421 --- /dev/null +++ b/vendor/valence/examples/death.rs @@ -0,0 +1,132 @@ +#![allow(clippy::type_complexity)] + +use valence::prelude::*; +use valence::status::RequestRespawnEvent; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + squat_and_die, + necromancy, + despawn_disconnected_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + for block in [ + BlockState::GRASS_BLOCK, + BlockState::DEEPSLATE, + BlockState::MAGMA_BLOCK, + ] { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer.chunk.set_block([x, SPAWN_Y, z], block); + } + } + + commands.spawn(layer); + } +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.iter().next().unwrap(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + + client.send_chat_message( + "Welcome to Valence! Sneak to die in the game (but not in real life).".italic(), + ); + } +} + +fn squat_and_die(mut clients: Query<&mut Client>, mut events: EventReader) { + for event in events.read() { + if event.state == SneakState::Start { + if let Ok(mut client) = clients.get_mut(event.client) { + client.kill("Squatted too hard."); + } + } + } +} + +fn necromancy( + mut clients: Query<( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut RespawnPosition, + )>, + mut events: EventReader, + layers: Query, With)>, +) { + for event in events.read() { + if let Ok(( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut respawn_pos, + )) = clients.get_mut(event.client) + { + respawn_pos.pos = BlockPos::new(0, SPAWN_Y, 0); + + // make the client respawn in another chunk layer. + + let idx = layers.iter().position(|l| l == layer_id.0).unwrap(); + let count = layers.iter().len(); + let layer = layers.into_iter().nth((idx + 1) % count).unwrap(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.clear(); + visible_entity_layers.0.insert(layer); + } + } +} diff --git a/vendor/valence/examples/entity_hitbox.rs b/vendor/valence/examples/entity_hitbox.rs new file mode 100644 index 00000000..29a4e24e --- /dev/null +++ b/vendor/valence/examples/entity_hitbox.rs @@ -0,0 +1,171 @@ +#![allow(clippy::type_complexity)] + +use std::collections::HashMap; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use entity::NameVisible; +use valence::entity::hoglin::HoglinEntityBundle; +use valence::entity::pig::PigEntityBundle; +use valence::entity::sheep::SheepEntityBundle; +use valence::entity::warden::WardenEntityBundle; +use valence::entity::zombie::ZombieEntityBundle; +use valence::entity::zombie_horse::ZombieHorseEntityBundle; +use valence::entity::{entity, Pose}; +use valence::prelude::*; +use valence::rand::Rng; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(Update, (init_clients, spawn_entity, intersections)) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer.chunk.set_block([x, 64, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, 65.0, 0.0]); + *game_mode = GameMode::Creative; + + client.send_chat_message("To spawn an entity, press shift. F3 + B to activate hitboxes"); + } +} + +fn spawn_entity( + mut commands: Commands, + mut sneaking: EventReader, + client_query: Query<(&Position, &EntityLayerId)>, +) { + for sneaking in sneaking.read() { + if sneaking.state == SneakState::Start { + continue; + } + + let (position, layer) = client_query.get(sneaking.client).unwrap(); + + let position = *position; + let layer = *layer; + + match rand::thread_rng().gen_range(0..7) { + 0 => commands.spawn(SheepEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + 1 => commands.spawn(PigEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + 2 => commands.spawn(ZombieEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + 3 => commands.spawn(ZombieHorseEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + 4 => commands.spawn(WardenEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + entity_pose: entity::Pose(Pose::Digging), + ..Default::default() + }), + 5 => commands.spawn(WardenEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + 6 => commands.spawn(HoglinEntityBundle { + position, + layer, + entity_name_visible: NameVisible(true), + ..Default::default() + }), + _ => unreachable!(), + }; + } +} + +fn intersections(query: Query<(Entity, &Hitbox)>, mut name_query: Query<&mut entity::CustomName>) { + // This code only to show how hitboxes can be used + let mut intersections = HashMap::new(); + + for [(entity1, hitbox1), (entity2, hitbox2)] in query.iter_combinations() { + let aabb1 = hitbox1.get(); + let aabb2 = hitbox2.get(); + + let _ = *intersections.entry(entity1).or_insert(0); + let _ = *intersections.entry(entity2).or_insert(0); + + if aabb1.intersects(aabb2) { + *intersections.get_mut(&entity1).unwrap() += 1; + *intersections.get_mut(&entity2).unwrap() += 1; + } + } + + for (entity, value) in intersections { + let Ok(mut name) = name_query.get_mut(entity) else { + continue; + }; + name.0 = Some(format!("{value}").into()); + } +} diff --git a/vendor/valence/examples/game_of_life.rs b/vendor/valence/examples/game_of_life.rs new file mode 100644 index 00000000..0f8add53 --- /dev/null +++ b/vendor/valence/examples/game_of_life.rs @@ -0,0 +1,240 @@ +#![allow(clippy::type_complexity)] + +use std::mem; + +use valence::prelude::*; + +const BOARD_MIN_X: i32 = -30; +const BOARD_MAX_X: i32 = 30; +const BOARD_MIN_Z: i32 = -30; +const BOARD_MAX_Z: i32 = 30; +const BOARD_Y: i32 = 64; + +const BOARD_SIZE_X: usize = (BOARD_MAX_X - BOARD_MIN_X + 1) as usize; +const BOARD_SIZE_Z: usize = (BOARD_MAX_Z - BOARD_MIN_Z + 1) as usize; + +const SPAWN_POS: DVec3 = DVec3::new( + (BOARD_MIN_X + BOARD_MAX_X) as f64 / 2.0, + BOARD_Y as f64 + 1.0, + (BOARD_MIN_Z + BOARD_MAX_Z) as f64 / 2.0, +); + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + toggle_cell_on_dig, + update_board, + pause_on_crouch, + reset_oob_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: ResMut, + mut biomes: ResMut, +) { + for (_, _, biome) in biomes.iter_mut() { + biome.effects.grass_color = Some(0x00ff00); + } + + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -10..10 { + for x in -10..10 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in BOARD_MIN_Z..=BOARD_MAX_Z { + for x in BOARD_MIN_X..=BOARD_MAX_X { + layer.chunk.set_block([x, BOARD_Y, z], BlockState::DIRT); + } + } + + commands.spawn(layer); + + commands.insert_resource(LifeBoard { + playing: false, + board: vec![false; BOARD_SIZE_X * BOARD_SIZE_Z].into(), + board_buf: vec![false; BOARD_SIZE_X * BOARD_SIZE_Z].into(), + }); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, 65.0, 0.0]); + *game_mode = GameMode::Survival; + + client.send_chat_message("Welcome to Conway's game of life in Minecraft!".italic()); + client.send_chat_message( + "Sneak to toggle running the simulation and the left mouse button to bring blocks to \ + life." + .italic(), + ); + } +} + +#[derive(Resource)] +struct LifeBoard { + pub playing: bool, + board: Box<[bool]>, + board_buf: Box<[bool]>, +} + +impl LifeBoard { + pub fn get(&self, x: i32, z: i32) -> bool { + if (BOARD_MIN_X..=BOARD_MAX_X).contains(&x) && (BOARD_MIN_Z..=BOARD_MAX_Z).contains(&z) { + let x = (x - BOARD_MIN_X) as usize; + let z = (z - BOARD_MIN_Z) as usize; + + self.board[x + z * BOARD_SIZE_X] + } else { + false + } + } + + pub fn set(&mut self, x: i32, z: i32, value: bool) { + if (BOARD_MIN_X..=BOARD_MAX_X).contains(&x) && (BOARD_MIN_Z..=BOARD_MAX_Z).contains(&z) { + let x = (x - BOARD_MIN_X) as usize; + let z = (z - BOARD_MIN_Z) as usize; + + self.board[x + z * BOARD_SIZE_X] = value; + } + } + + pub fn update(&mut self) { + for (idx, cell) in self.board_buf.iter_mut().enumerate() { + let x = (idx % BOARD_SIZE_X) as i32; + let z = (idx / BOARD_SIZE_X) as i32; + + let mut live_neighbors = 0; + + for cz in z - 1..=z + 1 { + for cx in x - 1..=x + 1 { + if !(cx == x && cz == z) { + let idx = cx.rem_euclid(BOARD_SIZE_X as i32) as usize + + cz.rem_euclid(BOARD_SIZE_Z as i32) as usize * BOARD_SIZE_X; + + live_neighbors += self.board[idx] as i32; + } + } + } + + let live = self.board[idx]; + if live { + *cell = (2..=3).contains(&live_neighbors); + } else { + *cell = live_neighbors == 3; + } + } + + mem::swap(&mut self.board, &mut self.board_buf); + } + + pub fn clear(&mut self) { + self.board.fill(false); + } +} + +fn toggle_cell_on_dig(mut events: EventReader, mut board: ResMut) { + for event in events.read() { + if event.state == DiggingState::Start { + let (x, z) = (event.position.x, event.position.z); + + let live = board.get(x, z); + board.set(x, z, !live); + } + } +} + +fn update_board( + mut board: ResMut, + mut layers: Query<&mut ChunkLayer>, + server: Res, +) { + if board.playing && server.current_tick() % 2 == 0 { + board.update(); + } + + let mut layer = layers.single_mut(); + + for z in BOARD_MIN_Z..=BOARD_MAX_Z { + for x in BOARD_MIN_X..=BOARD_MAX_X { + let block = if board.get(x, z) { + BlockState::GRASS_BLOCK + } else { + BlockState::DIRT + }; + + layer.set_block([x, BOARD_Y, z], block); + } + } +} + +fn pause_on_crouch( + mut events: EventReader, + mut board: ResMut, + mut layers: Query<&mut EntityLayer>, +) { + for event in events.read() { + if event.state == SneakState::Start { + let mut layer = layers.single_mut(); + + if board.playing { + board.playing = false; + layer.set_action_bar("Paused".italic().color(Color::RED)); + } else { + board.playing = true; + layer.set_action_bar("Playing".italic().color(Color::GREEN)); + } + } + } +} + +fn reset_oob_clients( + mut clients: Query<&mut Position, With>, + mut board: ResMut, +) { + for mut pos in &mut clients { + if pos.0.y < 0.0 { + pos.0 = SPAWN_POS; + board.clear(); + } + } +} diff --git a/vendor/valence/examples/parkour.rs b/vendor/valence/examples/parkour.rs new file mode 100644 index 00000000..806d1cdd --- /dev/null +++ b/vendor/valence/examples/parkour.rs @@ -0,0 +1,255 @@ +#![allow(clippy::type_complexity)] + +use std::collections::VecDeque; +use std::time::{SystemTime, UNIX_EPOCH}; + +use rand::seq::SliceRandom; +use rand::Rng; +use valence::prelude::*; +use valence::protocol::sound::{Sound, SoundCategory}; +use valence::spawn::IsFlat; + +const START_POS: BlockPos = BlockPos::new(0, 100, 0); +const VIEW_DIST: u8 = 10; + +const BLOCK_TYPES: [BlockState; 7] = [ + BlockState::GRASS_BLOCK, + BlockState::OAK_LOG, + BlockState::BIRCH_LOG, + BlockState::OAK_LEAVES, + BlockState::BIRCH_LEAVES, + BlockState::DIRT, + BlockState::MOSS_BLOCK, +]; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems( + Update, + ( + init_clients, + reset_clients.after(init_clients), + manage_chunks.after(reset_clients).before(manage_blocks), + manage_blocks, + despawn_disconnected_clients, + ), + ) + .run(); +} + +#[derive(Component)] +struct GameState { + blocks: VecDeque, + score: u32, + combo: u32, + target_y: i32, + last_block_timestamp: u128, +} + +fn init_clients( + mut clients: Query< + ( + Entity, + &mut Client, + &mut VisibleChunkLayer, + &mut IsFlat, + &mut GameMode, + ), + Added, + >, + server: Res, + dimensions: Res, + biomes: Res, + mut commands: Commands, +) { + for (entity, mut client, mut visible_chunk_layer, mut is_flat, mut game_mode) in + clients.iter_mut() + { + visible_chunk_layer.0 = entity; + is_flat.0 = true; + *game_mode = GameMode::Adventure; + + client.send_chat_message("Welcome to epic infinite parkour game!".italic()); + + let state = GameState { + blocks: VecDeque::new(), + score: 0, + combo: 0, + target_y: 0, + last_block_timestamp: 0, + }; + + let layer = ChunkLayer::new(ident!("overworld"), &dimensions, &biomes, &server); + + commands.entity(entity).insert((state, layer)); + } +} + +fn reset_clients( + mut clients: Query<( + &mut Client, + &mut Position, + &mut Look, + &mut GameState, + &mut ChunkLayer, + )>, +) { + for (mut client, mut pos, mut look, mut state, mut layer) in clients.iter_mut() { + let out_of_bounds = (pos.0.y as i32) < START_POS.y - 32; + + if out_of_bounds || state.is_added() { + if out_of_bounds && !state.is_added() { + client.send_chat_message( + "Your score was ".italic() + + state + .score + .to_string() + .color(Color::GOLD) + .bold() + .not_italic(), + ); + } + + // Init chunks. + for pos in ChunkView::new(START_POS.into(), VIEW_DIST).iter() { + layer.insert_chunk(pos, UnloadedChunk::new()); + } + + state.score = 0; + state.combo = 0; + + for block in &state.blocks { + layer.set_block(*block, BlockState::AIR); + } + state.blocks.clear(); + state.blocks.push_back(START_POS); + layer.set_block(START_POS, BlockState::STONE); + + for _ in 0..10 { + generate_next_block(&mut state, &mut layer, false); + } + + pos.set([ + START_POS.x as f64 + 0.5, + START_POS.y as f64 + 1.0, + START_POS.z as f64 + 0.5, + ]); + look.yaw = 0.0; + look.pitch = 0.0; + } + } +} + +fn manage_blocks(mut clients: Query<(&mut Client, &Position, &mut GameState, &mut ChunkLayer)>) { + for (mut client, pos, mut state, mut layer) in clients.iter_mut() { + let pos_under_player = BlockPos::new( + (pos.0.x - 0.5).round() as i32, + pos.0.y as i32 - 1, + (pos.0.z - 0.5).round() as i32, + ); + + if let Some(index) = state + .blocks + .iter() + .position(|block| *block == pos_under_player) + { + if index > 0 { + let power_result = 2.0f32.powf((state.combo as f32) / 45.0); + let max_time_taken = (1000.0f32 * (index as f32) / power_result) as u128; + + let current_time_millis = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis(); + + if current_time_millis - state.last_block_timestamp < max_time_taken { + state.combo += index as u32 + } else { + state.combo = 0 + } + + for _ in 0..index { + generate_next_block(&mut state, &mut layer, true) + } + + let pitch = 0.9 + ((state.combo as f32) - 1.0) * 0.05; + client.play_sound( + Sound::BlockNoteBlockBass, + SoundCategory::Master, + pos.0, + 1.0, + pitch, + ); + + client.set_title(""); + client.set_subtitle(state.score.to_string().color(Color::LIGHT_PURPLE).bold()); + } + } + } +} + +fn manage_chunks(mut clients: Query<(&Position, &OldPosition, &mut ChunkLayer), With>) { + for (pos, old_pos, mut layer) in &mut clients { + let old_view = ChunkView::new(old_pos.get().into(), VIEW_DIST); + let view = ChunkView::new(pos.0.into(), VIEW_DIST); + + if old_view != view { + for pos in old_view.diff(view) { + layer.remove_chunk(pos); + } + + for pos in view.diff(old_view) { + layer.chunk_entry(pos).or_default(); + } + } + } +} + +fn generate_next_block(state: &mut GameState, layer: &mut ChunkLayer, in_game: bool) { + if in_game { + let removed_block = state.blocks.pop_front().unwrap(); + layer.set_block(removed_block, BlockState::AIR); + + state.score += 1 + } + + let last_pos = *state.blocks.back().unwrap(); + let block_pos = generate_random_block(last_pos, state.target_y); + + if last_pos.y == START_POS.y { + state.target_y = 0 + } else if last_pos.y < START_POS.y - 30 || last_pos.y > START_POS.y + 30 { + state.target_y = START_POS.y; + } + + let mut rng = rand::thread_rng(); + + layer.set_block(block_pos, *BLOCK_TYPES.choose(&mut rng).unwrap()); + state.blocks.push_back(block_pos); + + // Combo System + state.last_block_timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis(); +} + +fn generate_random_block(pos: BlockPos, target_y: i32) -> BlockPos { + let mut rng = rand::thread_rng(); + + // if above or below target_y, change y to gradually reach it + let y = match target_y { + 0 => rng.gen_range(-1..2), + y if y > pos.y => 1, + _ => -1, + }; + let z = match y { + 1 => rng.gen_range(1..3), + -1 => rng.gen_range(2..5), + _ => rng.gen_range(1..4), + }; + let x = rng.gen_range(-3..4); + + BlockPos::new(pos.x + x, pos.y + y, pos.z + z) +} diff --git a/vendor/valence/examples/particles.rs b/vendor/valence/examples/particles.rs new file mode 100644 index 00000000..f230cd9f --- /dev/null +++ b/vendor/valence/examples/particles.rs @@ -0,0 +1,223 @@ +#![allow(clippy::type_complexity)] + +use std::fmt; + +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + (init_clients, despawn_disconnected_clients, manage_particles), + ) + .run(); +} + +#[derive(Resource)] +struct ParticleVec(Vec); + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + layer.chunk.set_block([0, SPAWN_Y, 0], BlockState::BEDROCK); + + commands.spawn(layer); + + commands.insert_resource(ParticleVec(create_particle_vec())); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +fn manage_particles( + particles: Res, + server: Res, + mut layers: Query<&mut ChunkLayer>, + mut particle_idx: Local, +) { + if server.current_tick() % 10 != 0 { + return; + } + + let particle = &particles.0[*particle_idx]; + + *particle_idx = (*particle_idx + 1) % particles.0.len(); + + let name = dbg_name(particle); + + let pos = [0.5, SPAWN_Y as f64 + 2.0, 5.0]; + let offset = [0.5, 0.5, 0.5]; + + let mut layer = layers.single_mut(); + + layer.play_particle(particle, true, pos, offset, 0.1, 100); + layer.set_action_bar(name.bold()); +} + +fn dbg_name(dbg: &impl fmt::Debug) -> String { + let string = format!("{dbg:?}"); + + string + .split_once(|ch: char| !ch.is_ascii_alphabetic()) + .map(|(fst, _)| fst.to_owned()) + .unwrap_or(string) +} + +fn create_particle_vec() -> Vec { + vec![ + Particle::AmbientEntityEffect, + Particle::AngryVillager, + Particle::Block(BlockState::OAK_PLANKS), + Particle::BlockMarker(BlockState::GOLD_BLOCK), + Particle::Bubble, + Particle::Cloud, + Particle::Crit, + Particle::DamageIndicator, + Particle::DragonBreath, + Particle::DrippingLava, + Particle::FallingLava, + Particle::LandingLava, + Particle::DrippingWater, + Particle::FallingWater, + Particle::Dust { + rgb: Vec3::new(1.0, 1.0, 0.0), + scale: 2.0, + }, + Particle::DustColorTransition { + from_rgb: Vec3::new(1.0, 0.0, 0.0), + scale: 2.0, + to_rgb: Vec3::new(0.0, 1.0, 0.0), + }, + Particle::Effect, + Particle::ElderGuardian, + Particle::EnchantedHit, + Particle::Enchant, + Particle::EndRod, + Particle::EntityEffect, + Particle::ExplosionEmitter, + Particle::Explosion, + Particle::SonicBoom, + Particle::FallingDust(BlockState::RED_SAND), + Particle::Firework, + Particle::Fishing, + Particle::Flame, + Particle::CherryLeaves, + Particle::SculkSoul, + Particle::SculkCharge { roll: 1.0 }, + Particle::SculkChargePop, + Particle::SoulFireFlame, + Particle::Soul, + Particle::Flash, + Particle::HappyVillager, + Particle::Composter, + Particle::Heart, + Particle::InstantEffect, + Particle::Item(ItemStack::EMPTY), + Particle::Item(ItemStack::new(ItemKind::IronPickaxe, 1, None)), + Particle::VibrationBlock { + block_pos: [0, SPAWN_Y, 0].into(), + ticks: 50, + }, + Particle::VibrationEntity { + entity_id: 0, + entity_eye_height: 1.0, + ticks: 50, + }, + Particle::ItemSlime, + Particle::ItemSnowball, + Particle::LargeSmoke, + Particle::Lava, + Particle::Mycelium, + Particle::Note, + Particle::Poof, + Particle::Portal, + Particle::Rain, + Particle::Smoke, + Particle::Sneeze, + Particle::Spit, + Particle::SquidInk, + Particle::SweepAttack, + Particle::TotemOfUndying, + Particle::Underwater, + Particle::Splash, + Particle::Witch, + Particle::BubblePop, + Particle::CurrentDown, + Particle::BubbleColumnUp, + Particle::Nautilus, + Particle::Dolphin, + Particle::CampfireCosySmoke, + Particle::CampfireSignalSmoke, + Particle::DrippingHoney, + Particle::FallingHoney, + Particle::LandingHoney, + Particle::FallingNectar, + Particle::FallingSporeBlossom, + Particle::Ash, + Particle::CrimsonSpore, + Particle::WarpedSpore, + Particle::SporeBlossomAir, + Particle::DrippingObsidianTear, + Particle::FallingObsidianTear, + Particle::LandingObsidianTear, + Particle::ReversePortal, + Particle::WhiteAsh, + Particle::SmallFlame, + Particle::Snowflake, + Particle::DrippingDripstoneLava, + Particle::FallingDripstoneLava, + Particle::DrippingDripstoneWater, + Particle::FallingDripstoneWater, + Particle::GlowSquidInk, + Particle::Glow, + Particle::WaxOn, + Particle::WaxOff, + Particle::ElectricSpark, + Particle::Scrape, + Particle::Shriek { delay: 0 }, + Particle::EggCrack, + ] +} diff --git a/vendor/valence/examples/player_list.rs b/vendor/valence/examples/player_list.rs new file mode 100644 index 00000000..8b363528 --- /dev/null +++ b/vendor/valence/examples/player_list.rs @@ -0,0 +1,140 @@ +#![allow(clippy::type_complexity)] + +use rand::Rng; +use valence::keepalive::Ping; +use valence::player_list::{DisplayName, PlayerListEntryBundle}; +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; +const PLAYER_UUID_1: Uuid = Uuid::from_u128(1); +const PLAYER_UUID_2: Uuid = Uuid::from_u128(2); + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + override_display_name, + update_player_list, + despawn_disconnected_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::LIGHT_GRAY_WOOL); + } + } + + commands.spawn(layer); + + commands.spawn(PlayerListEntryBundle { + uuid: UniqueId(PLAYER_UUID_1), + display_name: DisplayName(Some("persistent entry with no ping".into())), + ..Default::default() + }); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + + client.send_chat_message( + "Please open your player list (tab key)." + .italic() + .color(Color::WHITE), + ); + } +} + +fn override_display_name(mut clients: Query<&mut DisplayName, (Added, With)>) { + for mut display_name in &mut clients { + display_name.0 = Some("ඞ".color(Color::rgb(255, 87, 66))); + } +} + +fn update_player_list( + mut player_list: ResMut, + server: Res, + mut entries: Query<(Entity, &UniqueId, &mut DisplayName), With>, + mut commands: Commands, +) { + let tick = server.current_tick(); + + player_list.set_header("Current tick: ".into_text() + tick); + player_list + .set_footer("Current tick but in purple: ".into_text() + tick.color(Color::LIGHT_PURPLE)); + + if tick % 5 == 0 { + for (_, uuid, mut display_name) in &mut entries { + if uuid.0 == PLAYER_UUID_1 { + let mut rng = rand::thread_rng(); + let color = Color::rgb(rng.gen(), rng.gen(), rng.gen()); + + let new_name = display_name.0.clone().unwrap_or_default().color(color); + display_name.0 = Some(new_name); + } + } + } + + if tick % 20 == 0 { + if let Some((entity, _, _)) = entries.iter().find(|(_, uuid, _)| uuid.0 == PLAYER_UUID_2) { + commands.entity(entity).insert(Despawned); + } else { + commands.spawn(PlayerListEntryBundle { + uuid: UniqueId(PLAYER_UUID_2), + display_name: DisplayName(Some("Hello!".into())), + ping: Ping(300), + ..Default::default() + }); + } + } +} diff --git a/vendor/valence/examples/potions.rs b/vendor/valence/examples/potions.rs new file mode 100644 index 00000000..607610a9 --- /dev/null +++ b/vendor/valence/examples/potions.rs @@ -0,0 +1,334 @@ +use rand::seq::SliceRandom; +use rand::Rng; +use valence::client::despawn_disconnected_clients; +use valence::entity::active_status_effects::{ActiveStatusEffect, ActiveStatusEffects}; +use valence::log::LogPlugin; +use valence::network::ConnectionMode; +use valence::prelude::*; +use valence::status_effects::{AttributeModifier, StatusEffect}; +use valence_server::entity::attributes::{EntityAttribute, EntityAttributes}; +use valence_server::entity::entity::Flags; +use valence_server::entity::living::{Absorption, Health}; +use valence_server::status_effect::{StatusEffectAdded, StatusEffectRemoved}; + +const SPAWN_Y: i32 = 64; + +// Notes: Some potion effects are implemented by the client (i.e. we don't need +// to send any more packets than just telling the client about them) and some +// are implemented by the server. The ones implemented by the client are: +// - Jump Boost +// - Night Vision +// - Nausea +// - Blindness +// - Darkness +// - Slow Falling +// - Levitation +// Perhaps also (haven't tested): +// - Dolphin's Grace +// - Conduit Power +// +// There are also a few different potion effects that are implemented by the +// server. Some can be implemented right now, for example: +// - Speed +// - Instant Health +// - Regeneration +// - Absorption +// - Glowing +// - etc. (i.e. the ones with AttributeModifiers, direct health changes or other +// trivial effects) +// +// Some can't be implemented right now because they require features that aren't +// implemented yet or must be implemented yourself, for example: +// - Water Breathing (requires the ability to breathe underwater) +// - Fire Resistance (requires the ability to not take damage from fire) +// - Hunger (requires the ability to get hungry) +// - Bad Omen (requires the ability to get a raid) +fn main() { + App::new() + .insert_resource(NetworkSettings { + connection_mode: ConnectionMode::Offline, + ..Default::default() + }) + .add_plugins(DefaultPlugins.build().disable::()) + .add_systems(Startup, setup) + .add_systems( + EventLoopUpdate, + ( + add_potion_effect, + handle_status_effect_added, + handle_status_effect_removed, + ), + ) + .add_systems( + Update, + ( + init_clients, + despawn_disconnected_clients, + handle_status_effect_update, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + biomes: Res, + dimensions: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +#[allow(clippy::type_complexity)] +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Survival; + + client.send_chat_message("Welcome to the potions example.".bold()); + client.send_chat_message("Sneak to apply a random potion effect.".into_text()); + client.send_chat_message("Note: Some potion effects are not implemented yet.".into_text()); + } +} + +pub fn add_potion_effect( + mut clients: Query<&mut ActiveStatusEffects>, + mut events: EventReader, +) { + let mut rng = rand::thread_rng(); + for event in events.read() { + if event.state == SneakState::Start { + if let Ok(mut status) = clients.get_mut(event.client) { + status.apply( + ActiveStatusEffect::from_effect(*StatusEffect::ALL.choose(&mut rng).unwrap()) + .with_duration(rng.gen_range(10..1000)) + .with_amplifier(rng.gen_range(0..5)), + ); + } + } + } +} + +fn adjust_modifier_amount(amplifier: u8, amount: f64) -> f64 { + amount * (amplifier + 1) as f64 +} + +fn apply_potion_attribute( + attributes: &mut Mut, + health: &mut Option>, + amplifier: u8, + attr: AttributeModifier, +) { + attributes.remove_modifier(attr.attribute, attr.uuid); + + let amount = adjust_modifier_amount(amplifier, attr.value); + + attributes.set_modifier(attr.attribute, attr.uuid, amount, attr.operation); + + // not quite how vanilla does it, but it's close enough + if attr.attribute == EntityAttribute::GenericMaxHealth { + if let Some(ref mut health) = health { + health.0 = health.0.min( + attributes + .get_compute_value(EntityAttribute::GenericMaxHealth) + .unwrap_or(0.0) as f32, + ); + } + } +} + +fn remove_potion_attribute( + attributes: &mut Mut, + health: &mut Option>, + attr: AttributeModifier, +) { + attributes.remove_modifier(attr.attribute, attr.uuid); + + if attr.attribute == EntityAttribute::GenericMaxHealth { + if let Some(ref mut health) = health { + health.0 = health.0.min( + attributes + .get_compute_value(EntityAttribute::GenericMaxHealth) + .unwrap_or(0.0) as f32, + ); + } + } +} + +#[allow(clippy::type_complexity)] +pub fn handle_status_effect_added( + mut clients: Query<( + &ActiveStatusEffects, + &mut EntityAttributes, + Option<&mut Health>, + Option<&mut Absorption>, + &mut Flags, + )>, + mut events: EventReader, +) { + for event in events.read() { + if let Ok((status, mut attributes, mut health, absorption, mut flags)) = + clients.get_mut(event.entity) + { + let effect = status.get_current_effect(event.status_effect).unwrap(); + + match event.status_effect { + StatusEffect::Absorption => { + // not quite how vanilla does it. if you want to do it the vanilla way, you'll + // need to keep track of the previous absorption value and subtract that from + // the new value (because you can take damage while having absorption) + if let Some(mut absorption) = absorption { + absorption.0 += (effect.amplifier() + 1) as f32 * 4.0; + } + } + StatusEffect::InstantHealth => { + if let Some(mut health) = health { + health.0 += (4 << effect.amplifier().min(31)) as f32; + } + } + StatusEffect::InstantDamage => { + if let Some(mut health) = health { + health.0 -= (6 << effect.amplifier().min(31)) as f32; + } + } + StatusEffect::Glowing => { + flags.set_glowing(true); + } + StatusEffect::Invisibility => { + flags.set_invisible(true); + } + status => { + for attr in status.attribute_modifiers() { + apply_potion_attribute( + &mut attributes, + &mut health, + effect.amplifier(), + attr, + ); + } + } + } + } + } +} + +pub fn handle_status_effect_removed( + mut clients: Query<( + &mut EntityAttributes, + Option<&mut Health>, + Option<&mut Absorption>, + &mut Flags, + )>, + mut events: EventReader, +) { + for event in events.read() { + if let Ok((mut attributes, mut health, absorption, mut flags)) = + clients.get_mut(event.entity) + { + let effect = &event.status_effect; + match effect.status_effect() { + StatusEffect::Absorption => { + if let Some(mut absorption) = absorption { + absorption.0 -= (effect.amplifier() + 1) as f32 * 4.0; + } + } + StatusEffect::Glowing => { + flags.set_glowing(false); + } + StatusEffect::Invisibility => { + flags.set_invisible(false); + } + status => { + for attr in status.attribute_modifiers() { + remove_potion_attribute(&mut attributes, &mut health, attr); + } + } + } + } + } +} + +pub fn handle_status_effect_update( + mut clients: Query<(&ActiveStatusEffects, &EntityAttributes, Option<&mut Health>)>, +) { + for (status, attributes, mut health) in &mut clients.iter_mut() { + for effect in status.get_current_effects() { + match effect.status_effect() { + StatusEffect::Regeneration => { + let i = 50 >> effect.amplifier().min(31) as u32; + + if i == 0 || effect.active_ticks() % i == 0 { + if let Some(ref mut health) = health { + health.0 = (health.0 + 1.0).min( + attributes + .get_compute_value(EntityAttribute::GenericMaxHealth) + .unwrap_or(0.0) as f32, + ); + } + } + } + StatusEffect::Poison => { + let i = 25 >> effect.amplifier().min(31) as u32; + + if i == 0 || effect.active_ticks() % i == 0 { + if let Some(ref mut health) = health { + health.0 = (health.0 - 1.0).max(1.0); + } + } + } + StatusEffect::Wither => { + let i = 40 >> effect.amplifier().min(31) as u32; + + if i == 0 || effect.active_ticks() % i == 0 { + if let Some(ref mut health) = health { + health.0 = (health.0 - 1.0).max(0.0); + } + } + } + _ => {} + } + } + } +} diff --git a/vendor/valence/examples/resource_pack.rs b/vendor/valence/examples/resource_pack.rs new file mode 100644 index 00000000..fa7228cd --- /dev/null +++ b/vendor/valence/examples/resource_pack.rs @@ -0,0 +1,132 @@ +#![allow(clippy::type_complexity)] + +use valence::entity::sheep::SheepEntityBundle; +use valence::message::SendMessage; +use valence::prelude::*; +use valence::protocol::packets::play::ResourcePackStatusC2s; +use valence::resource_pack::ResourcePackStatusEvent; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + init_clients, + prompt_on_punch, + on_resource_pack_status, + despawn_disconnected_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer.chunk.set_block([x, SPAWN_Y, z], BlockState::BEDROCK); + } + } + + let layer_ent = commands.spawn(layer).id(); + + commands.spawn(SheepEntityBundle { + layer: EntityLayerId(layer_ent), + position: Position::new([0.0, SPAWN_Y as f64 + 1.0, 2.0]), + look: Look::new(180.0, 0.0), + head_yaw: HeadYaw(180.0), + ..Default::default() + }); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + + client.send_chat_message("Hit the sheep to prompt for the resource pack.".italic()); + } +} + +fn prompt_on_punch(mut clients: Query<&mut Client>, mut events: EventReader) { + for event in events.read() { + if let Ok(mut client) = clients.get_mut(event.client) { + if event.interact == EntityInteraction::Attack { + client.set_resource_pack( + "https://github.com/valence-rs/valence/raw/main/assets/example_pack.zip", + "d7c6108849fb190ec2a49f2d38b7f1f897d9ce9f", + false, + None, + ); + } + }; + } +} + +fn on_resource_pack_status( + mut clients: Query<&mut Client>, + mut events: EventReader, +) { + for event in events.read() { + if let Ok(mut client) = clients.get_mut(event.client) { + match event.status { + ResourcePackStatusC2s::Accepted => { + client.send_chat_message("Resource pack accepted.".color(Color::GREEN)); + } + ResourcePackStatusC2s::Declined => { + client.send_chat_message("Resource pack declined.".color(Color::RED)); + } + ResourcePackStatusC2s::FailedDownload => { + client.send_chat_message("Resource pack failed to download.".color(Color::RED)); + } + ResourcePackStatusC2s::SuccessfullyLoaded => { + client.send_chat_message( + "Resource pack successfully downloaded.".color(Color::BLUE), + ); + } + } + }; + } +} diff --git a/vendor/valence/examples/server_list_ping.rs b/vendor/valence/examples/server_list_ping.rs new file mode 100644 index 00000000..f0d39c59 --- /dev/null +++ b/vendor/valence/examples/server_list_ping.rs @@ -0,0 +1,63 @@ +#![allow(clippy::type_complexity)] + +use std::net::SocketAddr; + +use rand::Rng; +use valence::network::{ + async_trait, BroadcastToLan, CleanupFn, ConnectionMode, HandshakeData, PlayerSampleEntry, + ServerListPing, +}; +use valence::prelude::*; +use valence::MINECRAFT_VERSION; + +pub fn main() { + App::new() + .insert_resource(NetworkSettings { + connection_mode: ConnectionMode::Offline, + callbacks: MyCallbacks.into(), + ..Default::default() + }) + .add_plugins(DefaultPlugins) + .run(); +} + +struct MyCallbacks; + +#[async_trait] +impl NetworkCallbacks for MyCallbacks { + async fn server_list_ping( + &self, + _shared: &SharedNetworkState, + remote_addr: SocketAddr, + handshake_data: &HandshakeData, + ) -> ServerListPing { + let max_players = 420; + + ServerListPing::Respond { + online_players: rand::thread_rng().gen_range(0..=max_players), + max_players, + player_sample: vec![PlayerSampleEntry { + name: "foobar".into(), + id: Uuid::from_u128(12345), + }], + description: "Your IP address is ".into_text() + + remote_addr.to_string().color(Color::rgb(50, 50, 250)), + favicon_png: include_bytes!("../assets/logo-64x64.png"), + version_name: ("Valence ".color(Color::GOLD) + MINECRAFT_VERSION.color(Color::RED)) + .to_legacy_lossy(), + protocol: handshake_data.protocol_version, + } + } + + async fn broadcast_to_lan(&self, _shared: &SharedNetworkState) -> BroadcastToLan { + BroadcastToLan::Enabled("Hello Valence!".into()) + } + + async fn login( + &self, + _shared: &SharedNetworkState, + _info: &NewClientInfo, + ) -> Result { + Err("You are not meant to join this example".color(Color::RED)) + } +} diff --git a/vendor/valence/examples/terrain.rs b/vendor/valence/examples/terrain.rs new file mode 100644 index 00000000..f7aee57d --- /dev/null +++ b/vendor/valence/examples/terrain.rs @@ -0,0 +1,366 @@ +#![allow(clippy::type_complexity)] + +use std::collections::hash_map::Entry; +use std::collections::HashMap; +use std::sync::Arc; +use std::thread; +use std::time::SystemTime; + +use flume::{Receiver, Sender}; +use noise::{NoiseFn, SuperSimplex}; +use tracing::info; +use valence::prelude::*; +use valence::spawn::IsFlat; + +const SPAWN_POS: DVec3 = DVec3::new(0.0, 200.0, 0.0); +const HEIGHT: u32 = 384; + +struct ChunkWorkerState { + sender: Sender<(ChunkPos, UnloadedChunk)>, + receiver: Receiver, + // Noise functions + density: SuperSimplex, + hilly: SuperSimplex, + stone: SuperSimplex, + gravel: SuperSimplex, + grass: SuperSimplex, +} + +#[derive(Resource)] +struct GameState { + /// Chunks that need to be generated. Chunks without a priority have already + /// been sent to the thread pool. + pending: HashMap>, + sender: Sender, + receiver: Receiver<(ChunkPos, UnloadedChunk)>, +} + +/// The order in which chunks should be processed by the thread pool. Smaller +/// values are sent first. +type Priority = u64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + ( + init_clients, + remove_unviewed_chunks, + update_client_views, + send_recv_chunks, + ) + .chain(), + despawn_disconnected_clients, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let seconds_per_day = 86_400; + let seed = (SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap() + .as_secs() + / seconds_per_day) as u32; + + info!("current seed: {seed}"); + + let (finished_sender, finished_receiver) = flume::unbounded(); + let (pending_sender, pending_receiver) = flume::unbounded(); + + let state = Arc::new(ChunkWorkerState { + sender: finished_sender, + receiver: pending_receiver, + density: SuperSimplex::new(seed), + hilly: SuperSimplex::new(seed.wrapping_add(1)), + stone: SuperSimplex::new(seed.wrapping_add(2)), + gravel: SuperSimplex::new(seed.wrapping_add(3)), + grass: SuperSimplex::new(seed.wrapping_add(4)), + }); + + // Chunks are generated in a thread pool for parallelism and to avoid blocking + // the main tick loop. You can use your thread pool of choice here (rayon, + // bevy_tasks, etc). Only the standard library is used in the example for the + // sake of simplicity. + // + // If your chunk generation algorithm is inexpensive then there's no need to do + // this. + for _ in 0..thread::available_parallelism().unwrap().get() { + let state = state.clone(); + thread::spawn(move || chunk_worker(state)); + } + + commands.insert_resource(GameState { + pending: HashMap::new(), + sender: pending_sender, + receiver: finished_receiver, + }); + + let layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + &mut IsFlat, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + mut is_flat, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set(SPAWN_POS); + *game_mode = GameMode::Creative; + is_flat.0 = true; + } +} + +fn remove_unviewed_chunks(mut layers: Query<&mut ChunkLayer>) { + layers + .single_mut() + .retain_chunks(|_, chunk| chunk.viewer_count_mut() > 0); +} + +fn update_client_views( + mut layers: Query<&mut ChunkLayer>, + mut clients: Query<(&mut Client, View, OldView)>, + mut state: ResMut, +) { + let layer = layers.single_mut(); + + for (client, view, old_view) in &mut clients { + let view = view.get(); + let queue_pos = |pos: ChunkPos| { + if layer.chunk(pos).is_none() { + match state.pending.entry(pos) { + Entry::Occupied(mut oe) => { + if let Some(priority) = oe.get_mut() { + let dist = view.pos.distance_squared(pos); + *priority = (*priority).min(dist); + } + } + Entry::Vacant(ve) => { + let dist = view.pos.distance_squared(pos); + ve.insert(Some(dist)); + } + } + } + }; + + // Queue all the new chunks in the view to be sent to the thread pool. + if client.is_added() { + view.iter().for_each(queue_pos); + } else { + let old_view = old_view.get(); + if old_view != view { + view.diff(old_view).for_each(queue_pos); + } + } + } +} + +fn send_recv_chunks(mut layers: Query<&mut ChunkLayer>, state: ResMut) { + let mut layer = layers.single_mut(); + let state = state.into_inner(); + + // Insert the chunks that are finished generating into the instance. + for (pos, chunk) in state.receiver.drain() { + layer.insert_chunk(pos, chunk); + assert!(state.pending.remove(&pos).is_some()); + } + + // Collect all the new chunks that need to be loaded this tick. + let mut to_send = vec![]; + + for (pos, priority) in &mut state.pending { + if let Some(pri) = priority.take() { + to_send.push((pri, pos)); + } + } + + // Sort chunks by ascending priority. + to_send.sort_unstable_by_key(|(pri, _)| *pri); + + // Send the sorted chunks to be loaded. + for (_, pos) in to_send { + let _ = state.sender.try_send(*pos); + } +} + +fn chunk_worker(state: Arc) { + while let Ok(pos) = state.receiver.recv() { + let mut chunk = UnloadedChunk::with_height(HEIGHT); + + for offset_z in 0..16 { + for offset_x in 0..16 { + let x = offset_x as i32 + pos.x * 16; + let z = offset_z as i32 + pos.z * 16; + + let mut in_terrain = false; + let mut depth = 0; + + // Fill in the terrain column. + for y in (0..chunk.height() as i32).rev() { + const WATER_HEIGHT: i32 = 55; + + let p = DVec3::new(x as f64, y as f64, z as f64); + + let block = if has_terrain_at(&state, p) { + let gravel_height = WATER_HEIGHT + - 1 + - (fbm(&state.gravel, p / 10.0, 3, 2.0, 0.5) * 6.0).floor() as i32; + + if in_terrain { + if depth > 0 { + depth -= 1; + if y < gravel_height { + BlockState::GRAVEL + } else { + BlockState::DIRT + } + } else { + BlockState::STONE + } + } else { + in_terrain = true; + let n = noise01(&state.stone, p / 15.0); + + depth = (n * 5.0).round() as u32; + + if y < gravel_height { + BlockState::GRAVEL + } else if y < WATER_HEIGHT - 1 { + BlockState::DIRT + } else { + BlockState::GRASS_BLOCK + } + } + } else { + in_terrain = false; + depth = 0; + if y < WATER_HEIGHT { + BlockState::WATER + } else { + BlockState::AIR + } + }; + + chunk.set_block_state(offset_x, y as u32, offset_z, block); + } + + // Add grass on top of grass blocks. + for y in (0..chunk.height()).rev() { + if chunk.block_state(offset_x, y, offset_z).is_air() + && chunk.block_state(offset_x, y - 1, offset_z) == BlockState::GRASS_BLOCK + { + let p = DVec3::new(x as f64, y as f64, z as f64); + let density = fbm(&state.grass, p / 5.0, 4, 2.0, 0.7); + + if density > 0.55 { + if density > 0.7 + && chunk.block_state(offset_x, y + 1, offset_z).is_air() + { + let upper = + BlockState::TALL_GRASS.set(PropName::Half, PropValue::Upper); + let lower = + BlockState::TALL_GRASS.set(PropName::Half, PropValue::Lower); + + chunk.set_block_state(offset_x, y + 1, offset_z, upper); + chunk.set_block_state(offset_x, y, offset_z, lower); + } else { + chunk.set_block_state(offset_x, y, offset_z, BlockState::GRASS); + } + } + } + } + } + } + + let _ = state.sender.try_send((pos, chunk)); + } +} + +fn has_terrain_at(state: &ChunkWorkerState, p: DVec3) -> bool { + let hilly = lerp(0.1, 1.0, noise01(&state.hilly, p / 400.0)).powi(2); + + let lower = 15.0 + 100.0 * hilly; + let upper = lower + 100.0 * hilly; + + if p.y <= lower { + return true; + } else if p.y >= upper { + return false; + } + + let density = 1.0 - lerpstep(lower, upper, p.y); + + let n = fbm(&state.density, p / 100.0, 4, 2.0, 0.5); + + n < density +} + +fn lerp(a: f64, b: f64, t: f64) -> f64 { + a * (1.0 - t) + b * t +} + +fn lerpstep(edge0: f64, edge1: f64, x: f64) -> f64 { + if x <= edge0 { + 0.0 + } else if x >= edge1 { + 1.0 + } else { + (x - edge0) / (edge1 - edge0) + } +} + +fn fbm(noise: &SuperSimplex, p: DVec3, octaves: u32, lacunarity: f64, persistence: f64) -> f64 { + let mut freq = 1.0; + let mut amp = 1.0; + let mut amp_sum = 0.0; + let mut sum = 0.0; + + for _ in 0..octaves { + let n = noise01(noise, p * freq); + sum += n * amp; + amp_sum += amp; + + freq *= lacunarity; + amp *= persistence; + } + + // Scale the output to [0, 1] + sum / amp_sum +} + +fn noise01(noise: &SuperSimplex, p: DVec3) -> f64 { + (noise.get(p.to_array()) + 1.0) / 2.0 +} diff --git a/vendor/valence/examples/text.rs b/vendor/valence/examples/text.rs new file mode 100644 index 00000000..8a7ed9eb --- /dev/null +++ b/vendor/valence/examples/text.rs @@ -0,0 +1,150 @@ +#![allow(clippy::type_complexity)] + +use valence::lang::keys; +use valence::prelude::*; + +const SPAWN_Y: i32 = 64; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(Update, (init_clients, despawn_disconnected_clients)) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut Position, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut client, + mut pos, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + pos.0 = [0.0, SPAWN_Y as f64 + 1.0, 0.0].into(); + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + *game_mode = GameMode::Creative; + + client.send_chat_message("Welcome to the text example.".bold()); + client.send_chat_message( + "The following examples show ways to use the different text components.", + ); + + // Text examples + client.send_chat_message("\nText"); + client.send_chat_message(" - ".into_text() + Text::text("Plain text")); + client.send_chat_message(" - ".into_text() + Text::text("Styled text").italic()); + client.send_chat_message(" - ".into_text() + Text::text("Colored text").color(Color::GOLD)); + client.send_chat_message( + " - ".into_text() + + Text::text("Colored and styled text") + .color(Color::GOLD) + .italic() + .underlined(), + ); + + // Translated text examples + client.send_chat_message("\nTranslated Text"); + client.send_chat_message( + " - 'chat.type.advancement.task': ".into_text() + + Text::translate(keys::CHAT_TYPE_ADVANCEMENT_TASK, []), + ); + client.send_chat_message( + " - 'chat.type.advancement.task' with slots: ".into_text() + + Text::translate( + keys::CHAT_TYPE_ADVANCEMENT_TASK, + ["arg1".into(), "arg2".into()], + ), + ); + client.send_chat_message( + " - 'custom.translation_key': ".into_text() + + Text::translate("custom.translation_key", []), + ); + + // Scoreboard value example + client.send_chat_message("\nScoreboard Values"); + client.send_chat_message(" - Score: ".into_text() + Text::score("*", "objective", None)); + client.send_chat_message( + " - Score with custom value: ".into_text() + + Text::score("*", "objective", Some("value".into())), + ); + + // Entity names example + client.send_chat_message("\nEntity Names (Selector)"); + client.send_chat_message(" - Nearest player: ".into_text() + Text::selector("@p", None)); + client.send_chat_message(" - Random player: ".into_text() + Text::selector("@r", None)); + client.send_chat_message(" - All players: ".into_text() + Text::selector("@a", None)); + client.send_chat_message(" - All entities: ".into_text() + Text::selector("@e", None)); + client.send_chat_message( + " - All entities with custom separator: ".into_text() + + Text::selector("@e", Some(", ".into_text().color(Color::GOLD))), + ); + + // Keybind example + client.send_chat_message("\nKeybind"); + client + .send_chat_message(" - 'key.inventory': ".into_text() + Text::keybind("key.inventory")); + + // NBT examples + client.send_chat_message("\nNBT"); + client.send_chat_message( + " - Block NBT: ".into_text() + Text::block_nbt("{}", "0 1 0", None, None), + ); + client.send_chat_message( + " - Entity NBT: ".into_text() + Text::entity_nbt("{}", "@a", None, None), + ); + client.send_chat_message( + " - Storage NBT: ".into_text() + + Text::storage_nbt(ident!("storage.key"), "@a", None, None), + ); + + client.send_chat_message( + "\n\n↑ ".into_text().bold().color(Color::GOLD) + + "Scroll up to see the full example!".into_text().not_bold(), + ); + } +} diff --git a/vendor/valence/examples/weather.rs b/vendor/valence/examples/weather.rs new file mode 100644 index 00000000..5d7cd645 --- /dev/null +++ b/vendor/valence/examples/weather.rs @@ -0,0 +1,126 @@ +use std::f64::consts::TAU; + +use valence::prelude::*; +use valence::weather::{Rain, Thunder, WeatherBundle}; +use valence_server::nbt::{compound, List}; + +pub fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + (init_clients, despawn_disconnected_clients, change_weather), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + dimensions: Res, + biomes: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -16..16 { + for x in 0..16 { + layer.chunk.set_block([x, -64, z], BlockState::GRASS_BLOCK); + layer + .chunk + .set_block([-x, x - 64, z], BlockState::GRASS_BLOCK); + } + } + + layer.chunk.set_block( + [8, -63, 2], + Block { + state: BlockState::OAK_SIGN.set(PropName::Rotation, PropValue::_8), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "Some blocks do".into_text().into(), + "not block motion".into_text().into(), + "such as rain.".into_text().into(), + "(e.g. a sapling)".into_text().into(), + ]), + } + }), + }, + ); + layer.chunk.set_block([7, -63, 2], BlockState::OAK_SAPLING); + + layer.chunk.set_block( + [6, -63, 2], + Block { + state: BlockState::OAK_SIGN.set(PropName::Rotation, PropValue::_8), + nbt: Some(compound! { + "front_text" => compound! { + "messages" => List::String(vec![ + "However, liquids".into_text().into(), + "and waterlogged".into_text().into(), + "blocks do.".into_text().into(), + "".into_text().into(), + ]), + } + }), + }, + ); + layer.chunk.set_block( + [5, -63, 2], + BlockState::POWERED_RAIL.set(PropName::Waterlogged, PropValue::True), + ); + + commands.spawn((layer, WeatherBundle::default())); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([8.0, -63.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +fn change_weather( + mut layers: Query<(&mut Rain, &mut Thunder), With>, + server: Res, +) { + let period = 10.0; + + let level = ((server.current_tick() as f64 / 20.0 * TAU / period).sin() + 1.0) / 2.0; + + for (mut rain, mut thunder) in &mut layers { + rain.0 = level as f32; + thunder.0 = level as f32; + } +} diff --git a/vendor/valence/examples/world_border.rs b/vendor/valence/examples/world_border.rs new file mode 100644 index 00000000..a6903751 --- /dev/null +++ b/vendor/valence/examples/world_border.rs @@ -0,0 +1,145 @@ +#![allow(clippy::type_complexity)] + +use bevy_app::App; +use valence::client::despawn_disconnected_clients; +use valence::inventory::HeldItem; +use valence::message::{ChatMessageEvent, SendMessage}; +use valence::prelude::*; +use valence::world_border::*; + +const SPAWN_Y: i32 = 64; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + despawn_disconnected_clients, + init_clients, + border_controls, + display_diameter, + ), + ) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + biomes: Res, + dimensions: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::MOSSY_COBBLESTONE); + } + } + + commands.spawn(( + layer, + WorldBorderBundle { + lerp: WorldBorderLerp { + target_diameter: 10.0, + ..Default::default() + }, + ..Default::default() + }, + )); +} + +fn init_clients( + mut clients: Query< + ( + &mut Client, + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut Inventory, + &HeldItem, + ), + Added, + >, + layers: Query>, +) { + for ( + mut client, + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut inv, + main_slot, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.5, SPAWN_Y as f64 + 1.0, 0.5]); + let pickaxe = ItemStack::new(ItemKind::WoodenPickaxe, 1, None); + inv.set_slot(main_slot.slot(), pickaxe); + client + .send_chat_message("Use `add` and `center` chat messages to change the world border."); + } +} + +fn display_diameter(mut layers: Query<(&mut ChunkLayer, &WorldBorderLerp)>) { + for (mut layer, lerp) in &mut layers { + if lerp.remaining_ticks > 0 { + layer.send_chat_message(format!("diameter = {}", lerp.current_diameter)); + } + } +} + +fn border_controls( + mut events: EventReader, + mut layers: Query<(&mut WorldBorderCenter, &mut WorldBorderLerp), With>, +) { + for x in events.read() { + let parts: Vec<&str> = x.message.split(' ').collect(); + match parts[0] { + "add" => { + let Ok(value) = parts[1].parse::() else { + return; + }; + + let Ok(ticks) = parts[2].parse::() else { + return; + }; + + let (_, mut lerp) = layers.single_mut(); + + lerp.target_diameter = lerp.current_diameter + value; + lerp.remaining_ticks = ticks; + } + "center" => { + let Ok(x) = parts[1].parse::() else { + return; + }; + + let Ok(z) = parts[2].parse::() else { + return; + }; + + let (mut center, _) = layers.single_mut(); + center.x = x; + center.z = z; + } + _ => (), + } + } +} diff --git a/vendor/valence/extractor/README.md b/vendor/valence/extractor/README.md new file mode 100644 index 00000000..c03b52ce --- /dev/null +++ b/vendor/valence/extractor/README.md @@ -0,0 +1,47 @@ +# Valence Extractor + +This is a Fabric mod for Minecraft that extracts data about different things in Minecraft, like blocks, packets, etc. The extracted data is stored within the Rust packages that need them. + +## How to use + +Here's how to regenerate the contents of `extracted`. + +From this directory, run the following + +```sh +./gradlew runServer +``` + +This will run the extractor and immediately exit, outputting the files that are listed in the logs. + +Next, run `copy_extractor_output.sh`. This copies the files to the appropriate locations so that they can be committed. + +```sh +./copy_extractor_output.sh +``` + +## How to update valence to a new version of Minecraft + +The general process should go something like this: +1. Update `gradle.properties` to the new version of Minecraft using https://fabricmc.net/develop +2. Update `src/main/resources/fabric.mod.json` to reference new version of Minecraft +3. Update `PROTOCOL_VERSION` and `MINECRAFT_VERSION` constants in `valence_protocol/src/lib.rs` +4. Attempt to run `./gradlew runServer` and fix any errors that come up +5. Run `./copy_extractor_output.sh` +6. In `*.toml`s, replace all strings of the old mc version with the new mc version +7. Try all the examples. If they work, you're probably done. + + +If you need to update gradle, running this will automatically update the wrapper to the specified version, and update `gradle/gradle-wrapper.properties`. +```sh +./gradlew wrapper --gradle-version VERSION +``` + +You may also need to update the fabric mappings in the mod. +```sh +./gradlew migrateMappings --mappings "VERSION" +``` + +## Contributing + +Run `./gradlew genSources` to generate Minecraft Java source files for your IDE. diff --git a/vendor/valence/extractor/build.gradle b/vendor/valence/extractor/build.gradle new file mode 100644 index 00000000..3181fb39 --- /dev/null +++ b/vendor/valence/extractor/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'fabric-loom' version '1.2-SNAPSHOT' +} + +sourceCompatibility = JavaVersion.VERSION_17 +targetCompatibility = JavaVersion.VERSION_17 + +archivesBaseName = project.archives_base_name +version = project.mod_version +group = project.maven_group + +dependencies { + implementation 'com.google.code.gson:gson:2.10.1' + + // To change the versions see the gradle.properties file + minecraft "com.mojang:minecraft:${project.minecraft_version}" + mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" +} + +processResources { + inputs.property "version", project.version + + filesMatching("fabric.mod.json") { + expand "version": project.version + } +} + +tasks.withType(JavaCompile).configureEach { + it.options.release = 17 +} + +java { + withSourcesJar() +} + +jar { + from("LICENSE") { + rename { "${it}_${project.archivesBaseName}"} + } +} diff --git a/vendor/valence/extractor/copy_extractor_output.sh b/vendor/valence/extractor/copy_extractor_output.sh new file mode 100755 index 00000000..5724b665 --- /dev/null +++ b/vendor/valence/extractor/copy_extractor_output.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Copies all files generated by the extractor to the necessary locations. +# Run the extractor first (`./gradlew runServer`) before running this. + +set -euxo pipefail + +cd "$(dirname "$0")" + +cp run/valence_extractor_output/{entities,misc}.json ../crates/valence_entity/extracted/ +cp run/valence_extractor_output/{attributes,blocks,effects,items,packets,sounds}.json ../crates/valence_generated/extracted/ +cp run/valence_extractor_output/translation_keys.json ../crates/valence_lang/extracted/ +cp run/valence_extractor_output/{registry_codec.dat,tags.json} ../crates/valence_registry/extracted/ +cp run/valence_extractor_output/packets.json ../tools/packet_inspector/extracted/ diff --git a/vendor/valence/extractor/gradle.properties b/vendor/valence/extractor/gradle.properties new file mode 100644 index 00000000..f75e3311 --- /dev/null +++ b/vendor/valence/extractor/gradle.properties @@ -0,0 +1,13 @@ +# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G +# Fabric Properties +# check these on https://fabricmc.net/develop +minecraft_version=1.20.1 +yarn_mappings=1.20.1+build.1 +loader_version=0.14.21 +# Mod Properties +mod_version=1.0.0 +maven_group=dev.00a +archives_base_name=valence-extractor +# Dependencies +fabric_version=0.83.0+1.20.1 diff --git a/vendor/valence/extractor/gradle/wrapper/gradle-wrapper.properties b/vendor/valence/extractor/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..59bc51a2 --- /dev/null +++ b/vendor/valence/extractor/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/vendor/valence/extractor/gradlew b/vendor/valence/extractor/gradlew new file mode 100755 index 00000000..a69d9cb6 --- /dev/null +++ b/vendor/valence/extractor/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/vendor/valence/extractor/gradlew.bat b/vendor/valence/extractor/gradlew.bat new file mode 100644 index 00000000..53a6b238 --- /dev/null +++ b/vendor/valence/extractor/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/vendor/valence/extractor/settings.gradle b/vendor/valence/extractor/settings.gradle new file mode 100644 index 00000000..b02216ba --- /dev/null +++ b/vendor/valence/extractor/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } + mavenCentral() + gradlePluginPortal() + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/ClassComparator.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/ClassComparator.java new file mode 100644 index 00000000..fed1baf7 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/ClassComparator.java @@ -0,0 +1,21 @@ +package rs.valence.extractor; + +import java.util.Comparator; + +/** + * Compare Class objects by their simple names lexicographically. + */ +public class ClassComparator implements Comparator> { + public ClassComparator() { + } + + @Override + public int compare(Class c1, Class c2) { + return c1.getSimpleName().compareTo(c2.getSimpleName()); + } + + @Override + public boolean equals(Object comp) { + return comp instanceof ClassComparator; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyPlayerEntity.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyPlayerEntity.java new file mode 100644 index 00000000..9e8a4974 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyPlayerEntity.java @@ -0,0 +1,42 @@ +package rs.valence.extractor; + +import com.mojang.authlib.GameProfile; +import net.minecraft.entity.Entity; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.encryption.PlayerPublicKey; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import org.jetbrains.annotations.Nullable; + +public class DummyPlayerEntity extends PlayerEntity { + public static final DummyPlayerEntity INSTANCE; + + static { + INSTANCE = Main.magicallyInstantiate(DummyPlayerEntity.class); + + try { + var dataTrackerField = Entity.class.getDeclaredField("dataTracker"); + dataTrackerField.setAccessible(true); + dataTrackerField.set(INSTANCE, new DataTracker(INSTANCE)); + + INSTANCE.initDataTracker(); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private DummyPlayerEntity(World world, BlockPos pos, float yaw, GameProfile gameProfile, @Nullable PlayerPublicKey publicKey) { + super(world, pos, yaw, gameProfile); + } + + @Override + public boolean isSpectator() { + return false; + } + + @Override + public boolean isCreative() { + return false; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyWorld.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyWorld.java new file mode 100644 index 00000000..a33bc35c --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/DummyWorld.java @@ -0,0 +1,266 @@ +package rs.valence.extractor; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.map.MapState; +import net.minecraft.recipe.RecipeManager; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.resource.featuretoggle.FeatureFlags; +import net.minecraft.resource.featuretoggle.FeatureSet; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.sound.SoundCategory; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.random.Random; +import net.minecraft.util.profiler.Profiler; +import net.minecraft.world.Difficulty; +import net.minecraft.world.GameRules; +import net.minecraft.world.MutableWorldProperties; +import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; +import net.minecraft.world.chunk.ChunkManager; +import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.entity.EntityLookup; +import net.minecraft.world.event.GameEvent; +import net.minecraft.world.tick.QueryableTickScheduler; +import org.jetbrains.annotations.Nullable; +import java.util.List; +import java.util.function.Supplier; + +public class DummyWorld extends World { + + public static final DummyWorld INSTANCE; + + static { + INSTANCE = Main.magicallyInstantiate(DummyWorld.class); + + try { + var randomField = World.class.getDeclaredField("random"); + randomField.setAccessible(true); + randomField.set(INSTANCE, Random.create()); + + var propertiesField = World.class.getDeclaredField("properties"); + propertiesField.setAccessible(true); + propertiesField.set(INSTANCE, new DummyMutableWorldProperties()); + + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private DummyWorld(MutableWorldProperties properties, RegistryKey registryRef, DynamicRegistryManager registryManager, RegistryEntry dimension, Supplier profiler, boolean isClient, boolean debugWorld, long seed, int maxChainedNeighborUpdates) { + super(properties, registryRef, registryManager, dimension, profiler, isClient, debugWorld, seed, maxChainedNeighborUpdates); + } + + @Override + public void updateListeners(BlockPos pos, BlockState oldState, BlockState newState, int flags) { + + } + + @Override + public void playSound(@Nullable PlayerEntity except, double x, double y, double z, RegistryEntry sound, SoundCategory category, float volume, float pitch, long seed) { + + } + + @Override + public void playSound(@Nullable PlayerEntity except, double x, double y, double z, SoundEvent sound, SoundCategory category, float volume, float pitch, long seed) { + + } + + @Override + public void playSoundFromEntity(@Nullable PlayerEntity except, Entity entity, RegistryEntry sound, SoundCategory category, float volume, float pitch, long seed) { + + } + + @Override + public String asString() { + return ""; + } + + @Nullable + @Override + public Entity getEntityById(int id) { + return null; + } + + @Nullable + @Override + public MapState getMapState(String id) { + return null; + } + + @Override + public void putMapState(String id, MapState state) { + + } + + @Override + public int getNextMapId() { + return 0; + } + + @Override + public void setBlockBreakingInfo(int entityId, BlockPos pos, int progress) { + + } + + @Override + public Scoreboard getScoreboard() { + return new Scoreboard(); + } + + @Override + public RecipeManager getRecipeManager() { + return new RecipeManager(); + } + + @Override + protected EntityLookup getEntityLookup() { + return null; + } + + @Override + public QueryableTickScheduler getBlockTickScheduler() { + return null; + } + + @Override + public QueryableTickScheduler getFluidTickScheduler() { + return null; + } + + @Override + public ChunkManager getChunkManager() { + return null; + } + + @Override + public void syncWorldEvent(@Nullable PlayerEntity player, int eventId, BlockPos pos, int data) { + + } + + @Override + public void emitGameEvent(GameEvent event, Vec3d emitterPos, GameEvent.Emitter emitter) { + + } + + @Override + public DynamicRegistryManager getRegistryManager() { + return null; + } + + @Override + public FeatureSet getEnabledFeatures() { + return FeatureSet.of(FeatureFlags.VANILLA, FeatureFlags.BUNDLE); + } + + @Override + public float getBrightness(Direction direction, boolean shaded) { + return 0; + } + + @Override + public List getPlayers() { + return List.of(); + } + + @Override + public RegistryEntry getGeneratorStoredBiome(int biomeX, int biomeY, int biomeZ) { + return null; + } + + private static class DummyMutableWorldProperties implements MutableWorldProperties { + + @Override + public int getSpawnX() { + return 0; + } + + @Override + public void setSpawnX(int spawnX) { + + } + + @Override + public int getSpawnY() { + return 0; + } + + @Override + public void setSpawnY(int spawnY) { + + } + + @Override + public int getSpawnZ() { + return 0; + } + + @Override + public void setSpawnZ(int spawnZ) { + + } + + @Override + public float getSpawnAngle() { + return 0; + } + + @Override + public void setSpawnAngle(float spawnAngle) { + + } + + @Override + public long getTime() { + return 0; + } + + @Override + public long getTimeOfDay() { + return 0; + } + + @Override + public boolean isThundering() { + return false; + } + + @Override + public boolean isRaining() { + return false; + } + + @Override + public void setRaining(boolean raining) { + + } + + @Override + public boolean isHardcore() { + return false; + } + + @Override + public GameRules getGameRules() { + return null; + } + + @Override + public Difficulty getDifficulty() { + return null; + } + + @Override + public boolean isDifficultyLocked() { + return false; + } + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/Main.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/Main.java new file mode 100644 index 00000000..ce183b88 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/Main.java @@ -0,0 +1,126 @@ +package rs.valence.extractor; + +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import io.netty.handler.codec.EncoderException; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.nbt.NbtIo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import rs.valence.extractor.extractors.*; +import sun.reflect.ReflectionFactory; + +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class Main implements ModInitializer { + public static final String MOD_ID = "valence_extractor"; + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + + /** + * Magically creates an instance of a concrete class without calling its constructor. + */ + public static T magicallyInstantiate(Class clazz) { + var rf = ReflectionFactory.getReflectionFactory(); + try { + var objCon = Object.class.getDeclaredConstructor(); + var con = rf.newConstructorForSerialization(clazz, objCon); + return clazz.cast(con.newInstance()); + } catch (Throwable e) { + throw new IllegalArgumentException("Failed to magically instantiate " + clazz.getName(), e); + } + } + + @Override + public void onInitialize() { + LOGGER.info("Starting extractors..."); + + var extractors = new Extractor[]{ + new Attributes(), + new Blocks(), + new Effects(), + new Enchants(), + new Entities(), + new Misc(), + new Items(), + new Packets(), + new Sounds(), + new TranslationKeys(), + }; + + Path outputDirectory; + try { + outputDirectory = Files.createDirectories(Paths.get("valence_extractor_output")); + } catch (IOException e) { + LOGGER.info("Failed to create output directory.", e); + return; + } + + var gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().serializeNulls().create(); + + for (var ext : extractors) { + try { + var out = outputDirectory.resolve(ext.fileName()); + var fileWriter = new FileWriter(out.toFile(), StandardCharsets.UTF_8); + gson.toJson(ext.extract(), fileWriter); + fileWriter.close(); + LOGGER.info("Wrote " + out.toAbsolutePath()); + } catch (Exception e) { + LOGGER.error("Extractor for \"" + ext.fileName() + "\" failed.", e); + } + } + + ServerLifecycleEvents.SERVER_STARTING.register(server -> { + LOGGER.info("Server starting, Running startup extractors..."); + // TODO: make `Codec` implement `Extractor` + var codecExtractor = new Codec(server); + try { + var out = outputDirectory.resolve(codecExtractor.fileName()); + var compound = codecExtractor.extract(); + // read the compound byte-wise and write it to the file + try { + NbtIo.write(compound, out.toFile()); + } catch (IOException var3) { + throw new EncoderException(var3); + } + + LOGGER.info("Wrote " + out.toAbsolutePath()); + } catch (Exception e) { + LOGGER.error("Extractor for \"" + codecExtractor.fileName() + "\" failed.", e); + } + + var startupExtractors = new Extractor[]{ + new Tags(server), + }; + + for (var ext : startupExtractors) { + try { + var out = outputDirectory.resolve(ext.fileName()); + var fileWriter = new FileWriter(out.toFile(), StandardCharsets.UTF_8); + gson.toJson(ext.extract(), fileWriter); + fileWriter.close(); + LOGGER.info("Wrote " + out.toAbsolutePath()); + } catch (Exception e) { + LOGGER.error("Extractor for \"" + ext.fileName() + "\" failed.", e); + } + } + + LOGGER.info("Done."); + server.shutdown(); + }); + } + + public interface Extractor { + String fileName(); + + JsonElement extract() throws Exception; + } + + public record Pair(T left, U right) { + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/RegistryKeyComparator.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/RegistryKeyComparator.java new file mode 100644 index 00000000..a07875d1 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/RegistryKeyComparator.java @@ -0,0 +1,21 @@ +package rs.valence.extractor; + +import net.minecraft.registry.RegistryKey; + +import java.util.Comparator; + +public class RegistryKeyComparator implements Comparator> { + public RegistryKeyComparator() { + } + + @Override + public int compare(RegistryKey o1, RegistryKey o2) { + var c1 = o1.getRegistry().compareTo(o2.getRegistry()); + + if (c1 != 0) { + return c1; + } + + return o1.getValue().compareTo(o2.getValue()); + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/ValenceUtils.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/ValenceUtils.java new file mode 100644 index 00000000..847da11a --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/ValenceUtils.java @@ -0,0 +1,34 @@ +package rs.valence.extractor; + +/** + * Utility class for various methods. + */ +public class ValenceUtils { + private ValenceUtils() { + throw new UnsupportedOperationException("This class cannot be instantiated"); + } + + /** + * Converts a string to PascalCase. + * + * @param str The string to convert. + * @return The converted string. + */ + public static String toPascalCase(String str) { + StringBuilder result = new StringBuilder(); + boolean capitalizeNext = true; + + for (char c : str.toCharArray()) { + if (Character.isWhitespace(c) || c == '_') { + capitalizeNext = true; + } else if (capitalizeNext) { + result.append(Character.toUpperCase(c)); + capitalizeNext = false; + } else { + result.append(Character.toLowerCase(c)); + } + } + + return result.toString(); + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Attributes.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Attributes.java new file mode 100644 index 00000000..c22654e9 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Attributes.java @@ -0,0 +1,45 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.entity.attribute.ClampedEntityAttribute; +import net.minecraft.entity.attribute.EntityAttribute; +import net.minecraft.registry.Registries; +import rs.valence.extractor.Main; +import rs.valence.extractor.ValenceUtils; + +public class Attributes implements Main.Extractor { + public Attributes() { + } + + @Override + public String fileName() { + return "attributes.json"; + } + + @Override + public JsonElement extract() { + var attributesJson = new JsonObject(); + + for (EntityAttribute attribute : Registries.ATTRIBUTE) { + var attributeJson = new JsonObject(); + + attributeJson.addProperty("id", Registries.ATTRIBUTE.getRawId(attribute)); + attributeJson.addProperty("name", Registries.ATTRIBUTE.getId(attribute).getPath()); + attributeJson.addProperty("default_value", attribute.getDefaultValue()); + attributeJson.addProperty("translation_key", attribute.getTranslationKey()); + attributeJson.addProperty("tracked", attribute.isTracked()); + + if (attribute instanceof ClampedEntityAttribute a) { + attributeJson.addProperty("min_value", a.getMinValue()); + attributeJson.addProperty("max_value", a.getMaxValue()); + } + + attributesJson.add(Registries.ATTRIBUTE.getId(attribute).getPath(), attributeJson); + } + + return attributesJson; + } +} \ No newline at end of file diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Biomes.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Biomes.java new file mode 100644 index 00000000..c93aa6aa --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Biomes.java @@ -0,0 +1,129 @@ +package rs.valence.extractor.extractors; + +// TODO: where is the biome registry in 1.19.3+? + +/* +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.entity.SpawnGroup; +import net.minecraft.util.Identifier; +import net.minecraft.util.collection.Weighted; +import net.minecraft.registry.Registries; +import net.minecraft.world.biome.BiomeParticleConfig; +import rs.valence.extractor.Main; + +import java.lang.reflect.Field; + +public class Biomes implements Main.Extractor { + public Biomes() { + } + + @Override + public String fileName() { + return "biomes.json"; + } + + @Override + public JsonElement extract() { + // The biome particle probability field is private. + // We have to resort to reflection, unfortunately. + Field particleConfigProbabilityField; + try { + particleConfigProbabilityField = BiomeParticleConfig.class.getDeclaredField("probability"); + particleConfigProbabilityField.setAccessible(true); + } catch (Exception e) { + throw new RuntimeException(e); + } + + for (var biome : BuiltinRegistries.BIOME) { + var biomeIdent = BuiltinRegistries.BIOME.getId(biome); + assert biomeIdent != null; + + var biomeJson = new JsonObject(); + biomeJson.addProperty("precipitation", biome.getPrecipitation().getName()); + biomeJson.addProperty("temperature", biome.getTemperature()); + biomeJson.addProperty("downfall", biome.getDownfall()); + + var effectJson = new JsonObject(); + var biomeEffects = biome.getEffects(); + + effectJson.addProperty("sky_color", biomeEffects.getSkyColor()); + effectJson.addProperty("water_fog_color", biomeEffects.getWaterFogColor()); + effectJson.addProperty("fog_color", biomeEffects.getFogColor()); + effectJson.addProperty("water_color", biomeEffects.getWaterColor()); + biomeEffects.getFoliageColor().ifPresent(color -> effectJson.addProperty("foliage_color", color)); + biomeEffects.getGrassColor().ifPresent(color -> effectJson.addProperty("grass_color", color)); + effectJson.addProperty("grass_color_modifier", biomeEffects.getGrassColorModifier().getName()); + biomeEffects.getMusic().ifPresent(biome_music -> { + var music = new JsonObject(); + music.addProperty("replace_current_music", biome_music.shouldReplaceCurrentMusic()); + music.addProperty("sound", biome_music.getSound().getId().getPath()); + music.addProperty("max_delay", biome_music.getMaxDelay()); + music.addProperty("min_delay", biome_music.getMinDelay()); + effectJson.add("music", music); + }); + + biomeEffects.getLoopSound().ifPresent(soundEvent -> effectJson.addProperty("ambient_sound", soundEvent.getId().getPath())); + biomeEffects.getAdditionsSound().ifPresent(soundEvent -> { + var sound = new JsonObject(); + sound.addProperty("sound", soundEvent.getSound().getId().getPath()); + sound.addProperty("tick_chance", soundEvent.getChance()); + effectJson.add("additions_sound", sound); + }); + biomeEffects.getMoodSound().ifPresent(soundEvent -> { + var sound = new JsonObject(); + sound.addProperty("sound", soundEvent.getSound().getId().getPath()); + sound.addProperty("tick_delay", soundEvent.getCultivationTicks()); + sound.addProperty("offset", soundEvent.getExtraDistance()); + sound.addProperty("block_search_extent", soundEvent.getSpawnRange()); + + effectJson.add("mood_sound", sound); + }); + + biome.getParticleConfig().ifPresent(biomeParticleConfig -> { + try { + var particleConfig = new JsonObject(); + // We must first convert it into an identifier, because asString() returns a resource identifier as string. + Identifier id = new Identifier(biomeParticleConfig.getParticle().asString()); + particleConfig.addProperty("kind", id.getPath()); + particleConfig.addProperty("probability" ,particleConfigProbabilityField.getFloat(biomeParticleConfig)); + biomeJson.add("particle", particleConfig); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + }); + + var spawnSettingsJson = new JsonObject(); + var spawnSettings = biome.getSpawnSettings(); + spawnSettingsJson.addProperty("probability", spawnSettings.getCreatureSpawnProbability()); + + var spawnGroupsJson = new JsonObject(); + for (var spawnGroup : SpawnGroup.values()) { + var spawnGroupJson = new JsonArray(); + for (var entry : spawnSettings.getSpawnEntries(spawnGroup).getEntries()) { + var groupEntryJson = new JsonObject(); + groupEntryJson.addProperty("name", Registry.ENTITY_TYPE.getId(entry.type).getPath()); + groupEntryJson.addProperty("min_group_size", entry.minGroupSize); + groupEntryJson.addProperty("max_group_size", entry.maxGroupSize); + groupEntryJson.addProperty("weight", ((Weighted) entry).getWeight().getValue()); + spawnGroupJson.add(groupEntryJson); + } + spawnGroupsJson.add(spawnGroup.getName(), spawnGroupJson); + } + spawnSettingsJson.add("groups", spawnGroupsJson); + + biomeJson.add("effects", effectJson); + biomeJson.add("spawn_settings", spawnSettingsJson); + + var entryJson = new JsonObject(); + entryJson.addProperty("name", biomeIdent.getPath()); + entryJson.addProperty("id", BuiltinRegistries.BIOME.getRawId(biome)); + entryJson.add("element", biomeJson); + biomesJson.add(entryJson); + } + + return biomesJson; + } +} + */ diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Blocks.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Blocks.java new file mode 100644 index 00000000..6106d3ed --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Blocks.java @@ -0,0 +1,140 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.registry.Registries; +import net.minecraft.item.VerticallyAttachableBlockItem; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.EmptyBlockView; + +import rs.valence.extractor.Main; +import rs.valence.extractor.mixin.ExposeWallBlock; + +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.Objects; + +public class Blocks implements Main.Extractor { + public Blocks() { + } + + @Override + public String fileName() { + return "blocks.json"; + } + + @Override + public JsonElement extract() { + var topLevelJson = new JsonObject(); + + var blocksJson = new JsonArray(); + var stateIdCounter = 0; + + var shapes = new LinkedHashMap(); + + for (var block : Registries.BLOCK) { + var blockJson = new JsonObject(); + blockJson.addProperty("id", Registries.BLOCK.getRawId(block)); + blockJson.addProperty("name", Registries.BLOCK.getId(block).getPath()); + blockJson.addProperty("translation_key", block.getTranslationKey()); + blockJson.addProperty("item_id", Registries.ITEM.getRawId(block.asItem())); + blockJson.addProperty("hardness", block.getHardness()); + blockJson.addProperty("blast_resistance", block.getBlastResistance()); + blockJson.addProperty("slipperiness", block.getSlipperiness()); + blockJson.addProperty("speed_factor", block.getVelocityMultiplier()); + blockJson.addProperty("jump_factor", block.getJumpVelocityMultiplier()); + + if (block.asItem() instanceof VerticallyAttachableBlockItem wsbItem) { + if (wsbItem.getBlock() == block) { + var wallBlock = ((ExposeWallBlock) wsbItem).getWallBlock(); + blockJson.addProperty("wall_variant_id", Registries.BLOCK.getRawId(wallBlock)); + } + } + + var propsJson = new JsonArray(); + for (var prop : block.getStateManager().getProperties()) { + var propJson = new JsonObject(); + + propJson.addProperty("name", prop.getName()); + + var valuesJson = new JsonArray(); + for (var value : prop.getValues()) { + valuesJson.add(value.toString().toLowerCase(Locale.ROOT)); + } + propJson.add("values", valuesJson); + + propsJson.add(propJson); + } + blockJson.add("properties", propsJson); + + var statesJson = new JsonArray(); + for (var state : block.getStateManager().getStates()) { + var stateJson = new JsonObject(); + var id = stateIdCounter++; + stateJson.addProperty("id", id); + stateJson.addProperty("luminance", state.getLuminance()); + stateJson.addProperty("opaque", state.isOpaque()); + stateJson.addProperty("replaceable", state.isReplaceable()); + // TODO `blocksMovement` seems to be deprecated. How else can one get this property? + stateJson.addProperty("blocks_motion", state.blocksMovement()); + + if (block.getDefaultState().equals(state)) { + blockJson.addProperty("default_state_id", id); + } + + var collisionShapeIdxsJson = new JsonArray(); + for (var box : state.getCollisionShape(EmptyBlockView.INSTANCE, BlockPos.ORIGIN).getBoundingBoxes()) { + var collisionShape = new Shape(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ); + + var idx = shapes.putIfAbsent(collisionShape, shapes.size()); + collisionShapeIdxsJson.add(Objects.requireNonNullElseGet(idx, () -> shapes.size() - 1)); + } + + stateJson.add("collision_shapes", collisionShapeIdxsJson); + + for (var blockEntity : Registries.BLOCK_ENTITY_TYPE) { + if (blockEntity.supports(state)) { + stateJson.addProperty("block_entity_type", Registries.BLOCK_ENTITY_TYPE.getRawId(blockEntity)); + } + } + + statesJson.add(stateJson); + } + blockJson.add("states", statesJson); + + blocksJson.add(blockJson); + } + + var blockEntitiesJson = new JsonArray(); + for (var blockEntity : Registries.BLOCK_ENTITY_TYPE) { + var blockEntityJson = new JsonObject(); + blockEntityJson.addProperty("id", Registries.BLOCK_ENTITY_TYPE.getRawId(blockEntity)); + blockEntityJson.addProperty("ident", Registries.BLOCK_ENTITY_TYPE.getId(blockEntity).toString()); + blockEntityJson.addProperty("name", Registries.BLOCK_ENTITY_TYPE.getId(blockEntity).getPath()); + + blockEntitiesJson.add(blockEntityJson); + } + + var shapesJson = new JsonArray(); + for (var shape : shapes.keySet()) { + var shapeJson = new JsonObject(); + shapeJson.addProperty("min_x", shape.minX); + shapeJson.addProperty("min_y", shape.minY); + shapeJson.addProperty("min_z", shape.minZ); + shapeJson.addProperty("max_x", shape.maxX); + shapeJson.addProperty("max_y", shape.maxY); + shapeJson.addProperty("max_z", shape.maxZ); + shapesJson.add(shapeJson); + } + + topLevelJson.add("block_entity_types", blockEntitiesJson); + topLevelJson.add("shapes", shapesJson); + topLevelJson.add("blocks", blocksJson); + + return topLevelJson; + } + + private record Shape(double minX, double minY, double minZ, double maxX, double maxY, double maxZ) { + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Codec.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Codec.java new file mode 100644 index 00000000..521e2c21 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Codec.java @@ -0,0 +1,34 @@ +package rs.valence.extractor.extractors; + +import io.netty.handler.codec.EncoderException; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.NbtOps; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryOps; +import net.minecraft.registry.SerializableRegistries; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Util; + +public class Codec { + + private static final RegistryOps REGISTRY_OPS= RegistryOps.of(NbtOps.INSTANCE, DynamicRegistryManager.of(Registries.REGISTRIES)); + private final DynamicRegistryManager.Immutable registryManager; + + public Codec(MinecraftServer server) { + this.registryManager = server.getRegistryManager(); + } + + public String fileName() { + return "registry_codec.dat"; + } + + public NbtCompound extract() { + com.mojang.serialization.Codec codec = SerializableRegistries.CODEC; + //DynamicRegistryManager.get(net.minecraft.registry.RegistryKey>) method. + + NbtElement nbtElement = Util.getResult(codec.encodeStart(REGISTRY_OPS, registryManager), (error) -> new EncoderException("Failed to encode: " + error + " " + registryManager)); + return (NbtCompound) nbtElement; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Effects.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Effects.java new file mode 100644 index 00000000..c89de424 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Effects.java @@ -0,0 +1,55 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.registry.Registries; +import rs.valence.extractor.Main; +import rs.valence.extractor.ValenceUtils; + +public class Effects implements Main.Extractor { + public Effects() { + } + + @Override + public String fileName() { + return "effects.json"; + } + + @Override + public JsonElement extract() { + var effectsJson = new JsonArray(); + + for (var effect : Registries.STATUS_EFFECT) { + var effectJson = new JsonObject(); + + effectJson.addProperty("id", Registries.STATUS_EFFECT.getRawId(effect)); + effectJson.addProperty("name", Registries.STATUS_EFFECT.getId(effect).getPath()); + effectJson.addProperty("translation_key", effect.getTranslationKey()); + effectJson.addProperty("color", effect.getColor()); + effectJson.addProperty("instant", effect.isInstant()); + effectJson.addProperty("category", ValenceUtils.toPascalCase(effect.getCategory().name())); + + var attributeModifiersJson = new JsonArray(); + + for (var entry : effect.getAttributeModifiers().entrySet()) { + var attributeModifierJson = new JsonObject(); + + attributeModifierJson.addProperty("attribute", Registries.ATTRIBUTE.getRawId(entry.getKey())); + attributeModifierJson.addProperty("operation", entry.getValue().getOperation().getId()); + attributeModifierJson.addProperty("value", entry.getValue().getValue()); + attributeModifierJson.addProperty("uuid", entry.getValue().getId().toString()); + + attributeModifiersJson.add(attributeModifierJson); + } + + if (attributeModifiersJson.size() > 0) { + effectJson.add("attribute_modifiers", attributeModifiersJson); + } + + effectsJson.add(effectJson); + } + + return effectsJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Enchants.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Enchants.java new file mode 100644 index 00000000..8bf9bdb6 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Enchants.java @@ -0,0 +1,47 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.registry.Registries; +import rs.valence.extractor.Main; + +public class Enchants implements Main.Extractor { + public Enchants() { + } + + @Override + public String fileName() { + return "enchants.json"; + } + + @Override + public JsonElement extract() { + var enchantsJson = new JsonArray(); + + for (var enchant : Registries.ENCHANTMENT) { + var enchantJson = new JsonObject(); + + enchantJson.addProperty("id", Registries.ENCHANTMENT.getRawId(enchant)); + enchantJson.addProperty("name", Registries.ENCHANTMENT.getId(enchant).getPath()); + enchantJson.addProperty("translation_key", enchant.getTranslationKey()); + + enchantJson.addProperty("min_level", enchant.getMinLevel()); + enchantJson.addProperty("max_level", enchant.getMaxLevel()); + enchantJson.addProperty("rarity_weight", enchant.getRarity().getWeight()); + enchantJson.addProperty("cursed", enchant.isCursed()); + + var enchantmentSources = new JsonObject(); + enchantmentSources.addProperty("treasure", enchant.isTreasure()); + enchantmentSources.addProperty("enchantment_table", enchant.isAvailableForEnchantedBookOffer()); + // All enchants except for 'Soul speed' and 'Swift sneak' are available for random selection and are only obtainable from loot chests. + enchantmentSources.addProperty("random_selection", enchant.isAvailableForRandomSelection()); + + enchantJson.add("sources", enchantmentSources); + + enchantsJson.add(enchantJson); + } + + return enchantsJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Entities.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Entities.java new file mode 100644 index 00000000..172d01f2 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Entities.java @@ -0,0 +1,309 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.*; + +import net.minecraft.block.BlockState; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityPose; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.attribute.DefaultAttributeRegistry; +import net.minecraft.entity.attribute.EntityAttribute; +import net.minecraft.entity.attribute.EntityAttributeInstance; +import net.minecraft.entity.data.DataTracker; +import net.minecraft.entity.data.TrackedData; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.passive.CatVariant; +import net.minecraft.entity.passive.FrogVariant; +import net.minecraft.entity.passive.SnifferEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.particle.ParticleEffect; +import net.minecraft.registry.Registries; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.EulerAngle; +import net.minecraft.util.math.GlobalPos; +import net.minecraft.village.VillagerData; +import org.jetbrains.annotations.Nullable; +import org.joml.Quaternionf; +import org.joml.Vector3f; + +import rs.valence.extractor.ClassComparator; +import rs.valence.extractor.DummyPlayerEntity; +import rs.valence.extractor.DummyWorld; +import rs.valence.extractor.Main; +import rs.valence.extractor.Main.Pair; +import java.lang.reflect.ParameterizedType; +import java.util.*; + +public class Entities implements Main.Extractor { + public Entities() { + } + + private static Pair trackedDataToJson(TrackedData data, DataTracker tracker) { + final var handler = data.getType(); + final var val = tracker.get(data); + + if (handler == TrackedDataHandlerRegistry.BYTE) { + return new Pair<>("byte", new JsonPrimitive((Byte) val)); + } else if (handler == TrackedDataHandlerRegistry.INTEGER) { + return new Pair<>("integer", new JsonPrimitive((Integer) val)); + } else if (handler == TrackedDataHandlerRegistry.LONG) { + return new Pair<>("long", new JsonPrimitive((Long) val)); + } else if (handler == TrackedDataHandlerRegistry.FLOAT) { + return new Pair<>("float", new JsonPrimitive((Float) val)); + } else if (handler == TrackedDataHandlerRegistry.STRING) { + return new Pair<>("string", new JsonPrimitive((String) val)); + } else if (handler == TrackedDataHandlerRegistry.TEXT_COMPONENT) { + // TODO: return text as json element. + return new Pair<>("text_component", new JsonPrimitive(((Text) val).getString())); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_TEXT_COMPONENT) { + var res = ((Optional) val).map(o -> (JsonElement) new JsonPrimitive(((Text) o).getString())) + .orElse(JsonNull.INSTANCE); + return new Pair<>("optional_text_component", res); + } else if (handler == TrackedDataHandlerRegistry.ITEM_STACK) { + // TODO + return new Pair<>("item_stack", new JsonPrimitive(((ItemStack) val).toString())); + } else if (handler == TrackedDataHandlerRegistry.BOOLEAN) { + return new Pair<>("boolean", new JsonPrimitive((Boolean) val)); + } else if (handler == TrackedDataHandlerRegistry.ROTATION) { + var json = new JsonObject(); + var ea = (EulerAngle) val; + json.addProperty("pitch", ea.getPitch()); + json.addProperty("yaw", ea.getYaw()); + json.addProperty("roll", ea.getRoll()); + return new Pair<>("rotation", json); + } else if (handler == TrackedDataHandlerRegistry.BLOCK_POS) { + var bp = (BlockPos) val; + var json = new JsonObject(); + json.addProperty("x", bp.getX()); + json.addProperty("y", bp.getY()); + json.addProperty("z", bp.getZ()); + return new Pair<>("block_pos", json); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_BLOCK_POS) { + return new Pair<>("optional_block_pos", ((Optional) val).map(o -> { + var bp = (BlockPos) o; + var json = new JsonObject(); + json.addProperty("x", bp.getX()); + json.addProperty("y", bp.getY()); + json.addProperty("z", bp.getZ()); + return (JsonElement) json; + }).orElse(JsonNull.INSTANCE)); + } else if (handler == TrackedDataHandlerRegistry.FACING) { + return new Pair<>("facing", new JsonPrimitive(val.toString())); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_UUID) { + var res = ((Optional) val).map(o -> (JsonElement) new JsonPrimitive(o.toString())) + .orElse(JsonNull.INSTANCE); + return new Pair<>("optional_uuid", res); + } else if (handler == TrackedDataHandlerRegistry.BLOCK_STATE) { + // TODO: get raw block state ID. + var state = (BlockState) val; + return new Pair<>("block_state", new JsonPrimitive(state.toString())); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_BLOCK_STATE) { + // TODO: get raw block state ID. + var res = ((Optional) val).map(o -> (JsonElement) new JsonPrimitive(o.toString())) + .orElse(JsonNull.INSTANCE); + return new Pair<>("optional_block_state", res); + } else if (handler == TrackedDataHandlerRegistry.NBT_COMPOUND) { + // TODO: base64 binary representation or SNBT? + return new Pair<>("nbt_compound", new JsonPrimitive(val.toString())); + } else if (handler == TrackedDataHandlerRegistry.PARTICLE) { + var id = Registries.PARTICLE_TYPE.getId(((ParticleEffect) val).getType()); + return new Pair<>("particle", new JsonPrimitive(id.getPath())); + } else if (handler == TrackedDataHandlerRegistry.VILLAGER_DATA) { + var vd = (VillagerData) val; + var json = new JsonObject(); + var type = Registries.VILLAGER_TYPE.getId(vd.getType()).getPath(); + var profession = Registries.VILLAGER_PROFESSION.getId(vd.getProfession()).getPath(); + json.addProperty("type", type); + json.addProperty("profession", profession); + json.addProperty("level", vd.getLevel()); + return new Pair<>("villager_data", json); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_INT) { + var opt = (OptionalInt) val; + return new Pair<>("optional_int", opt.isPresent() ? new JsonPrimitive(opt.getAsInt()) : JsonNull.INSTANCE); + } else if (handler == TrackedDataHandlerRegistry.ENTITY_POSE) { + return new Pair<>("entity_pose", new JsonPrimitive(((EntityPose) val).name().toLowerCase(Locale.ROOT))); + } else if (handler == TrackedDataHandlerRegistry.CAT_VARIANT) { + return new Pair<>("cat_variant", + new JsonPrimitive(Registries.CAT_VARIANT.getId((CatVariant) val).getPath())); + } else if (handler == TrackedDataHandlerRegistry.FROG_VARIANT) { + return new Pair<>("frog_variant", + new JsonPrimitive(Registries.FROG_VARIANT.getId((FrogVariant) val).getPath())); + } else if (handler == TrackedDataHandlerRegistry.OPTIONAL_GLOBAL_POS) { + return new Pair<>("optional_global_pos", ((Optional) val).map(o -> { + var gp = (GlobalPos) o; + var json = new JsonObject(); + json.addProperty("dimension", gp.getDimension().getValue().toString()); + + var posJson = new JsonObject(); + posJson.addProperty("x", gp.getPos().getX()); + posJson.addProperty("y", gp.getPos().getY()); + posJson.addProperty("z", gp.getPos().getZ()); + + json.add("position", posJson); + return (JsonElement) json; + }).orElse(JsonNull.INSTANCE)); + } else if (handler == TrackedDataHandlerRegistry.PAINTING_VARIANT) { + var variant = ((RegistryEntry) val).getKey().map(k -> k.getValue().getPath()).orElse(""); + return new Pair<>("painting_variant", new JsonPrimitive(variant)); + } else if (handler == TrackedDataHandlerRegistry.SNIFFER_STATE) { + return new Pair<>("sniffer_state", + new JsonPrimitive(((SnifferEntity.State) val).name().toLowerCase(Locale.ROOT))); + } else if (handler == TrackedDataHandlerRegistry.VECTOR3F) { + var vec = (Vector3f) val; + var json = new JsonObject(); + json.addProperty("x", vec.x); + json.addProperty("y", vec.y); + json.addProperty("z", vec.z); + return new Pair<>("vector3f", json); + } else if (handler == TrackedDataHandlerRegistry.QUATERNIONF) { + var quat = (Quaternionf) val; + var json = new JsonObject(); + json.addProperty("x", quat.x); + json.addProperty("y", quat.y); + json.addProperty("z", quat.z); + json.addProperty("w", quat.w); + return new Pair<>("quaternionf", json); + } else { + throw new IllegalArgumentException( + "Unexpected tracked handler of ID " + TrackedDataHandlerRegistry.getId(handler)); + } + } + + @Override + public String fileName() { + return "entities.json"; + } + + @Override + @SuppressWarnings("unchecked") + public JsonElement extract() throws IllegalAccessException, NoSuchFieldException { + + final var entityClassToType = new HashMap, EntityType>(); + for (var f : EntityType.class.getFields()) { + if (f.getType().equals(EntityType.class)) { + var entityClass = (Class) ((ParameterizedType) f.getGenericType()) + .getActualTypeArguments()[0]; + var entityType = (EntityType) f.get(null); + + entityClassToType.put(entityClass, entityType); + } + } + + final var dataTrackerField = Entity.class.getDeclaredField("dataTracker"); + dataTrackerField.setAccessible(true); + + var entitiesMap = new TreeMap, JsonElement>(new ClassComparator()); + + for (var entry : entityClassToType.entrySet()) { + var entityClass = entry.getKey(); + @Nullable + var entityType = entry.getValue(); + assert entityType != null; + + // While we can use the tracked data registry and reflection to get the tracked + // fields on entities, we won't know what their default values are because they + // are assigned in the entity's constructor. + // To obtain this, we create a dummy world to spawn the entities into and read + // the data tracker field from the base entity class. + // We also handle player entities specially since they cannot be spawned with + // EntityType#create. + final var entityInstance = entityType.equals(EntityType.PLAYER) ? DummyPlayerEntity.INSTANCE + : entityType.create(DummyWorld.INSTANCE); + + final var dataTracker = (DataTracker) dataTrackerField.get(entityInstance); + + while (entitiesMap.get(entityClass) == null) { + var entityJson = new JsonObject(); + + var parent = entityClass.getSuperclass(); + var hasParent = parent != null && Entity.class.isAssignableFrom(parent); + + if (hasParent) { + entityJson.addProperty("parent", parent.getSimpleName()); + } + + if (entityType != null) { + entityJson.addProperty("type", Registries.ENTITY_TYPE.getId(entityType).getPath()); + + entityJson.add("translation_key", new JsonPrimitive(entityType.getTranslationKey())); + } + + var fieldsJson = new JsonArray(); + for (var entityField : entityClass.getDeclaredFields()) { + if (entityField.getType().equals(TrackedData.class)) { + entityField.setAccessible(true); + + var trackedData = (TrackedData) entityField.get(null); + + var fieldJson = new JsonObject(); + var fieldName = entityField.getName().toLowerCase(Locale.ROOT); + fieldJson.addProperty("name", fieldName); + fieldJson.addProperty("index", trackedData.getId()); + + var data = Entities.trackedDataToJson(trackedData, dataTracker); + fieldJson.addProperty("type", data.left()); + fieldJson.add("default_value", data.right()); + + fieldsJson.add(fieldJson); + } + } + entityJson.add("fields", fieldsJson); + + if (entityInstance instanceof LivingEntity livingEntity) { + var type = (EntityType) entityType; + var defaultAttributes = DefaultAttributeRegistry.get(type); + var attributesJson = new JsonArray(); + if (defaultAttributes != null) { + var instancesField = defaultAttributes.getClass().getDeclaredField("instances"); + instancesField.setAccessible(true); + var instances = (Map) instancesField + .get(defaultAttributes); + + for (var instance : instances.values()) { + var attribute = instance.getAttribute(); + + var attributeJson = new JsonObject(); + + attributeJson.addProperty("id", Registries.ATTRIBUTE.getRawId(attribute)); + attributeJson.addProperty("name", Registries.ATTRIBUTE.getId(attribute).getPath()); + attributeJson.addProperty("base_value", instance.getBaseValue()); + + attributesJson.add(attributeJson); + } + } + entityJson.add("attributes", attributesJson); + } + + var bb = entityInstance.getBoundingBox(); + if (bb != null && entityType != null) { + var boundingBoxJson = new JsonObject(); + + boundingBoxJson.addProperty("size_x", bb.getXLength()); + boundingBoxJson.addProperty("size_y", bb.getYLength()); + boundingBoxJson.addProperty("size_z", bb.getZLength()); + + entityJson.add("default_bounding_box", boundingBoxJson); + } + + entitiesMap.put(entityClass, entityJson); + + if (!hasParent) { + break; + } + + entityClass = (Class) parent; + entityType = entityClassToType.get(entityClass); + } + } + + var entitiesJson = new JsonObject(); + for (var entry : entitiesMap.entrySet()) { + entitiesJson.add(entry.getKey().getSimpleName(), entry.getValue()); + } + + return entitiesJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Items.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Items.java new file mode 100644 index 00000000..e744c768 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Items.java @@ -0,0 +1,73 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +import net.minecraft.item.ArmorItem; +import net.minecraft.registry.Registries; +import rs.valence.extractor.Main; + +public class Items implements Main.Extractor { + public Items() { + } + + @Override + public String fileName() { + return "items.json"; + } + + @Override + public JsonElement extract() throws Exception { + var itemsJson = new JsonArray(); + + for (var item : Registries.ITEM) { + var itemJson = new JsonObject(); + itemJson.addProperty("id", Registries.ITEM.getRawId(item)); + itemJson.addProperty("name", Registries.ITEM.getId(item).getPath()); + itemJson.addProperty("translation_key", item.getTranslationKey()); + itemJson.addProperty("max_stack", item.getMaxCount()); + itemJson.addProperty("max_durability", item.getMaxDamage()); + itemJson.addProperty("enchantability", item.getEnchantability()); + itemJson.addProperty("fireproof", item.isFireproof()); + + if (item.getFoodComponent() != null) { + var foodJson = new JsonObject(); + var foodComp = item.getFoodComponent(); + + foodJson.addProperty("hunger", foodComp.getHunger()); + foodJson.addProperty("saturation", foodComp.getSaturationModifier()); + foodJson.addProperty("always_edible", foodComp.isAlwaysEdible()); + foodJson.addProperty("meat", foodComp.isMeat()); + foodJson.addProperty("snack", foodComp.isSnack()); + + itemJson.add("food", foodJson); + + var effectsJson = new JsonArray(); + for (var pair : foodComp.getStatusEffects()) { + var effectJson = new JsonObject(); + + var effect = pair.getFirst(); + var chance = pair.getSecond(); + + effectJson.addProperty("chance", chance); + effectJson.addProperty("translation_key", effect.getEffectType().getTranslationKey()); + // TODO: more effect information. + + effectsJson.add(effectJson); + } + + foodJson.add("effects", effectsJson); + } + + if (item instanceof ArmorItem) { + ArmorItem armor = (ArmorItem) item; + itemJson.addProperty("equippable", armor.getType().getName()); + } + + itemsJson.add(itemJson); + } + + return itemsJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Misc.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Misc.java new file mode 100644 index 00000000..f0dc3422 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Misc.java @@ -0,0 +1,135 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.entity.EntityPose; +import net.minecraft.entity.EntityStatuses; +import net.minecraft.entity.attribute.ClampedEntityAttribute; +import net.minecraft.entity.attribute.EntityAttribute; +import net.minecraft.entity.data.TrackedDataHandler; +import net.minecraft.entity.data.TrackedDataHandlerRegistry; +import net.minecraft.entity.passive.SnifferEntity; +import net.minecraft.network.packet.s2c.play.EntityAnimationS2CPacket; +import net.minecraft.registry.Registries; +import net.minecraft.util.math.Direction; +import rs.valence.extractor.Main; +import java.lang.reflect.Modifier; +import java.util.Locale; + +public class Misc implements Main.Extractor { + @Override + public String fileName() { + return "misc.json"; + } + + @Override + public JsonElement extract() throws Exception { + var miscJson = new JsonObject(); + + var entityTypeJson = new JsonObject(); + for (var type : Registries.ENTITY_TYPE) { + entityTypeJson.addProperty(Registries.ENTITY_TYPE.getId(type).getPath(), + Registries.ENTITY_TYPE.getRawId(type)); + } + miscJson.add("entity_type", entityTypeJson); + + var entityStatusJson = new JsonObject(); + for (var field : EntityStatuses.class.getDeclaredFields()) { + if (field.canAccess(null) && field.get(null) instanceof Byte code) { + if (field.getName().equals("field_30030")) { + entityStatusJson.addProperty("stop_attack", code); + } else { + entityStatusJson.addProperty(field.getName().toLowerCase(Locale.ROOT), code); + } + } + } + miscJson.add("entity_status", entityStatusJson); + + var entityAnimationJson = new JsonObject(); + for (var field : EntityAnimationS2CPacket.class.getDeclaredFields()) { + field.setAccessible(true); + if (Modifier.isStatic(field.getModifiers()) && field.canAccess(null) + && field.get(null) instanceof Integer i) { + entityAnimationJson.addProperty(field.getName().toLowerCase(Locale.ROOT), i); + } + } + miscJson.add("entity_animation", entityAnimationJson); + + var villagerTypeJson = new JsonObject(); + for (var type : Registries.VILLAGER_TYPE) { + villagerTypeJson.addProperty(Registries.VILLAGER_TYPE.getId(type).getPath(), + Registries.VILLAGER_TYPE.getRawId(type)); + } + miscJson.add("villager_type", villagerTypeJson); + + var villagerProfessionJson = new JsonObject(); + for (var profession : Registries.VILLAGER_PROFESSION) { + villagerProfessionJson.addProperty(profession.id(), Registries.VILLAGER_PROFESSION.getRawId(profession)); + } + miscJson.add("villager_profession", villagerProfessionJson); + + var catVariantJson = new JsonObject(); + for (var variant : Registries.CAT_VARIANT) { + catVariantJson.addProperty(Registries.CAT_VARIANT.getId(variant).getPath(), + Registries.CAT_VARIANT.getRawId(variant)); + } + miscJson.add("cat_variant", catVariantJson); + + var frogVariantJson = new JsonObject(); + for (var variant : Registries.FROG_VARIANT) { + frogVariantJson.addProperty(Registries.FROG_VARIANT.getId(variant).getPath(), + Registries.FROG_VARIANT.getRawId(variant)); + } + miscJson.add("frog_variant", frogVariantJson); + + var paintingVariantJson = new JsonObject(); + for (var variant : Registries.PAINTING_VARIANT) { + var variantJson = new JsonObject(); + variantJson.addProperty("id", Registries.PAINTING_VARIANT.getRawId(variant)); + variantJson.addProperty("width", variant.getWidth()); + variantJson.addProperty("height", variant.getHeight()); + paintingVariantJson.add(Registries.PAINTING_VARIANT.getId(variant).getPath(), variantJson); + } + miscJson.add("painting_variant", paintingVariantJson); + + var directionJson = new JsonObject(); + for (var dir : Direction.values()) { + directionJson.addProperty(dir.getName(), dir.getId()); + } + miscJson.add("direction", directionJson); + + var entityPoseJson = new JsonObject(); + var poses = EntityPose.values(); + for (int i = 0; i < poses.length; i++) { + entityPoseJson.addProperty(poses[i].name().toLowerCase(Locale.ROOT), i); + } + miscJson.add("entity_pose", entityPoseJson); + + var particleTypesJson = new JsonObject(); + for (var type : Registries.PARTICLE_TYPE) { + particleTypesJson.addProperty(Registries.PARTICLE_TYPE.getId(type).getPath(), + Registries.PARTICLE_TYPE.getRawId(type)); + } + miscJson.add("particle_type", particleTypesJson); + + var snifferStateJson = new JsonObject(); + for (var state : SnifferEntity.State.values()) { + snifferStateJson.addProperty(state.name().toLowerCase(Locale.ROOT), state.ordinal()); + } + miscJson.add("sniffer_state", snifferStateJson); + + var trackedDataHandlerJson = new JsonObject(); + for (var field : TrackedDataHandlerRegistry.class.getDeclaredFields()) { + field.setAccessible(true); + if (Modifier.isStatic(field.getModifiers()) && field.get(null) instanceof TrackedDataHandler handler) { + var name = field.getName().toLowerCase(Locale.ROOT); + var id = TrackedDataHandlerRegistry.getId(handler); + + trackedDataHandlerJson.addProperty(name, id); + } + } + miscJson.add("tracked_data_handler", trackedDataHandlerJson); + + return miscJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Packets.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Packets.java new file mode 100644 index 00000000..9f1ae64b --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Packets.java @@ -0,0 +1,42 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.network.NetworkSide; +import net.minecraft.network.NetworkState; +import rs.valence.extractor.Main; + +import java.util.Locale; +import java.util.TreeSet; + +public class Packets implements Main.Extractor { + @Override + public String fileName() { + return "packets.json"; + } + + @Override + public JsonElement extract() { + var packetsJson = new JsonArray(); + + for (var side : NetworkSide.values()) { + for (var state : NetworkState.values()) { + var map = state.getPacketIdToPacketMap(side); + + for (var id : new TreeSet<>(map.keySet())) { + var packetJson = new JsonObject(); + + packetJson.addProperty("name", map.get(id.intValue()).getSimpleName()); + packetJson.addProperty("side", side.name().toLowerCase(Locale.ROOT)); + packetJson.addProperty("state", state.name().toLowerCase(Locale.ROOT)); + packetJson.addProperty("id", id); + + packetsJson.add(packetJson); + } + } + } + + return packetsJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Sounds.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Sounds.java new file mode 100644 index 00000000..a204be72 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Sounds.java @@ -0,0 +1,31 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.registry.Registries; +import rs.valence.extractor.Main; + +public class Sounds implements Main.Extractor { + public Sounds() { + } + + @Override + public String fileName() { + return "sounds.json"; + } + + @Override + public JsonElement extract() throws Exception { + var itemsJson = new JsonArray(); + + for (var sound : Registries.SOUND_EVENT) { + var itemJson = new JsonObject(); + itemJson.addProperty("id", Registries.SOUND_EVENT.getRawId(sound)); + itemJson.addProperty("name", Registries.SOUND_EVENT.getId(sound).getPath()); + itemsJson.add(itemJson); + } + + return itemsJson; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Tags.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Tags.java new file mode 100644 index 00000000..2ef18914 --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/Tags.java @@ -0,0 +1,76 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.mojang.datafixers.util.Pair; +import net.minecraft.registry.CombinedDynamicRegistries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.SerializableRegistries; +import net.minecraft.registry.ServerDynamicRegistryType; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.entry.RegistryEntryList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.Identifier; +import rs.valence.extractor.Main; +import rs.valence.extractor.RegistryKeyComparator; + +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.Collectors; + +public class Tags implements Main.Extractor { + private final CombinedDynamicRegistries dynamicRegistryManager; + + public Tags(MinecraftServer server) { + this.dynamicRegistryManager = server.getCombinedDynamicRegistries(); + } + + @Override + public String fileName() { + return "tags.json"; + } + + @Override + public JsonElement extract() { + var tagsJson = new JsonObject(); + + final var registryTags = + SerializableRegistries.streamRegistryManagerEntries(this.dynamicRegistryManager) + .map(registry -> Pair.of(registry.key(), serializeTags(registry.value()))) + .filter(pair -> !(pair.getSecond()).isEmpty()) + .collect(Collectors.toMap(Pair::getFirst, Pair::getSecond, (l, r) -> r, + () -> new TreeMap<>(new RegistryKeyComparator()))); + + for (var registry : registryTags.entrySet()) { + var registryIdent = registry.getKey().getValue().toString(); + var tagGroupTagsJson = new JsonObject(); + + for (var tag : registry.getValue().entrySet()) { + var ident = tag.getKey().toString(); + var rawIds = tag.getValue(); + tagGroupTagsJson.add(ident, rawIds); + } + + tagsJson.add(registryIdent, tagGroupTagsJson); + } + + return tagsJson; + } + + private static Map serializeTags(Registry registry) { + TreeMap map = new TreeMap<>(); + registry.streamTagsAndEntries().forEach(pair -> { + RegistryEntryList registryEntryList = pair.getSecond(); + JsonArray intList = new JsonArray(registryEntryList.size()); + for (RegistryEntry registryEntry : registryEntryList) { + if (registryEntry.getType() != RegistryEntry.Type.REFERENCE) { + throw new IllegalStateException("Can't serialize unregistered value " + registryEntry); + } + intList.add(registry.getRawId(registryEntry.value())); + } + map.put(pair.getFirst().id(), intList); + }); + return map; + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/TranslationKeys.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/TranslationKeys.java new file mode 100644 index 00000000..a44ee34f --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/extractors/TranslationKeys.java @@ -0,0 +1,56 @@ +package rs.valence.extractor.extractors; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.util.Language; +import rs.valence.extractor.Main; + +import java.lang.reflect.Field; +import java.util.Map; + +public class TranslationKeys implements Main.Extractor { + + @Override + public String fileName() { + return "translation_keys.json"; + } + + @Override + public JsonElement extract() { + JsonArray translationsJson = new JsonArray(); + + Map translations = extractTranslations(); + for (var translation : translations.entrySet()) { + String translationKey = translation.getKey(); + String translationValue = translation.getValue(); + + var translationJson = new JsonObject(); + translationJson.addProperty("key", translationKey); + translationJson.addProperty("english_translation", translationValue); + + translationsJson.add(translationJson); + } + + return translationsJson; + } + + @SuppressWarnings("unchecked") + private static Map extractTranslations() { + Language language = Language.getInstance(); + + Class anonymousClass = language.getClass(); + for (Field field : anonymousClass.getDeclaredFields()) { + try { + Object fieldValue = field.get(language); + if (fieldValue instanceof Map) { + return (Map) fieldValue; + } + } catch (IllegalAccessException e) { + throw new RuntimeException("Failed reflection on field '" + field + "' on class '" + anonymousClass + "'", e); + } + } + + throw new RuntimeException("Did not find anonymous map under 'net.minecraft.util.Language.create()'"); + } +} diff --git a/vendor/valence/extractor/src/main/java/rs/valence/extractor/mixin/ExposeWallBlock.java b/vendor/valence/extractor/src/main/java/rs/valence/extractor/mixin/ExposeWallBlock.java new file mode 100644 index 00000000..b25fd0ad --- /dev/null +++ b/vendor/valence/extractor/src/main/java/rs/valence/extractor/mixin/ExposeWallBlock.java @@ -0,0 +1,12 @@ +package rs.valence.extractor.mixin; + +import net.minecraft.block.Block; +import net.minecraft.item.VerticallyAttachableBlockItem; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(VerticallyAttachableBlockItem.class) +public interface ExposeWallBlock { + @Accessor + Block getWallBlock(); +} diff --git a/vendor/valence/extractor/src/main/resources/extractor.mixins.json b/vendor/valence/extractor/src/main/resources/extractor.mixins.json new file mode 100644 index 00000000..e7d59d66 --- /dev/null +++ b/vendor/valence/extractor/src/main/resources/extractor.mixins.json @@ -0,0 +1,9 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "rs.valence.extractor.mixin", + "compatibilityLevel": "JAVA_17", + "mixins": [ + "ExposeWallBlock" + ] +} \ No newline at end of file diff --git a/vendor/valence/extractor/src/main/resources/fabric.mod.json b/vendor/valence/extractor/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..89a8967c --- /dev/null +++ b/vendor/valence/extractor/src/main/resources/fabric.mod.json @@ -0,0 +1,31 @@ +{ + "schemaVersion": 1, + "id": "valence_extractor", + "version": "${version}", + "name": "Valence Extractor", + "description": "Extracts Minecraft data for use in Valence", + "authors": [ + "Valence Project Authors" + ], + "contact": { + "homepage": "https://github.com/valence-rs/valence", + "sources": "https://github.com/valence-rs/valence" + }, + "environment": "*", + "entrypoints": { + "main": [ + "rs.valence.extractor.Main" + ] + }, + "mixins": [ + "extractor.mixins.json" + ], + "depends": { + "fabricloader": ">=0.14.6", + "minecraft": "~1.20.1", + "java": ">=17" + }, + "suggests": { + "another-mod": "*" + } +} \ No newline at end of file diff --git a/vendor/valence/rustfmt.toml b/vendor/valence/rustfmt.toml new file mode 100644 index 00000000..7788221a --- /dev/null +++ b/vendor/valence/rustfmt.toml @@ -0,0 +1,11 @@ +edition = "2021" +unstable_features = true +wrap_comments = true +imports_granularity = "Module" +group_imports = "StdExternalCrate" +format_code_in_doc_comments = true +format_macro_matchers = true +hex_literal_case = "Lower" +format_strings = true +use_field_init_shorthand = true +use_try_shorthand = true diff --git a/vendor/valence/src/lib.rs b/vendor/valence/src/lib.rs new file mode 100644 index 00000000..7a3dbfd8 --- /dev/null +++ b/vendor/valence/src/lib.rs @@ -0,0 +1,258 @@ +#![cfg_attr( + unstable_doc, + doc = "**❗ NOTE:** This documentation is sourced from the `main` branch. If you're looking for the most recent stable release, go [here](https://docs.rs/valence/latest/valence/).\n\n---\n" +)] +#![doc = include_str!("../README.md")] +#![doc( + html_logo_url = "https://raw.githubusercontent.com/valence-rs/valence/main/assets/logo.svg", + html_favicon_url = "https://raw.githubusercontent.com/valence-rs/valence/main/assets/logo.svg" +)] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + unreachable_pub, + clippy::dbg_macro +)] + +use bevy_app::{PluginGroup, PluginGroupBuilder}; + +#[cfg(feature = "testing")] +pub mod testing; + +#[cfg(test)] +mod tests; + +#[cfg(feature = "log")] +pub use bevy_log as log; +use registry::biome::BiomePlugin; +use registry::dimension_type::DimensionTypePlugin; +#[cfg(feature = "advancement")] +pub use valence_advancement as advancement; +#[cfg(feature = "anvil")] +pub use valence_anvil as anvil; +#[cfg(feature = "boss_bar")] +pub use valence_boss_bar as boss_bar; +#[cfg(feature = "command")] +pub use valence_command as command; +#[cfg(feature = "command")] +pub use valence_command_macros as command_macros; +#[cfg(feature = "inventory")] +pub use valence_inventory as inventory; +pub use valence_lang as lang; +#[cfg(feature = "network")] +pub use valence_network as network; +#[cfg(feature = "player_list")] +pub use valence_player_list as player_list; +use valence_registry::RegistryPlugin; +#[cfg(feature = "scoreboard")] +pub use valence_scoreboard as scoreboard; +use valence_server::abilities::AbilitiesPlugin; +use valence_server::action::ActionPlugin; +use valence_server::client::ClientPlugin; +use valence_server::client_command::ClientCommandPlugin; +use valence_server::client_settings::ClientSettingsPlugin; +use valence_server::custom_payload::CustomPayloadPlugin; +use valence_server::entity::hitbox::HitboxPlugin; +use valence_server::entity::EntityPlugin; +use valence_server::event_loop::EventLoopPlugin; +use valence_server::hand_swing::HandSwingPlugin; +use valence_server::interact_block::InteractBlockPlugin; +use valence_server::interact_entity::InteractEntityPlugin; +use valence_server::interact_item::InteractItemPlugin; +use valence_server::keepalive::KeepalivePlugin; +use valence_server::layer::LayerPlugin; +use valence_server::message::MessagePlugin; +use valence_server::movement::MovementPlugin; +use valence_server::op_level::OpLevelPlugin; +pub use valence_server::protocol::status_effects; +use valence_server::resource_pack::ResourcePackPlugin; +use valence_server::status::StatusPlugin; +use valence_server::status_effect::StatusEffectPlugin; +use valence_server::teleport::TeleportPlugin; +pub use valence_server::*; +#[cfg(feature = "weather")] +pub use valence_weather as weather; +#[cfg(feature = "world_border")] +pub use valence_world_border as world_border; + +/// Contains the most frequently used items in Valence projects. +/// +/// This is usually glob imported like so: +/// +/// ``` +/// use valence::prelude::*; // Glob import. +/// +/// let mut app = App::new(); +/// app.add_systems(Update, || println!("yippee!")); +/// // ... +/// ``` +pub mod prelude { + pub use bevy_app::prelude::*; + pub use bevy_ecs; // Needed for bevy_ecs macros to function correctly. + pub use bevy_ecs::prelude::*; + pub use uuid::Uuid; + #[cfg(feature = "advancement")] + pub use valence_advancement::{ + event::AdvancementTabChangeEvent, Advancement, AdvancementBundle, AdvancementClientUpdate, + AdvancementCriteria, AdvancementDisplay, AdvancementFrameType, AdvancementRequirements, + }; + #[cfg(feature = "inventory")] + pub use valence_inventory::{ + CursorItem, Inventory, InventoryKind, InventoryWindow, InventoryWindowMut, OpenInventory, + }; + #[cfg(feature = "network")] + pub use valence_network::{ + ConnectionMode, ErasedNetworkCallbacks, NetworkCallbacks, NetworkSettings, NewClientInfo, + SharedNetworkState, + }; + #[cfg(feature = "player_list")] + pub use valence_player_list::{PlayerList, PlayerListEntry}; + pub use valence_registry::biome::{Biome, BiomeId, BiomeRegistry}; + pub use valence_registry::dimension_type::{DimensionType, DimensionTypeRegistry}; + pub use valence_server::action::{DiggingEvent, DiggingState}; + pub use valence_server::block::{BlockKind, BlockState, PropName, PropValue}; + pub use valence_server::client::{ + despawn_disconnected_clients, Client, Ip, OldView, OldViewDistance, Properties, Username, + View, ViewDistance, VisibleChunkLayer, VisibleEntityLayers, + }; + pub use valence_server::client_command::{ + ClientCommand, JumpWithHorseEvent, JumpWithHorseState, LeaveBedEvent, SneakEvent, + SneakState, SprintEvent, SprintState, + }; + pub use valence_server::entity::hitbox::{Hitbox, HitboxShape}; + pub use valence_server::entity::{ + EntityAnimation, EntityKind, EntityLayerId, EntityManager, EntityStatus, HeadYaw, Look, + OldEntityLayerId, OldPosition, Position, + }; + pub use valence_server::event_loop::{ + EventLoopPostUpdate, EventLoopPreUpdate, EventLoopUpdate, + }; + pub use valence_server::ident::Ident; + pub use valence_server::interact_entity::{EntityInteraction, InteractEntityEvent}; + pub use valence_server::layer::chunk::{ + Block, BlockRef, Chunk, ChunkLayer, LoadedChunk, UnloadedChunk, + }; + pub use valence_server::layer::{EntityLayer, LayerBundle}; + pub use valence_server::math::{DVec2, DVec3, Vec2, Vec3}; + pub use valence_server::message::SendMessage as _; + pub use valence_server::nbt::Compound; + pub use valence_server::protocol::packets::play::particle_s2c::Particle; + pub use valence_server::protocol::text::{Color, IntoText, Text}; + pub use valence_server::spawn::{ClientSpawnQuery, ClientSpawnQueryReadOnly, RespawnPosition}; + pub use valence_server::title::SetTitle as _; + pub use valence_server::{ + ident, BlockPos, ChunkPos, ChunkView, Despawned, Direction, GameMode, Hand, ItemKind, + ItemStack, Server, UniqueId, + }; + + pub use super::DefaultPlugins; +} + +/// This plugin group will add all the default plugins for a Valence +/// application. +/// +/// [`DefaultPlugins`] obeys Cargo feature flags. Users may exert control over +/// this plugin group by disabling `default-features` in their `Cargo.toml` and +/// enabling only those features that they wish to use. +pub struct DefaultPlugins; + +impl PluginGroup for DefaultPlugins { + fn build(self) -> PluginGroupBuilder { + #[allow(unused_mut)] + let mut group = PluginGroupBuilder::start::() + .add(ServerPlugin) + .add(RegistryPlugin) + .add(BiomePlugin) + .add(DimensionTypePlugin) + .add(EntityPlugin) + .add(HitboxPlugin) + .add(LayerPlugin) + .add(ClientPlugin) + .add(EventLoopPlugin) + .add(MovementPlugin) + .add(ClientCommandPlugin) + .add(KeepalivePlugin) + .add(InteractEntityPlugin) + .add(ClientSettingsPlugin) + .add(ActionPlugin) + .add(TeleportPlugin) + .add(MessagePlugin) + .add(CustomPayloadPlugin) + .add(HandSwingPlugin) + .add(InteractBlockPlugin) + .add(InteractItemPlugin) + .add(OpLevelPlugin) + .add(ResourcePackPlugin) + .add(StatusPlugin) + .add(StatusEffectPlugin) + .add(AbilitiesPlugin); + + #[cfg(feature = "log")] + { + group = group.add(bevy_log::LogPlugin::default()); + } + + #[cfg(feature = "network")] + { + group = group.add(valence_network::NetworkPlugin); + } + + #[cfg(feature = "player_list")] + { + group = group.add(valence_player_list::PlayerListPlugin); + } + + #[cfg(feature = "inventory")] + { + group = group.add(valence_inventory::InventoryPlugin); + } + + #[cfg(feature = "anvil")] + { + group = group.add(valence_anvil::AnvilPlugin); + } + + #[cfg(feature = "advancement")] + { + group = group.add(valence_advancement::AdvancementPlugin) + } + + #[cfg(feature = "weather")] + { + group = group.add(valence_weather::WeatherPlugin); + } + + #[cfg(feature = "world_border")] + { + group = group.add(valence_world_border::WorldBorderPlugin); + } + + #[cfg(feature = "boss_bar")] + { + group = group.add(valence_boss_bar::BossBarPlugin); + } + + #[cfg(feature = "command")] + { + group = group.add(valence_command::manager::CommandPlugin); + } + + #[cfg(feature = "scoreboard")] + { + group = group.add(valence_scoreboard::ScoreboardPlugin); + } + + group + } +} diff --git a/vendor/valence/src/testing.rs b/vendor/valence/src/testing.rs new file mode 100644 index 00000000..58fdc147 --- /dev/null +++ b/vendor/valence/src/testing.rs @@ -0,0 +1,335 @@ +use std::collections::VecDeque; +use std::net::{IpAddr, Ipv4Addr}; +use std::sync::{Arc, Mutex}; +use std::time::{Duration, Instant}; + +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; +use bytes::{Buf, BufMut, BytesMut}; +use uuid::Uuid; +use valence_ident::ident; +use valence_network::NetworkPlugin; +use valence_registry::{BiomeRegistry, DimensionTypeRegistry}; +use valence_server::client::{ClientBundle, ClientBundleArgs, ClientConnection, ReceivedPacket}; +use valence_server::keepalive::KeepaliveSettings; +use valence_server::protocol::decode::PacketFrame; +use valence_server::protocol::packets::play::{PlayerPositionLookS2c, TeleportConfirmC2s}; +use valence_server::protocol::{Decode, Encode, Packet, PacketDecoder, PacketEncoder, VarInt}; +use valence_server::{ChunkLayer, EntityLayer, Server, ServerSettings}; + +use crate::DefaultPlugins; +pub struct ScenarioSingleClient { + /// The new bevy application. + pub app: App, + /// Entity handle for the single client. + pub client: Entity, + /// Helper for sending and receiving packets from the mock client. + pub helper: MockClientHelper, + /// Entity with [`ChunkLayer`] and [`EntityLayer`] components. + pub layer: Entity, +} + +impl ScenarioSingleClient { + /// Sets up Valence with a single mock client and entity+chunk layer. The + /// client is configured to be placed within the layer. + /// + /// Reduces boilerplate in unit tests. + pub fn new() -> Self { + let mut app = App::new(); + + app.insert_resource(KeepaliveSettings { + period: Duration::MAX, + }) + .insert_resource(ServerSettings { + compression_threshold: Default::default(), + ..Default::default() + }) + .add_plugins(DefaultPlugins.build().disable::()); + + app.update(); // Initialize plugins. + + let chunk_layer = ChunkLayer::new( + ident!("overworld"), + app.world.resource::(), + app.world.resource::(), + app.world.resource::(), + ); + let entity_layer = EntityLayer::new(app.world.resource::()); + let layer = app.world.spawn((chunk_layer, entity_layer)).id(); + + let (mut client, helper) = create_mock_client("test"); + client.player.layer.0 = layer; + client.visible_chunk_layer.0 = layer; + client.visible_entity_layers.0.insert(layer); + let client = app.world.spawn(client).id(); + + ScenarioSingleClient { + app, + client, + helper, + layer, + } + } +} + +impl Default for ScenarioSingleClient { + fn default() -> Self { + Self::new() + } +} + +/// Creates a mock client bundle that can be used for unit testing. +/// +/// Returns the client, and a helper to inject packets as if the client sent +/// them and receive packets as if the client received them. +pub fn create_mock_client(name: impl Into) -> (ClientBundle, MockClientHelper) { + let conn = MockClientConnection::new(); + + let bundle = ClientBundle::new(ClientBundleArgs { + username: name.into(), + uuid: Uuid::from_bytes(rand::random()), + ip: IpAddr::V4(Ipv4Addr::LOCALHOST), + properties: Default::default(), + conn: Box::new(conn.clone()), + enc: PacketEncoder::new(), + }); + + let helper = MockClientHelper::new(conn); + + (bundle, helper) +} + +/// A mock client connection that can be used for testing. +/// +/// Safe to clone, but note that the clone will share the same buffers. +#[derive(Clone)] +pub struct MockClientConnection { + inner: Arc>, +} + +struct MockClientConnectionInner { + /// The queue of packets to receive from the client to be processed by the + /// server. + recv_buf: VecDeque, + /// The queue of packets to send from the server to the client. + send_buf: BytesMut, +} + +impl MockClientConnection { + pub fn new() -> Self { + Self { + inner: Arc::new(Mutex::new(MockClientConnectionInner { + recv_buf: VecDeque::new(), + send_buf: BytesMut::new(), + })), + } + } + + /// Injects a (Packet ID + data) frame to be received by the server. + fn inject_send(&self, mut bytes: BytesMut) { + let id = VarInt::decode_partial((&mut bytes).reader()).expect("failed to decode packet ID"); + + self.inner + .lock() + .unwrap() + .recv_buf + .push_back(ReceivedPacket { + timestamp: Instant::now(), + id, + body: bytes.freeze(), + }); + } + + fn take_received(&self) -> BytesMut { + self.inner.lock().unwrap().send_buf.split() + } + + fn clear_received(&self) { + self.inner.lock().unwrap().send_buf.clear(); + } +} + +impl ClientConnection for MockClientConnection { + fn try_send(&mut self, bytes: BytesMut) -> anyhow::Result<()> { + self.inner.lock().unwrap().send_buf.unsplit(bytes); + Ok(()) + } + + fn try_recv(&mut self) -> anyhow::Result> { + Ok(self.inner.lock().unwrap().recv_buf.pop_front()) + } + + fn len(&self) -> usize { + self.inner.lock().unwrap().recv_buf.len() + } +} + +impl Default for MockClientConnection { + fn default() -> Self { + Self::new() + } +} + +/// Contains the mocked client connection and helper methods to inject packets +/// and read packets from the send stream. +pub struct MockClientHelper { + conn: MockClientConnection, + dec: PacketDecoder, + scratch: BytesMut, +} + +impl MockClientHelper { + pub fn new(conn: MockClientConnection) -> Self { + Self { + conn, + dec: PacketDecoder::new(), + scratch: BytesMut::new(), + } + } + + /// Inject a packet to be treated as a packet inbound to the server. Panics + /// if the packet cannot be sent. + #[track_caller] + pub fn send

(&mut self, packet: &P) + where + P: Packet + Encode, + { + packet + .encode_with_id((&mut self.scratch).writer()) + .expect("failed to encode packet"); + + self.conn.inject_send(self.scratch.split()); + } + + /// Collect all packets that have been received by the client. + #[track_caller] + pub fn collect_received(&mut self) -> PacketFrames { + self.dec.queue_bytes(self.conn.take_received()); + + let mut res = vec![]; + + while let Some(frame) = self + .dec + .try_next_packet() + .expect("failed to decode packet frame") + { + res.push(frame); + } + + PacketFrames(res) + } + + pub fn clear_received(&mut self) { + self.conn.clear_received(); + } + + pub fn confirm_initial_pending_teleports(&mut self) { + let mut counter = 0; + + for pkt in self.collect_received().0 { + if pkt.id == PlayerPositionLookS2c::ID { + pkt.decode::().unwrap(); + + self.send(&TeleportConfirmC2s { + teleport_id: counter.into(), + }); + + counter += 1; + } + } + } +} + +#[derive(Clone, Debug)] +pub struct PacketFrames(pub Vec); + +impl PacketFrames { + #[track_caller] + pub fn assert_count(&self, expected_count: usize) { + let actual_count = self.0.iter().filter(|f| f.id == P::ID).count(); + + if expected_count != actual_count { + panic!( + "unexpected packet count for {} (expected {expected_count}, got {actual_count})", + P::NAME, + ); + } + } + + #[track_caller] + pub fn assert_order(&self) { + let positions: Vec<_> = self + .0 + .iter() + .filter_map(|f| L::packets().iter().position(|(id, _)| f.id == *id)) + .collect(); + + // TODO: replace with slice::is_sorted when stabilized. + let is_sorted = positions.windows(2).all(|w| w[0] <= w[1]); + + if !is_sorted { + panic!( + "packets out of order (expected {:?}, got {:?})", + L::packets(), + self.debug_order::() + ); + } + } + + /// Finds the first occurrence of `P` in the packet list and decodes it. + /// + /// # Panics + /// + /// Panics if the packet was not found or a decoding error occurs. + #[track_caller] + pub fn first<'a, P>(&'a self) -> P + where + P: Packet + Decode<'a>, + { + if let Some(frame) = self.0.iter().find(|p| p.id == P::ID) { + frame.decode::

().unwrap() + } else { + panic!("failed to find packet {}", P::NAME) + } + } + + pub fn debug_order(&self) -> impl std::fmt::Debug { + self.0 + .iter() + .filter_map(|f| L::packets().iter().find(|(id, _)| f.id == *id).cloned()) + .collect::>() + } +} + +pub trait PacketList { + fn packets() -> &'static [(i32, &'static str)]; +} + +macro_rules! impl_packet_list { + ($($ty:ident),*) => { + impl<$($ty: Packet,)*> PacketList for ($($ty,)*) { + fn packets() -> &'static [(i32, &'static str)] { + &[ + $( + ( + $ty::ID, + $ty::NAME + ), + )* + ] + } + } + } +} + +impl_packet_list!(A); +impl_packet_list!(A, B); +impl_packet_list!(A, B, C); +impl_packet_list!(A, B, C, D); +impl_packet_list!(A, B, C, D, E); +impl_packet_list!(A, B, C, D, E, F); +impl_packet_list!(A, B, C, D, E, F, G); +impl_packet_list!(A, B, C, D, E, F, G, H); +impl_packet_list!(A, B, C, D, E, F, G, H, I); +impl_packet_list!(A, B, C, D, E, F, G, H, I, J); +impl_packet_list!(A, B, C, D, E, F, G, H, I, J, K); diff --git a/vendor/valence/src/tests.rs b/vendor/valence/src/tests.rs new file mode 100644 index 00000000..e8297121 --- /dev/null +++ b/vendor/valence/src/tests.rs @@ -0,0 +1,11 @@ +mod boss_bar; +mod client; +mod example; +mod hunger; +mod inventory; +mod layer; +mod player_list; +mod potions; +mod scoreboard; +mod weather; +mod world_border; diff --git a/vendor/valence/src/tests/boss_bar.rs b/vendor/valence/src/tests/boss_bar.rs new file mode 100644 index 00000000..c2b6cf2a --- /dev/null +++ b/vendor/valence/src/tests/boss_bar.rs @@ -0,0 +1,196 @@ +use valence_boss_bar::{ + BossBarBundle, BossBarColor, BossBarDivision, BossBarFlags, BossBarHealth, BossBarStyle, + BossBarTitle, +}; +use valence_server::client::VisibleEntityLayers; +use valence_server::entity::EntityLayerId; +use valence_server::protocol::packets::play::BossBarS2c; +use valence_server::text::IntoText; +use valence_server::Despawned; + +use crate::testing::ScenarioSingleClient; +use crate::Text; + +#[test] +fn test_initialize_on_join() { + let mut scenario = ScenarioSingleClient::new(); + + // Insert a boss bar into the world + scenario + .app + .world + .entity_mut(scenario.layer) + .insert(BossBarBundle { + title: BossBarTitle("Boss Bar".into_text()), + health: BossBarHealth(0.5), + layer: EntityLayerId(scenario.layer), + ..Default::default() + }); + + scenario.app.update(); + + // We should receive a boss bar packet with the ADD action + let frames = scenario.helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_despawn() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + .. + } = prepare(); + + // Despawn the boss bar + app.world.entity_mut(layer).insert(Despawned); + + app.update(); + + // We should receive a boss bar packet with the REMOVE action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_title_update() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + .. + } = prepare(); + + // Update the title + app.world + .entity_mut(layer) + .insert(BossBarTitle(Text::text("Test 2"))); + + app.update(); + + // We should receive a boss bar packet with the UPDATE_TITLE action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_health_update() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + .. + } = prepare(); + + // Update the health + app.world.entity_mut(layer).insert(BossBarHealth(0.5)); + + app.update(); + + // We should receive a boss bar packet with the UPDATE_HEALTH action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_style_update() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + .. + } = prepare(); + + // Update the style + app.world.entity_mut(layer).insert(BossBarStyle { + color: BossBarColor::Red, + division: BossBarDivision::TenNotches, + }); + + app.update(); + + // We should receive a boss bar packet with the UPDATE_STYLE action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_flags_update() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + .. + } = prepare(); + + // Update the flags + let mut new_flags = BossBarFlags::new(); + new_flags.set_create_fog(true); + app.world.entity_mut(layer).insert(new_flags); + + app.update(); + + // We should receive a boss bar packet with the UPDATE_FLAGS action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_client_layer_change() { + let ScenarioSingleClient { + mut app, + mut helper, + layer, + client, + } = prepare(); + + // Remove the layer from the client + { + let mut visible_entity_layers = app.world.get_mut::(client).unwrap(); + visible_entity_layers.0.clear(); + } + + app.update(); + + // We should receive a boss bar packet with the REMOVE action + let frames = helper.collect_received(); + frames.assert_count::(1); + + // Add the layer back to the client + { + let mut visible_entity_layers = app.world.get_mut::(client).unwrap(); + visible_entity_layers.0.insert(layer); + } + + app.update(); + + // We should receive a boss bar packet with the ADD action + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +fn prepare() -> ScenarioSingleClient { + let mut s = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + s.app.update(); + s.helper.clear_received(); + + // Insert a boss bar into the world + + // Attach the new boss bar to the layer for convenience. + s.app.world.entity_mut(s.layer).insert(BossBarBundle { + title: BossBarTitle("Boss Bar".into_text()), + health: BossBarHealth(0.5), + layer: EntityLayerId(s.layer), + ..Default::default() + }); + + for _ in 0..2 { + s.app.update(); + } + + s.helper.clear_received(); + s +} diff --git a/vendor/valence/src/tests/client.rs b/vendor/valence/src/tests/client.rs new file mode 100644 index 00000000..0055469f --- /dev/null +++ b/vendor/valence/src/tests/client.rs @@ -0,0 +1,103 @@ +use crate::abilities::PlayerAbilitiesFlags; +use crate::layer::chunk::UnloadedChunk; +use crate::layer::ChunkLayer; +use crate::math::DVec3; +use crate::protocol::packets::play::{ + FullC2s, MoveRelativeS2c, PlayerPositionLookS2c, TeleportConfirmC2s, +}; +use crate::testing::{create_mock_client, ScenarioSingleClient}; +use crate::{ChunkPos, GameMode}; + +#[test] +fn client_teleport_and_move() { + let ScenarioSingleClient { + mut app, + client: _, + helper: mut helper_1, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + for z in -10..10 { + for x in -10..10 { + layer.insert_chunk(ChunkPos::new(x, z), UnloadedChunk::new()); + } + } + + let (mut bundle, mut helper_2) = create_mock_client("other"); + + bundle.player.layer.0 = layer_ent; + bundle.visible_chunk_layer.0 = layer_ent; + bundle.visible_entity_layers.0.insert(layer_ent); + + app.world.spawn(bundle); + + app.update(); + + // Client received an initial teleport. + helper_1 + .collect_received() + .assert_count::(1); + + // Confirm the initial teleport from the server. + helper_1.send(&TeleportConfirmC2s { + teleport_id: 0.into(), + }); + + // Move a little. + helper_1.send(&FullC2s { + position: DVec3::new(1.0, 0.0, 0.0), + yaw: 0.0, + pitch: 0.0, + on_ground: true, + }); + + app.update(); + + // Check that the other client saw the client moving. + helper_2 + .collect_received() + .assert_count::(1); +} + +#[test] +fn client_gamemode_changed_ability() { + let mut scenario = ScenarioSingleClient::new(); + + *scenario + .app + .world + .get_mut::(scenario.client) + .unwrap() = GameMode::Creative; + + scenario.app.update(); + + let abilities = scenario + .app + .world + .get::(scenario.client) + .unwrap(); + + assert!(abilities.allow_flying()); + assert!(abilities.instant_break()); + assert!(abilities.invulnerable()); + + *scenario + .app + .world + .get_mut::(scenario.client) + .unwrap() = GameMode::Adventure; + + scenario.app.update(); + + let abilities = scenario + .app + .world + .get::(scenario.client) + .unwrap(); + + assert!(!abilities.allow_flying()); + assert!(!abilities.instant_break()); + assert!(!abilities.invulnerable()); +} diff --git a/vendor/valence/src/tests/example.rs b/vendor/valence/src/tests/example.rs new file mode 100644 index 00000000..abf2bb2d --- /dev/null +++ b/vendor/valence/src/tests/example.rs @@ -0,0 +1,95 @@ +//! Examples of valence unit tests that need to test the behavior of the server, +//! and not just the logic of a single function. This module is meant to be a +//! palette of examples for how to write such tests, with various levels of +//! complexity. +//! +//! Some of the tests in this file may be inferior duplicates of real tests. + +use bevy_app::App; + +use crate::client::Client; +use crate::entity::Position; +use crate::inventory::{Inventory, InventoryKind, OpenInventory}; +use crate::math::DVec3; +use crate::protocol::packets::play::{InventoryS2c, OpenScreenS2c, PositionAndOnGroundC2s}; +use crate::testing::ScenarioSingleClient; +use crate::{DefaultPlugins, Server}; + +/// The server's tick should increment every update. +#[test] +fn example_test_server_tick_increment() { + let mut app = App::new(); + + app.add_plugins(DefaultPlugins); + + let tick = app.world.resource::().current_tick(); + + app.update(); + + let server = app.world.resource::(); + assert_eq!(server.current_tick(), tick + 1); +} + +/// A unit test where we want to test what happens when a client sends a +/// packet to the server. +#[test] +fn example_test_client_position() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Send a packet as the client to the server. + let packet = PositionAndOnGroundC2s { + position: DVec3::new(12.0, 64.0, 0.0), + on_ground: true, + }; + helper.send(&packet); + + // Process the packet. + app.update(); + + // Make assertions + let pos = app.world.get::(client).unwrap(); + assert_eq!(pos.0, DVec3::new(12.0, 64.0, 0.0)); +} + +/// A unit test where we want to test what packets are sent to the client. +#[test] +fn example_test_open_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory = Inventory::new(InventoryKind::Generic3x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Open the inventory. + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client) + .expect("could not find client") + .insert(open_inventory); + + app.update(); + app.update(); + + // Make assertions + app.world.get::(client).expect("client not found"); + + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); + sent_packets.assert_count::(1); + + sent_packets.assert_order::<(OpenScreenS2c, InventoryS2c)>(); +} diff --git a/vendor/valence/src/tests/hunger.rs b/vendor/valence/src/tests/hunger.rs new file mode 100644 index 00000000..37f65550 --- /dev/null +++ b/vendor/valence/src/tests/hunger.rs @@ -0,0 +1,38 @@ +use valence_server::entity::living::Health; +use valence_server::entity::player::{Food, Saturation}; +use valence_server::protocol::packets::play::HealthUpdateS2c; +use valence_server::protocol::VarInt; + +use crate::testing::ScenarioSingleClient; + +#[test] +fn test_hunger() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + app.update(); + helper.clear_received(); + + let og_saturation = app.world.get::(client).unwrap().0; + let og_health = app.world.get::(client).unwrap().0; + + // set food level to 5 + app.world.get_mut::(client).unwrap().0 = 5; + + app.update(); + + // make sure the packet was sent + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); + + let packet = sent_packets.first::(); + + assert_eq!(packet.health, og_health); + assert_eq!(packet.food, VarInt(5)); + assert_eq!(packet.food_saturation, og_saturation); +} diff --git a/vendor/valence/src/tests/inventory.rs b/vendor/valence/src/tests/inventory.rs new file mode 100644 index 00000000..3aa589c4 --- /dev/null +++ b/vendor/valence/src/tests/inventory.rs @@ -0,0 +1,1155 @@ +use bevy_app::prelude::*; +use bevy_ecs::prelude::*; + +use crate::inventory::{ + convert_to_player_slot_id, ClickMode, ClientInventoryState, CursorItem, DropItemStackEvent, + HeldItem, Inventory, InventoryKind, OpenInventory, SlotChange, +}; +use crate::protocol::packets::play::{ + ClickSlotC2s, CloseScreenS2c, CreativeInventoryActionC2s, InventoryS2c, OpenScreenS2c, + ScreenHandlerSlotUpdateS2c, UpdateSelectedSlotC2s, +}; +use crate::protocol::VarInt; +use crate::testing::ScenarioSingleClient; +use crate::{GameMode, ItemKind, ItemStack}; + +#[test] +fn test_should_open_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory = Inventory::new(InventoryKind::Generic3x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Open the inventory. + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client) + .expect("could not find client") + .insert(open_inventory); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); + sent_packets.assert_count::(1); + sent_packets.assert_order::<(OpenScreenS2c, InventoryS2c)>(); +} + +#[test] +fn test_should_close_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory = Inventory::new(InventoryKind::Generic3x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Open the inventory. + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client) + .expect("could not find client") + .insert(open_inventory); + + app.update(); + helper.clear_received(); + + // Close the inventory. + app.world + .get_entity_mut(client) + .expect("could not find client") + .remove::(); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); +} + +#[test] +fn test_should_remove_invalid_open_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory = Inventory::new(InventoryKind::Generic3x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Open the inventory. + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client) + .expect("could not find client") + .insert(open_inventory); + + app.update(); + helper.clear_received(); + + // Remove the inventory. + app.world.despawn(inventory_ent); + + app.update(); + + // Make assertions + assert!(app.world.get::(client).is_none()); + + let sent_packets = helper.collect_received(); + sent_packets.assert_count::(1); +} + +#[test] +fn test_should_modify_player_inventory_click_slot() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory for client"); + inventory.set_slot(20, ItemStack::new(ItemKind::Diamond, 2, None)); + + // Make the client click the slot and pick up the item. + let state_id = app + .world + .get::(client) + .unwrap() + .state_id(); + + helper.send(&ClickSlotC2s { + window_id: 0, + button: 0, + mode: ClickMode::Click, + state_id: VarInt(state_id.0), + slot_idx: 20, + slot_changes: vec![SlotChange { + idx: 20, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::new(ItemKind::Diamond, 2, None), + }); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + // because the inventory was changed as a result of the client's click, the + // server should not send any packets to the client because the client + // already knows about the change. + sent_packets.assert_count::(0); + sent_packets.assert_count::(0); + + let inventory = app + .world + .get::(client) + .expect("could not find inventory for client"); + + assert_eq!(inventory.slot(20), &ItemStack::EMPTY); + + let cursor_item = app + .world + .get::(client) + .expect("could not find client"); + + assert_eq!(cursor_item.0, ItemStack::new(ItemKind::Diamond, 2, None)); +} + +#[test] +fn test_should_modify_player_inventory_server_side() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory for client"); + inventory.set_slot(20, ItemStack::new(ItemKind::Diamond, 2, None)); + + app.update(); + helper.clear_received(); + + // Modify the inventory. + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory for client"); + inventory.set_slot(21, ItemStack::new(ItemKind::IronIngot, 1, None)); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + // because the inventory was modified server side, the client needs to be + // updated with the change. + sent_packets.assert_count::(1); +} + +#[test] +fn test_should_sync_entire_player_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory for client"); + inventory.changed = u64::MAX; + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + sent_packets.assert_count::(1); +} + +fn set_up_open_inventory(app: &mut App, client_ent: Entity) -> Entity { + let inventory = Inventory::new(InventoryKind::Generic9x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Open the inventory. + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client_ent) + .expect("could not find client") + .insert(open_inventory); + + inventory_ent +} + +#[test] +fn test_should_modify_open_inventory_click_slot() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory_ent = set_up_open_inventory(&mut app, client); + + let mut inventory = app + .world + .get_mut::(inventory_ent) + .expect("could not find inventory for client"); + + inventory.set_slot(20, ItemStack::new(ItemKind::Diamond, 2, None)); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Make the client click the slot and pick up the item. + let inv_state = app.world.get::(client).unwrap(); + let state_id = inv_state.state_id(); + let window_id = inv_state.window_id(); + helper.send(&ClickSlotC2s { + window_id, + state_id: VarInt(state_id.0), + slot_idx: 20, + button: 0, + mode: ClickMode::Click, + slot_changes: vec![SlotChange { + idx: 20, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::new(ItemKind::Diamond, 2, None), + }); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + // because the inventory was modified as a result of the client's click, the + // server should not send any packets to the client because the client + // already knows about the change. + sent_packets.assert_count::(0); + sent_packets.assert_count::(0); + + let inventory = app + .world + .get::(inventory_ent) + .expect("could not find inventory"); + assert_eq!(inventory.slot(20), &ItemStack::EMPTY); + let cursor_item = app + .world + .get::(client) + .expect("could not find client"); + assert_eq!(cursor_item.0, ItemStack::new(ItemKind::Diamond, 2, None)); +} + +#[test] +fn test_should_modify_open_inventory_server_side() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory_ent = set_up_open_inventory(&mut app, client); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Modify the inventory. + let mut inventory = app + .world + .get_mut::(inventory_ent) + .expect("could not find inventory for client"); + inventory.set_slot(5, ItemStack::new(ItemKind::IronIngot, 1, None)); + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + // because the inventory was modified server side, the client needs to be + // updated with the change. + sent_packets.assert_count::(1); + + let inventory = app + .world + .get::(inventory_ent) + .expect("could not find inventory for client"); + + assert_eq!( + inventory.slot(5), + &ItemStack::new(ItemKind::IronIngot, 1, None) + ); +} + +#[test] +fn test_should_sync_entire_open_inventory() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory_ent = set_up_open_inventory(&mut app, client); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut inventory = app + .world + .get_mut::(inventory_ent) + .expect("could not find inventory"); + inventory.changed = u64::MAX; + + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + sent_packets.assert_count::(1); +} + +#[test] +fn test_set_creative_mode_slot_handling() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let mut game_mode = app + .world + .get_mut::(client) + .expect("could not find client"); + *game_mode.as_mut() = GameMode::Creative; + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + helper.send(&CreativeInventoryActionC2s { + slot: 36, + clicked_item: ItemStack::new(ItemKind::Diamond, 2, None), + }); + + app.update(); + + // Make assertions + let inventory = app + .world + .get::(client) + .expect("could not find inventory for client"); + + assert_eq!( + inventory.slot(36), + &ItemStack::new(ItemKind::Diamond, 2, None) + ); +} + +#[test] +fn test_ignore_set_creative_mode_slot_if_not_creative() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let mut game_mode = app + .world + .get_mut::(client) + .expect("could not find client"); + *game_mode.as_mut() = GameMode::Survival; + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + helper.send(&CreativeInventoryActionC2s { + slot: 36, + clicked_item: ItemStack::new(ItemKind::Diamond, 2, None), + }); + + app.update(); + + // Make assertions + let inventory = app + .world + .get::(client) + .expect("could not find inventory for client"); + assert_eq!(inventory.slot(36), &ItemStack::EMPTY); +} + +#[test] +fn test_window_id_increments() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + let inventory = Inventory::new(InventoryKind::Generic9x3); + let inventory_ent = app.world.spawn(inventory).id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + for _ in 0..3 { + let open_inventory = OpenInventory::new(inventory_ent); + app.world + .get_entity_mut(client) + .expect("could not find client") + .insert(open_inventory); + + app.update(); + + app.world + .get_entity_mut(client) + .expect("could not find client") + .remove::(); + + app.update(); + } + + // Make assertions + let inv_state = app + .world + .get::(client) + .expect("could not find client"); + assert_eq!(inv_state.window_id(), 3); +} + +#[test] +fn test_should_handle_set_held_item() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + helper.send(&UpdateSelectedSlotC2s { slot: 4 }); + + app.update(); + + // Make assertions + let held = app + .world + .get::(client) + .expect("could not find client"); + + assert_eq!(held.slot(), 40); +} + +#[test] +fn should_not_increment_state_id_on_cursor_item_change() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let inv_state = app + .world + .get::(client) + .expect("could not find client"); + let expected_state_id = inv_state.state_id().0; + + let mut cursor_item = app.world.get_mut::(client).unwrap(); + cursor_item.0 = ItemStack::new(ItemKind::Diamond, 2, None); + + app.update(); + + // Make assertions + let inv_state = app + .world + .get::(client) + .expect("could not find client"); + assert_eq!( + inv_state.state_id().0, + expected_state_id, + "state id should not have changed" + ); +} + +mod dropping_items { + use super::*; + use crate::inventory::{convert_to_player_slot_id, PlayerAction}; + use crate::protocol::packets::play::PlayerActionC2s; + use crate::{BlockPos, Direction}; + + #[test] + fn should_drop_item_player_action() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + inventory.set_slot(36, ItemStack::new(ItemKind::IronIngot, 3, None)); + + helper.send(&PlayerActionC2s { + action: PlayerAction::DropItem, + position: BlockPos::new(0, 0, 0), + direction: Direction::Down, + sequence: VarInt(0), + }); + + app.update(); + + // Make assertions + let inventory = app + .world + .get::(client) + .expect("could not find client"); + + assert_eq!( + inventory.slot(36), + &ItemStack::new(ItemKind::IronIngot, 2, None) + ); + + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, Some(36)); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 1, None) + ); + + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(0); + } + + #[test] + fn should_drop_item_stack_player_action() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + inventory.set_slot(36, ItemStack::new(ItemKind::IronIngot, 32, None)); + + helper.send(&PlayerActionC2s { + action: PlayerAction::DropAllItems, + position: BlockPos::new(0, 0, 0), + direction: Direction::Down, + sequence: VarInt(0), + }); + + app.update(); + + // Make assertions + let held = app + .world + .get::(client) + .expect("could not find client"); + assert_eq!(held.slot(), 36); + let inventory = app + .world + .get::(client) + .expect("could not find inventory"); + assert_eq!(inventory.slot(36), &ItemStack::EMPTY); + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + let events = events.iter_current_update_events().collect::>(); + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, Some(36)); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 32, None) + ); + } + + #[test] + fn should_drop_item_stack_set_creative_mode_slot() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + app.world.entity_mut(client).insert(GameMode::Creative); + + helper.send(&CreativeInventoryActionC2s { + slot: -1, + clicked_item: ItemStack::new(ItemKind::IronIngot, 32, None), + }); + + app.update(); + + // Make assertions + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events") + .iter_current_update_events() + .collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, None); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 32, None) + ); + } + + #[test] + fn should_drop_item_stack_click_container_outside() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut cursor_item = app + .world + .get_mut::(client) + .expect("could not find client"); + cursor_item.0 = ItemStack::new(ItemKind::IronIngot, 32, None); + let inv_state = app + .world + .get_mut::(client) + .expect("could not find client"); + let state_id = inv_state.state_id().0; + + helper.send(&ClickSlotC2s { + window_id: 0, + state_id: VarInt(state_id), + slot_idx: -999, + button: 0, + mode: ClickMode::Click, + slot_changes: vec![].into(), + carried_item: ItemStack::EMPTY, + }); + + app.update(); + + // Make assertions + let cursor_item = app + .world + .get::(client) + .expect("could not find client"); + + assert_eq!(cursor_item.0, ItemStack::EMPTY); + + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, None); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 32, None) + ); + } + + #[test] + fn should_drop_item_click_container_with_dropkey_single() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let inv_state = app + .world + .get_mut::(client) + .expect("could not find client"); + + let state_id = inv_state.state_id().0; + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + + inventory.set_slot(40, ItemStack::new(ItemKind::IronIngot, 32, None)); + + helper.send(&ClickSlotC2s { + window_id: 0, + slot_idx: 40, + button: 0, + mode: ClickMode::DropKey, + state_id: VarInt(state_id), + slot_changes: vec![SlotChange { + idx: 40, + stack: ItemStack::new(ItemKind::IronIngot, 31, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }); + + app.update(); + + // Make assertions + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, Some(40)); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 1, None) + ); + } + + #[test] + fn should_drop_item_stack_click_container_with_dropkey() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let inv_state = app + .world + .get_mut::(client) + .expect("could not find client"); + + let state_id = inv_state.state_id().0; + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + + inventory.set_slot(40, ItemStack::new(ItemKind::IronIngot, 32, None)); + + helper.send(&ClickSlotC2s { + window_id: 0, + slot_idx: 40, + button: 1, // pressing control + mode: ClickMode::DropKey, + state_id: VarInt(state_id), + slot_changes: vec![SlotChange { + idx: 40, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::EMPTY, + }); + + app.update(); + + // Make assertions + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!(events[0].from_slot, Some(40)); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 32, None) + ); + } + + /// The item should be dropped successfully, if the player has an inventory + /// open and the slot id points to his inventory. + #[test] + fn should_drop_item_player_open_inventory_with_dropkey() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + + inventory.set_slot( + convert_to_player_slot_id(InventoryKind::Generic9x3, 50), + ItemStack::new(ItemKind::IronIngot, 32, None), + ); + + let _inventory_ent = set_up_open_inventory(&mut app, client); + + app.update(); + + helper.clear_received(); + + let inv_state = app + .world + .get_mut::(client) + .expect("could not find client"); + + let state_id = inv_state.state_id().0; + let window_id = inv_state.window_id(); + + helper.send(&ClickSlotC2s { + window_id, + state_id: VarInt(state_id), + slot_idx: 50, // not pressing control + button: 0, + mode: ClickMode::DropKey, + slot_changes: vec![SlotChange { + idx: 50, + stack: ItemStack::new(ItemKind::IronIngot, 31, None), + }] + .into(), + carried_item: ItemStack::EMPTY, + }); + + app.update(); + + // Make assertions + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let player_inventory = app + .world + .get::(client) + .expect("could not find inventory"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!( + events[0].from_slot, + Some(convert_to_player_slot_id(InventoryKind::Generic9x3, 50)) + ); + + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 1, None) + ); + + // Also make sure that the player inventory was updated correctly. + let expected_player_slot_id = convert_to_player_slot_id(InventoryKind::Generic9x3, 50); + assert_eq!( + player_inventory.slot(expected_player_slot_id), + &ItemStack::new(ItemKind::IronIngot, 31, None) + ); + } +} + +/// The item stack should be dropped successfully, if the player has an +/// inventory open and the slot id points to his inventory. +#[test] +fn should_drop_item_stack_player_open_inventory_with_dropkey() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + + let mut inventory = app + .world + .get_mut::(client) + .expect("could not find inventory"); + + inventory.set_slot( + convert_to_player_slot_id(InventoryKind::Generic9x3, 50), + ItemStack::new(ItemKind::IronIngot, 32, None), + ); + + let _inventory_ent = set_up_open_inventory(&mut app, client); + + app.update(); + helper.clear_received(); + + let inv_state = app + .world + .get_mut::(client) + .expect("could not find client"); + + let state_id = inv_state.state_id().0; + let window_id = inv_state.window_id(); + + helper.send(&ClickSlotC2s { + window_id, + state_id: VarInt(state_id), + slot_idx: 50, // pressing control, the whole stack is dropped + button: 1, + mode: ClickMode::DropKey, + slot_changes: vec![SlotChange { + idx: 50, + stack: ItemStack::EMPTY, + }] + .into(), + carried_item: ItemStack::EMPTY, + }); + + app.update(); + + // Make assertions + let events = app + .world + .get_resource::>() + .expect("expected drop item stack events"); + + let player_inventory = app + .world + .get::(client) + .expect("could not find inventory"); + + let events = events.iter_current_update_events().collect::>(); + + assert_eq!(events.len(), 1); + assert_eq!(events[0].client, client); + assert_eq!( + events[0].from_slot, + Some(convert_to_player_slot_id(InventoryKind::Generic9x3, 50)) + ); + assert_eq!( + events[0].stack, + ItemStack::new(ItemKind::IronIngot, 32, None) + ); + + // Also make sure that the player inventory was updated correctly. + let expected_player_slot_id = convert_to_player_slot_id(InventoryKind::Generic9x3, 50); + assert_eq!( + player_inventory.slot(expected_player_slot_id), + &ItemStack::EMPTY + ); +} + +#[test] +fn dragging_items() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + app.world.get_mut::(client).unwrap().0 = + ItemStack::new(ItemKind::Diamond, 64, None); + + let inv_state = app.world.get::(client).unwrap(); + let window_id = inv_state.window_id(); + let state_id = inv_state.state_id().0; + + let drag_packet = ClickSlotC2s { + window_id, + state_id: VarInt(state_id), + slot_idx: -999, + button: 2, + mode: ClickMode::Drag, + slot_changes: vec![ + SlotChange { + idx: 9, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + SlotChange { + idx: 10, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + SlotChange { + idx: 11, + stack: ItemStack::new(ItemKind::Diamond, 21, None), + }, + ] + .into(), + carried_item: ItemStack::new(ItemKind::Diamond, 1, None), + }; + helper.send(&drag_packet); + + app.update(); + let sent_packets = helper.collect_received(); + assert_eq!(sent_packets.0.len(), 0); + + let cursor_item = app + .world + .get::(client) + .expect("could not find client"); + + assert_eq!(cursor_item.0, ItemStack::new(ItemKind::Diamond, 1, None)); + + let inventory = app + .world + .get::(client) + .expect("could not find inventory"); + + for i in 9..12 { + assert_eq!( + inventory.slot(i), + &ItemStack::new(ItemKind::Diamond, 21, None) + ); + } +} diff --git a/vendor/valence/src/tests/layer.rs b/vendor/valence/src/tests/layer.rs new file mode 100644 index 00000000..735a0f3d --- /dev/null +++ b/vendor/valence/src/tests/layer.rs @@ -0,0 +1,467 @@ +use std::collections::BTreeSet; + +use bevy_ecs::world::EntityWorldMut; + +use crate::client::{ViewDistance, VisibleEntityLayers}; +use crate::entity::cow::CowEntityBundle; +use crate::entity::{EntityLayerId, Position}; +use crate::layer::chunk::UnloadedChunk; +use crate::layer::{ChunkLayer, EntityLayer}; +use crate::protocol::packets::play::{ + BlockEntityUpdateS2c, ChunkDataS2c, ChunkDeltaUpdateS2c, EntitiesDestroyS2c, EntitySpawnS2c, + MoveRelativeS2c, UnloadChunkS2c, +}; +use crate::protocol::Packet; +use crate::testing::ScenarioSingleClient; +use crate::{BlockState, ChunkView, Despawned, Server}; + +#[test] +fn block_create_destroy() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // Insert an empty chunk at (0, 0). + layer.insert_chunk([0, 0], UnloadedChunk::new()); + + // Wait until the next tick to start sending changes. + app.update(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // Set some blocks. + layer.set_block([1, 1, 1], BlockState::CHEST); + layer.set_block([1, 2, 1], BlockState::PLAYER_HEAD); + layer.set_block([1, 3, 1], BlockState::OAK_SIGN); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(3); + } + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + layer.set_block([1, 1, 1], BlockState::AIR); + layer.set_block([1, 2, 1], BlockState::AIR); + layer.set_block([1, 3, 1], BlockState::AIR); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(0); + } +} + +#[test] +fn layer_chunk_view_change() { + fn view(client: &EntityWorldMut) -> ChunkView { + let chunk_pos = client.get::().unwrap().0.into(); + let view_dist = client.get::().unwrap().get(); + + ChunkView::new(chunk_pos, view_dist) + } + + let ScenarioSingleClient { + mut app, + client: client_ent, + mut helper, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + for z in -30..30 { + for x in -30..30 { + layer.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + let mut client = app.world.entity_mut(client_ent); + + client.get_mut::().unwrap().set([8.0, 0.0, 8.0]); + client.get_mut::().unwrap().set(6); + + // Tick + app.update(); + let mut client = app.world.entity_mut(client_ent); + + let mut loaded_chunks = BTreeSet::new(); + + // Collect all chunks received on join. + for f in helper.collect_received().0 { + if f.id == ChunkDataS2c::ID { + let ChunkDataS2c { pos, .. } = f.decode::().unwrap(); + // Newly received chunk was not previously loaded. + assert!(loaded_chunks.insert(pos), "({pos:?})"); + } + } + + // Check that all the received chunks are in the client's view. + for pos in view(&client).iter() { + assert!(loaded_chunks.contains(&pos), "{pos:?}"); + } + + assert!(!loaded_chunks.is_empty()); + + // Move the client to the adjacent chunk. + client.get_mut::().unwrap().set([24.0, 0.0, 24.0]); + + // Tick + app.update(); + let client = app.world.entity_mut(client_ent); + + // For all chunks received this tick... + for f in helper.collect_received().0 { + match f.id { + ChunkDataS2c::ID => { + let ChunkDataS2c { pos, .. } = f.decode().unwrap(); + // Newly received chunk was not previously loaded. + assert!(loaded_chunks.insert(pos), "({pos:?})"); + } + UnloadChunkS2c::ID => { + let UnloadChunkS2c { pos } = f.decode().unwrap(); + // Newly removed chunk was previously loaded. + assert!(loaded_chunks.remove(&pos), "({pos:?})"); + } + _ => {} + } + } + + // Check that all chunks loaded now are within the client's view. + for pos in view(&client).iter() { + assert!(loaded_chunks.contains(&pos), "{pos:?}"); + } +} + +#[test] +fn chunk_viewer_count() { + let ScenarioSingleClient { + mut app, + client: client_ent, + mut helper, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut client = app.world.entity_mut(client_ent); + + client.get_mut::().unwrap().set([8.0, 64.0, 8.0]); + client.get_mut::().unwrap().set(2); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // Create chunk at (0, 0). + layer.insert_chunk([0, 0], UnloadedChunk::new()); + + app.update(); // Tick. + + helper.collect_received().assert_count::(1); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + assert_eq!(layer.chunk_mut([0, 0]).unwrap().viewer_count(), 1); + + // Create new chunk next to the first chunk and move the client away from it on + // the same tick. + layer.insert_chunk([0, 1], UnloadedChunk::new()); + + let mut client = app.world.entity_mut(client_ent); + client.get_mut::().unwrap().set([100.0, 0.0, 0.0]); + + app.update(); // Tick. + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(2); + } + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // Viewer count of both chunks should be zero. + assert_eq!(layer.chunk([0, 0]).unwrap().viewer_count(), 0); + assert_eq!(layer.chunk([0, 1]).unwrap().viewer_count(), 0); + + // Create a third chunk adjacent to the others. + layer.insert_chunk([1, 0], UnloadedChunk::new()); + + // Move the client back in view of all three chunks. + let mut client = app.world.entity_mut(client_ent); + client.get_mut::().unwrap().set([8.0, 0.0, 8.0]); + + app.update(); // Tick. + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // All three chunks should have viewer count of one. + assert_eq!(layer.chunk_mut([0, 0]).unwrap().viewer_count(), 1); + assert_eq!(layer.chunk_mut([1, 0]).unwrap().viewer_count(), 1); + assert_eq!(layer.chunk_mut([0, 1]).unwrap().viewer_count(), 1); + + // Client should have received load packet for all three. + helper.collect_received().assert_count::(3); +} + +#[test] +fn entity_layer_switching() { + let ScenarioSingleClient { + mut app, + client: client_ent, + mut helper, + layer: l1, + } = ScenarioSingleClient::new(); + + let server = app.world.resource::(); + + let l2 = EntityLayer::new(server); + let l3 = EntityLayer::new(server); + + let l2 = app.world.spawn(l2).id(); + let _l3 = app.world.spawn(l3).id(); + + // Spawn three entities and put them all on the main layer to start. + + let e1 = CowEntityBundle { + layer: EntityLayerId(l1), + ..Default::default() + }; + + let e2 = CowEntityBundle { + layer: EntityLayerId(l1), + ..Default::default() + }; + + let e3 = CowEntityBundle { + layer: EntityLayerId(l1), + ..Default::default() + }; + + let e1 = app.world.spawn(e1).id(); + let _e2 = app.world.spawn(e2).id(); + let _e3 = app.world.spawn(e3).id(); + + app.update(); // Tick. + + // Can the client see all the new entities? + helper.collect_received().assert_count::(3); + + // Move e1 to l2 and add l2 to the visible layers set. + app.world.get_mut::(e1).unwrap().0 = l2; + app.world + .get_mut::(client_ent) + .unwrap() + .0 + .insert(l2); + + app.update(); // Tick. + + { + let recvd = helper.collect_received(); + + // Client received packets to despawn and then spawn the entity in the new + // layer. (this could be optimized away in the future) + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_order::<(EntitiesDestroyS2c, EntitySpawnS2c)>(); + } + + // Remove the original layer from the visible layer set. + assert!(app + .world + .get_mut::(client_ent) + .unwrap() + .0 + .remove(&l1)); + + app.update(); // Tick. + + // Both entities on the original layer should be removed. + { + let recvd = helper.collect_received(); + recvd.assert_count::(1); + } + + // Despawn l2. + app.world.entity_mut(l2).insert(Despawned); + + app.update(); // Tick. + + // e1 should be removed. + helper + .collect_received() + .assert_count::(1); + + let mut visible_entity_layers = app + .world + .get_mut::(client_ent) + .unwrap(); + + // l2 should be automatically removed from the visible layers set. + assert!(!visible_entity_layers.0.contains(&e1)); + + // Add back the original layer. + assert!(visible_entity_layers.0.insert(l1)); + + app.update(); // Tick. + + // e2 and e3 should be spawned. + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(2); + } +} + +#[test] +fn chunk_entity_spawn_despawn() { + let ScenarioSingleClient { + mut app, + client: client_ent, + mut helper, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + // Insert an empty chunk at (0, 0). + layer.insert_chunk([0, 0], UnloadedChunk::new()); + + // Put an entity in the new chunk. + let cow_ent = app + .world + .spawn(CowEntityBundle { + position: Position::new([8.0, 0.0, 8.0]), + layer: EntityLayerId(layer_ent), + ..Default::default() + }) + .id(); + + app.update(); + + // Client is in view of the chunk, so they should receive exactly one chunk + // spawn packet and entity spawn packet. + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_count::(0); + } + + // Move the entity. Client should receive entity move packet. + app.world.get_mut::(cow_ent).unwrap().0.x += 0.1; + + app.update(); + + helper.collect_received().assert_count::(1); + + // Despawning the chunk should delete the chunk and not the entity contained + // within. + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + layer.remove_chunk([0, 0]).unwrap(); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_count::(0); + recvd.assert_count::(0); + } + + // Placing the chunk back should respawn the chunk and not the entity. + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + assert!(layer.insert_chunk([0, 0], UnloadedChunk::new()).is_none()); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_count::(0); + recvd.assert_count::(0); + } + + // Move player and entity away from the chunk on the same tick. + + app.world.get_mut::(client_ent).unwrap().0.x = 1000.0; + app.world.get_mut::(cow_ent).unwrap().0.x = -1000.0; + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_count::(0); + } + + // Put the client and entity back on the same tick. + + app.world + .get_mut::(client_ent) + .unwrap() + .set([8.0, 0.0, 8.0]); + app.world + .get_mut::(cow_ent) + .unwrap() + .set([8.0, 0.0, 8.0]); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_count::(0); + } + + // Adding and removing a chunk on the same tick should have no effect on + // the client. + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + layer.insert_chunk([0, 1], UnloadedChunk::new()); + layer.remove_chunk([0, 1]).unwrap(); + + app.world + .get_mut::(cow_ent) + .unwrap() + .set([24.0, 0.0, 24.0]); + + app.update(); + + { + let recvd = helper.collect_received(); + + recvd.assert_count::(0); + recvd.assert_count::(0); + recvd.assert_count::(0); + recvd.assert_count::(0); + } +} diff --git a/vendor/valence/src/tests/player_list.rs b/vendor/valence/src/tests/player_list.rs new file mode 100644 index 00000000..2a3e4954 --- /dev/null +++ b/vendor/valence/src/tests/player_list.rs @@ -0,0 +1,66 @@ +use crate::layer::chunk::UnloadedChunk; +use crate::protocol::packets::play::{PlayerListS2c, PlayerSpawnS2c}; +use crate::testing::{create_mock_client, ScenarioSingleClient}; +use crate::ChunkLayer; + +#[test] +fn player_list_arrives_before_player_spawn() { + let ScenarioSingleClient { + mut app, + client: _, + helper: mut client_helper_1, + layer: layer_ent, + } = ScenarioSingleClient::new(); + + let mut layer = app.world.get_mut::(layer_ent).unwrap(); + + for z in -5..5 { + for x in -5..5 { + layer.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + app.update(); + + { + let recvd = client_helper_1.collect_received(); + recvd.assert_count::(1); + recvd.assert_count::(0); + recvd.assert_order::<(PlayerListS2c, PlayerSpawnS2c)>(); + + let pkt = recvd.first::(); + assert!(pkt.actions.add_player()); + assert_eq!(pkt.entries.len(), 1); + } + + let (mut client_2, mut client_helper_2) = create_mock_client("test_2"); + client_2.player.layer.0 = layer_ent; + client_2.visible_chunk_layer.0 = layer_ent; + client_2.visible_entity_layers.0.insert(layer_ent); + + app.world.spawn(client_2); + + app.update(); + + { + let recvd = client_helper_1.collect_received(); + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_order::<(PlayerListS2c, PlayerSpawnS2c)>(); + + let pkt = recvd.first::(); + assert!(pkt.actions.add_player()); + assert_eq!(pkt.entries.len(), 1); + } + + { + let recvd = client_helper_2.collect_received(); + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_order::<(PlayerListS2c, PlayerSpawnS2c)>(); + + let pkt = recvd.first::(); + assert!(pkt.actions.add_player()); + assert_eq!(pkt.entries.len(), 2); + } +} diff --git a/vendor/valence/src/tests/potions.rs b/vendor/valence/src/tests/potions.rs new file mode 100644 index 00000000..fe0a34a1 --- /dev/null +++ b/vendor/valence/src/tests/potions.rs @@ -0,0 +1,71 @@ +use valence_server::entity::active_status_effects::{ActiveStatusEffect, ActiveStatusEffects}; +use valence_server::protocol::packets::play::{EntityStatusEffectS2c, RemoveEntityStatusEffectS2c}; +use valence_server::protocol::status_effects::StatusEffect; +use valence_server::protocol::VarInt; + +use crate::testing::ScenarioSingleClient; + +#[test] +fn test_status_effects_packets() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Add a potion effect to the client. + let mut effects = app + .world + .get_mut::(client) + .expect("Client should have status effects"); + effects.apply( + ActiveStatusEffect::from_effect(StatusEffect::BadOmen) + .with_duration(100) + .with_amplifier(1), + ); + + // Update the server. + app.update(); + + // Make assertions + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); + + let packet = sent_packets.first::(); + + assert_eq!(packet.entity_id, VarInt(0)); // Client entity ID is always 0 + assert_eq!(packet.effect_id, VarInt(31)); // Bad Omen + assert_eq!(packet.amplifier, 1); + assert_eq!(packet.duration, VarInt(100)); + + // Clear the potion effect + for _ in 0..99 { + app.update(); + } + + helper.clear_received(); + app.update(); + + // Make assertions + let effects = app + .world + .get::(client) + .expect("Client should have status effects"); + + assert_eq!(effects.get_current_effect(StatusEffect::BadOmen), None); + + let sent_packets = helper.collect_received(); + + sent_packets.assert_count::(1); + + let packet = sent_packets.first::(); + + assert_eq!(packet.entity_id, VarInt(0)); // Client entity ID is always 0 + assert_eq!(packet.effect_id, VarInt(31)); // Bad Omen +} diff --git a/vendor/valence/src/tests/scoreboard.rs b/vendor/valence/src/tests/scoreboard.rs new file mode 100644 index 00000000..867af687 --- /dev/null +++ b/vendor/valence/src/tests/scoreboard.rs @@ -0,0 +1,192 @@ +use valence_scoreboard::*; + +use crate::client::VisibleEntityLayers; +use crate::entity::EntityLayerId; +use crate::layer::EntityLayer; +use crate::protocol::packets::play::{ + ScoreboardDisplayS2c, ScoreboardObjectiveUpdateS2c, ScoreboardPlayerUpdateS2c, +}; +use crate::testing::ScenarioSingleClient; +use crate::text::IntoText; +use crate::Server; + +#[test] +fn show_scoreboard_when_added_to_layer() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Add a new entity layer for the objective. + let server = app.world.get_resource::().unwrap(); + let obj_layer = app.world.spawn(EntityLayer::new(server)).id(); + app.world + .entity_mut(client) + .get_mut::() + .unwrap() + .0 + .insert(obj_layer); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + // Spawn the objective. + app.world.spawn(ObjectiveBundle { + name: Objective::new("foo"), + display: ObjectiveDisplay("Foo".into_text()), + scores: ObjectiveScores::new(), + layer: EntityLayerId(obj_layer), + ..Default::default() + }); + + app.update(); + + // Check that the objective was sent to the client. + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_order::<(ScoreboardObjectiveUpdateS2c, ScoreboardDisplayS2c)>(); + } +} + +#[test] +fn show_scoreboard_when_client_join() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Add a new entity layer for the objective. + let server = app.world.get_resource::().unwrap(); + let obj_layer = app.world.spawn(EntityLayer::new(server)).id(); + app.world + .entity_mut(client) + .get_mut::() + .unwrap() + .0 + .insert(obj_layer); + + // Spawn the objective. + app.world.spawn(ObjectiveBundle { + name: Objective::new("foo"), + display: ObjectiveDisplay("Foo".into_text()), + scores: ObjectiveScores::new(), + layer: EntityLayerId(obj_layer), + ..Default::default() + }); + + // Process a tick to get past the "on join" logic. + app.update(); + + // Check that the objective was sent to the client. + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + recvd.assert_count::(1); + recvd.assert_order::<(ScoreboardObjectiveUpdateS2c, ScoreboardDisplayS2c)>(); + } +} + +#[test] +fn should_update_score() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Add a new entity layer for the objective. + let server = app.world.get_resource::().unwrap(); + let obj_layer = app.world.spawn(EntityLayer::new(server)).id(); + app.world + .entity_mut(client) + .get_mut::() + .unwrap() + .0 + .insert(obj_layer); + + // Spawn the objective. + let obj = app + .world + .spawn(ObjectiveBundle { + name: Objective::new("foo"), + display: ObjectiveDisplay("Foo".into_text()), + scores: ObjectiveScores::with_map([("foo".to_owned(), 0)]), + layer: EntityLayerId(obj_layer), + ..Default::default() + }) + .id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut scores = app.world.get_mut::(obj).unwrap(); + scores.insert("foo", 3); + + app.update(); + + // Check that the objective was sent to the client. + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + } +} + +#[test] +fn should_only_update_score_diff() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = ScenarioSingleClient::new(); + + // Add a new entity layer for the objective. + let server = app.world.get_resource::().unwrap(); + let obj_layer = app.world.spawn(EntityLayer::new(server)).id(); + app.world + .entity_mut(client) + .get_mut::() + .unwrap() + .0 + .insert(obj_layer); + + // Spawn the objective. + let obj = app + .world + .spawn(ObjectiveBundle { + name: Objective::new("foo"), + display: ObjectiveDisplay("Foo".into_text()), + scores: ObjectiveScores::with_map([("foo".to_owned(), 0), ("bar".to_owned(), 0)]), + layer: EntityLayerId(obj_layer), + ..Default::default() + }) + .id(); + + // Process a tick to get past the "on join" logic. + app.update(); + helper.clear_received(); + + let mut scores = app.world.get_mut::(obj).unwrap(); + scores.insert("foo", 3); + + app.update(); + + // Check that the objective was sent to the client. + { + let recvd = helper.collect_received(); + + recvd.assert_count::(1); + } +} diff --git a/vendor/valence/src/tests/weather.rs b/vendor/valence/src/tests/weather.rs new file mode 100644 index 00000000..2a353754 --- /dev/null +++ b/vendor/valence/src/tests/weather.rs @@ -0,0 +1,164 @@ +use crate::protocol::packets::play::GameStateChangeS2c; +use crate::testing::*; +use crate::weather::{Rain, Thunder, WeatherBundle}; + +#[test] +fn test_client_initialization_on_join() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer: _, + } = prepare(true); + + app.update(); + + // Check if two game state change packets were sent, one for rain and one for + // thunder + let frames = helper.collect_received(); + frames.assert_count::(2); +} + +#[test] +fn test_chunk_layer_initialization_on_join() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer: _, + } = prepare(false); + + app.update(); + + // Check if two game state change packets were sent, one for rain and one for + // thunder + let frames = helper.collect_received(); + frames.assert_count::(2); +} + +#[test] +fn test_client_rain_change() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = prepare(true); + + app.update(); + + helper.clear_received(); + + // Change the rain value + let mut rain = app.world.get_mut::(client).unwrap(); + rain.0 = 1.0; + + app.update(); + + // Check if a game state change packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_client_thunder_change() { + let ScenarioSingleClient { + mut app, + client, + mut helper, + layer: _, + } = prepare(true); + + app.update(); + + helper.clear_received(); + + // Change the thunder value + let mut thunder = app.world.get_mut::(client).unwrap(); + thunder.0 = 1.0; + + app.update(); + + // Check if a game state change packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_chunk_layer_rain_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(false); + + app.update(); + + helper.clear_received(); + + // Change the rain value + let mut rain = app.world.get_mut::(layer).unwrap(); + rain.0 = 1.0; + + app.update(); + + // Check if a game state change packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_chunk_layer_thunder_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(false); + + app.update(); + + helper.clear_received(); + + // Change the thunder value + let mut thunder = app.world.get_mut::(layer).unwrap(); + thunder.0 = 1.0; + + app.update(); + + // Check if a game state change packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +fn prepare(client_weather: bool) -> ScenarioSingleClient { + let mut s = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + s.app.update(); + + // Add weather to either the client or the chunk layer depending on the + // parameter + if client_weather { + add_weather_to_client(&mut s); + } else { + add_weather_to_chunk_layer(&mut s); + } + + s +} + +fn add_weather_to_client(s: &mut ScenarioSingleClient) { + s.app.world.entity_mut(s.client).insert(WeatherBundle { + rain: Rain(0.5), + thunder: Thunder(0.5), + }); +} + +fn add_weather_to_chunk_layer(s: &mut ScenarioSingleClient) { + s.app.world.entity_mut(s.layer).insert(WeatherBundle { + rain: Rain(0.5), + thunder: Thunder(0.5), + }); +} diff --git a/vendor/valence/src/tests/world_border.rs b/vendor/valence/src/tests/world_border.rs new file mode 100644 index 00000000..84fdc0de --- /dev/null +++ b/vendor/valence/src/tests/world_border.rs @@ -0,0 +1,200 @@ +use crate::protocol::packets::play::{ + WorldBorderCenterChangedS2c, WorldBorderInitializeS2c, WorldBorderInterpolateSizeS2c, + WorldBorderSizeChangedS2c, WorldBorderWarningBlocksChangedS2c, + WorldBorderWarningTimeChangedS2c, +}; +use crate::testing::*; +use crate::world_border::{ + WorldBorderBundle, WorldBorderCenter, WorldBorderLerp, WorldBorderPortalTpBoundary, + WorldBorderWarnBlocks, WorldBorderWarnTime, +}; + +#[test] +fn test_initialize_on_join() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer: _, + } = prepare(); + + app.update(); + + // Check if a world border initialize packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_center_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the center + let mut center = app.world.get_mut::(layer).unwrap(); + center.x = 10.0; + + app.update(); + + // Check if a world border center changed packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_diameter_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the diameter + let mut lerp = app.world.get_mut::(layer).unwrap(); + lerp.target_diameter = 20.0; + + app.update(); + + // Check if a world border size changed packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_interpolation() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the diameter and start interpolation to it over 20 ticks + let mut lerp = app.world.get_mut::(layer).unwrap(); + lerp.target_diameter = 20.0; + lerp.remaining_ticks = 20; + + // Tick 20 times + for _ in 0..20 { + app.update(); + } + + // Check if a world border interpolate size packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); + + // Check if the interpolation is finished + let lerp = app.world.get_mut::(layer).unwrap(); + assert_eq!(lerp.current_diameter, 20.0); + assert_eq!(lerp.remaining_ticks, 0); +} + +#[test] +fn test_warning_blocks_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the warning blocks + let mut warn_blocks = app.world.get_mut::(layer).unwrap(); + warn_blocks.0 = 10; + + app.update(); + + // Check if a world border warning blocks changed packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_warning_time_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the warning time + let mut warn_time = app.world.get_mut::(layer).unwrap(); + warn_time.0 = 10; + + app.update(); + + // Check if a world border warning time changed packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +#[test] +fn test_portal_tp_boundary_change() { + let ScenarioSingleClient { + mut app, + client: _, + mut helper, + layer, + } = prepare(); + + app.update(); + + helper.clear_received(); + + // Change the portal tp boundary + let mut portal_tp_boundary = app + .world + .get_mut::(layer) + .unwrap(); + portal_tp_boundary.0 = 10; + + app.update(); + + // Check if a world border initialize packet was sent + let frames = helper.collect_received(); + frames.assert_count::(1); +} + +fn prepare() -> ScenarioSingleClient { + let mut s = ScenarioSingleClient::new(); + + // Process a tick to get past the "on join" logic. + s.app.update(); + + // Attach the world border bundle to the chunk layer + s.app.world.entity_mut(s.layer).insert(WorldBorderBundle { + lerp: WorldBorderLerp { + target_diameter: 10.0, + ..Default::default() + }, + ..Default::default() + }); + + s +} diff --git a/vendor/valence/tools/dump_schedule/Cargo.toml b/vendor/valence/tools/dump_schedule/Cargo.toml new file mode 100644 index 00000000..dc729ebc --- /dev/null +++ b/vendor/valence/tools/dump_schedule/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "dump_schedule" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true +publish = false + +[dependencies] +bevy_mod_debugdump.workspace = true +clap.workspace = true +valence.workspace = true diff --git a/vendor/valence/tools/dump_schedule/README.md b/vendor/valence/tools/dump_schedule/README.md new file mode 100644 index 00000000..d4e3a451 --- /dev/null +++ b/vendor/valence/tools/dump_schedule/README.md @@ -0,0 +1,7 @@ +# dump_schedule + +A simple debugging utility for visualizing Valence's schedule graph. Generates a SVG file. + +1. Ensure that [Graphviz](https://graphviz.org/) is installed and the `dot` and `tred` commands are available. +2. Run the program with `cargo r -p dump_schedule -- PostUpdate` +3. Open the generated `graph.svg` in your browser or other program, e.g. `chromium graph.svg`. diff --git a/vendor/valence/tools/dump_schedule/src/main.rs b/vendor/valence/tools/dump_schedule/src/main.rs new file mode 100644 index 00000000..85420a8f --- /dev/null +++ b/vendor/valence/tools/dump_schedule/src/main.rs @@ -0,0 +1,110 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + clippy::dbg_macro +)] + +use std::io; +use std::io::Write; +use std::path::PathBuf; +use std::process::{Command, Stdio}; + +use clap::Parser; +use valence::prelude::*; + +#[derive(Parser)] +#[command(author, version, about)] +struct Cli { + /// Name of the schedule to dump. If absent, the list of available + /// schedules is printed to stdout. + schedule: Option, + /// Output SVG file path. + #[clap(short, long, default_value = "graph.svg")] + output: PathBuf, + /// Disables transitive reduction of the output schedule graph. + #[clap(short = 't', long)] + no_tred: bool, +} + +fn main() -> io::Result<()> { + let cli = Cli::parse(); + + let mut app = App::new(); + + app.add_plugins(DefaultPlugins); + + let schedules = app.world.resource::(); + + let Some(sched_name) = cli.schedule else { + print_available_schedules(schedules); + return Ok(()); + }; + + let Some((_, schedule)) = schedules + .iter() + .find(|(label, _)| format!("{label:?}") == sched_name) + else { + eprintln!("Unknown schedule \"{sched_name}\""); + print_available_schedules(schedules); + std::process::exit(1) + }; + + let dot_graph = bevy_mod_debugdump::schedule_graph::schedule_graph_dot( + schedule, + &app.world, + &bevy_mod_debugdump::schedule_graph::Settings { + ambiguity_enable: false, + ..Default::default() + }, + ); + + let mut dot_command = Command::new("dot"); + dot_command.arg("-Tsvg").arg("-o").arg(cli.output); + + if cli.no_tred { + let mut dot_child = dot_command.stdin(Stdio::piped()).spawn()?; + + dot_child + .stdin + .as_mut() + .unwrap() + .write_all(dot_graph.as_bytes())?; + + dot_child.wait_with_output()?; + } else { + let tred_child = Command::new("tred") + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn()?; + + let dot_child = dot_command.stdin(tred_child.stdout.unwrap()).spawn()?; + + tred_child.stdin.unwrap().write_all(dot_graph.as_bytes())?; + + dot_child.wait_with_output()?; + }; + + Ok(()) +} + +fn print_available_schedules(schedules: &Schedules) { + eprintln!("==== Available Schedules ===="); + + for (label, _) in schedules.iter() { + println!("{label:?}"); + } + + eprintln!("\nSee `--help` for more information."); +} diff --git a/tools/packet-inspector/Cargo.toml b/vendor/valence/tools/packet_inspector/Cargo.toml similarity index 68% rename from tools/packet-inspector/Cargo.toml rename to vendor/valence/tools/packet_inspector/Cargo.toml index 5dd74d40..d2bf7b1b 100644 --- a/tools/packet-inspector/Cargo.toml +++ b/vendor/valence/tools/packet_inspector/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "packet-inspector" +name = "packet_inspector" description = "A simple Minecraft proxy for inspecting packets." version.workspace = true edition.workspace = true @@ -8,18 +8,17 @@ documentation.workspace = true license.workspace = true publish = false -[lints] -workspace = true - [dependencies] -valence_protocol = { git = 'https://github.com/TestingPlant/valence', branch = 'feat-open', features = ["compression"] } +valence_protocol = { workspace = true, features = ["compression"] } anyhow.workspace = true +thiserror.workspace = true bytes.workspace = true flate2.workspace = true flume.workspace = true tokio = { workspace = true, features = ["full"] } tracing.workspace = true time = { workspace = true, features = ["local-offset"] } +image.workspace = true egui.workspace = true eframe = { workspace = true, features = [ "persistence", @@ -33,10 +32,10 @@ syntect = { workspace = true, default-features = false, features = [ serde = { workspace = true, features = ["derive"] } [build-dependencies] +syn.workspace = true anyhow.workspace = true -syn = { workspace = true, features = ["full"] } -valence_build_utils = { git = 'https://github.com/TestingPlant/valence', branch = 'feat-open' } -quote = { workspace = true, features = ["proc-macro"] } -serde_json = { workspace = true, features = ["raw_value"] } proc-macro2.workspace = true +quote.workspace = true serde = { workspace = true, features = ["derive"] } +serde_json.workspace = true +valence_build_utils.workspace = true diff --git a/tools/packet-inspector/README.md b/vendor/valence/tools/packet_inspector/README.md similarity index 100% rename from tools/packet-inspector/README.md rename to vendor/valence/tools/packet_inspector/README.md diff --git a/tools/packet-inspector/build.rs b/vendor/valence/tools/packet_inspector/build.rs similarity index 86% rename from tools/packet-inspector/build.rs rename to vendor/valence/tools/packet_inspector/build.rs index c03470f6..8e089b7f 100644 --- a/tools/packet-inspector/build.rs +++ b/vendor/valence/tools/packet_inspector/build.rs @@ -23,10 +23,7 @@ pub fn main() -> anyhow::Result<()> { } fn write_packets(packets: &Vec) -> anyhow::Result<()> { - let mut consts = quote! { - #[allow(clippy::unseparated_literal_suffix)] - - }; + let mut consts = TokenStream::new(); let len = packets.len(); @@ -46,14 +43,14 @@ fn write_packets(packets: &Vec) -> anyhow::Result<()> { // if the packet is clientbound, but the name does not ends with S2c, add it let name = if packet.side == "clientbound" && !name.ends_with("S2c") { - format!("{name}S2c") + format!("{}S2c", name) } else { name }; // same for serverbound let name = if packet.side == "serverbound" && !name.ends_with("C2s") { - format!("{name}C2s") + format!("{}C2s", name) } else { name }; @@ -104,16 +101,16 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { let mut grouped_packets = packets.iter().fold(grouped_packets, |mut acc, packet| { let side = match packet.side.as_str() { - "serverbound" => "Serverbound".to_owned(), - "clientbound" => "Clientbound".to_owned(), + "serverbound" => "Serverbound".to_string(), + "clientbound" => "Clientbound".to_string(), _ => panic!("Invalid side"), }; let state = match packet.state.as_str() { - "handshaking" => "Handshaking".to_owned(), - "status" => "Status".to_owned(), - "login" => "Login".to_owned(), - "play" => "Play".to_owned(), + "handshaking" => "Handshaking".to_string(), + "status" => "Status".to_string(), + "login" => "Login".to_string(), + "play" => "Play".to_string(), _ => panic!("Invalid state"), }; @@ -121,7 +118,7 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { .name .strip_suffix("Packet") .unwrap_or(&packet.name) - .to_owned(); + .to_string(); // lowercase the last character of name let name = { @@ -135,14 +132,14 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { // if the packet is clientbound, but the name does not ends with S2c, add it let name = if side == "Clientbound" && !name.ends_with("S2c") { - format!("{name}S2c") + format!("{}S2c", name) } else { name }; // same for serverbound let name = if side == "Serverbound" && !name.ends_with("C2s") { - format!("{name}C2s") + format!("{}C2s", name) } else { name }; @@ -156,7 +153,7 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { let mut generated = TokenStream::new(); - for (side, state_map) in &mut grouped_packets { + for (side, state_map) in grouped_packets.iter_mut() { let mut side_arms = TokenStream::new(); for (state, id_map) in state_map.iter_mut() { let mut match_arms = TokenStream::new(); @@ -176,14 +173,14 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { side_arms.extend(quote! { valence_protocol::PacketState::#state => match packet.id { #match_arms - _ => Ok(NOT_AVAILABLE.to_owned()), + _ => Ok(NOT_AVAILABLE.to_string()), }, }); } if side == "Clientbound" { side_arms.extend(quote! { - _ => Ok(NOT_AVAILABLE.to_owned()), + _ => Ok(NOT_AVAILABLE.to_string()), }); } @@ -200,8 +197,7 @@ fn write_transformer(packets: &[Packet]) -> anyhow::Result<()> { let generated = quote! { const NOT_AVAILABLE: &str = "Not yet implemented"; - #[allow(clippy::match_wildcard_for_single_variants)] - pub(crate) fn packet_to_string(packet: &ProxyPacket) -> Result> { + pub fn packet_to_string(packet: &ProxyPacket) -> Result> { let bytes = packet.data.as_ref().unwrap(); let mut data = &bytes.clone()[..]; diff --git a/vendor/valence/tools/packet_inspector/extracted/packets.json b/vendor/valence/tools/packet_inspector/extracted/packets.json new file mode 100644 index 00000000..b9d6c757 --- /dev/null +++ b/vendor/valence/tools/packet_inspector/extracted/packets.json @@ -0,0 +1,1052 @@ +[ + { + "name": "HandshakeC2SPacket", + "side": "serverbound", + "state": "handshaking", + "id": 0 + }, + { + "name": "TeleportConfirmC2SPacket", + "side": "serverbound", + "state": "play", + "id": 0 + }, + { + "name": "QueryBlockNbtC2SPacket", + "side": "serverbound", + "state": "play", + "id": 1 + }, + { + "name": "UpdateDifficultyC2SPacket", + "side": "serverbound", + "state": "play", + "id": 2 + }, + { + "name": "MessageAcknowledgmentC2SPacket", + "side": "serverbound", + "state": "play", + "id": 3 + }, + { + "name": "CommandExecutionC2SPacket", + "side": "serverbound", + "state": "play", + "id": 4 + }, + { + "name": "ChatMessageC2SPacket", + "side": "serverbound", + "state": "play", + "id": 5 + }, + { + "name": "PlayerSessionC2SPacket", + "side": "serverbound", + "state": "play", + "id": 6 + }, + { + "name": "ClientStatusC2SPacket", + "side": "serverbound", + "state": "play", + "id": 7 + }, + { + "name": "ClientSettingsC2SPacket", + "side": "serverbound", + "state": "play", + "id": 8 + }, + { + "name": "RequestCommandCompletionsC2SPacket", + "side": "serverbound", + "state": "play", + "id": 9 + }, + { + "name": "ButtonClickC2SPacket", + "side": "serverbound", + "state": "play", + "id": 10 + }, + { + "name": "ClickSlotC2SPacket", + "side": "serverbound", + "state": "play", + "id": 11 + }, + { + "name": "CloseHandledScreenC2SPacket", + "side": "serverbound", + "state": "play", + "id": 12 + }, + { + "name": "CustomPayloadC2SPacket", + "side": "serverbound", + "state": "play", + "id": 13 + }, + { + "name": "BookUpdateC2SPacket", + "side": "serverbound", + "state": "play", + "id": 14 + }, + { + "name": "QueryEntityNbtC2SPacket", + "side": "serverbound", + "state": "play", + "id": 15 + }, + { + "name": "PlayerInteractEntityC2SPacket", + "side": "serverbound", + "state": "play", + "id": 16 + }, + { + "name": "JigsawGeneratingC2SPacket", + "side": "serverbound", + "state": "play", + "id": 17 + }, + { + "name": "KeepAliveC2SPacket", + "side": "serverbound", + "state": "play", + "id": 18 + }, + { + "name": "UpdateDifficultyLockC2SPacket", + "side": "serverbound", + "state": "play", + "id": 19 + }, + { + "name": "PositionAndOnGround", + "side": "serverbound", + "state": "play", + "id": 20 + }, + { + "name": "Full", + "side": "serverbound", + "state": "play", + "id": 21 + }, + { + "name": "LookAndOnGround", + "side": "serverbound", + "state": "play", + "id": 22 + }, + { + "name": "OnGroundOnly", + "side": "serverbound", + "state": "play", + "id": 23 + }, + { + "name": "VehicleMoveC2SPacket", + "side": "serverbound", + "state": "play", + "id": 24 + }, + { + "name": "BoatPaddleStateC2SPacket", + "side": "serverbound", + "state": "play", + "id": 25 + }, + { + "name": "PickFromInventoryC2SPacket", + "side": "serverbound", + "state": "play", + "id": 26 + }, + { + "name": "CraftRequestC2SPacket", + "side": "serverbound", + "state": "play", + "id": 27 + }, + { + "name": "UpdatePlayerAbilitiesC2SPacket", + "side": "serverbound", + "state": "play", + "id": 28 + }, + { + "name": "PlayerActionC2SPacket", + "side": "serverbound", + "state": "play", + "id": 29 + }, + { + "name": "ClientCommandC2SPacket", + "side": "serverbound", + "state": "play", + "id": 30 + }, + { + "name": "PlayerInputC2SPacket", + "side": "serverbound", + "state": "play", + "id": 31 + }, + { + "name": "PlayPongC2SPacket", + "side": "serverbound", + "state": "play", + "id": 32 + }, + { + "name": "RecipeCategoryOptionsC2SPacket", + "side": "serverbound", + "state": "play", + "id": 33 + }, + { + "name": "RecipeBookDataC2SPacket", + "side": "serverbound", + "state": "play", + "id": 34 + }, + { + "name": "RenameItemC2SPacket", + "side": "serverbound", + "state": "play", + "id": 35 + }, + { + "name": "ResourcePackStatusC2SPacket", + "side": "serverbound", + "state": "play", + "id": 36 + }, + { + "name": "AdvancementTabC2SPacket", + "side": "serverbound", + "state": "play", + "id": 37 + }, + { + "name": "SelectMerchantTradeC2SPacket", + "side": "serverbound", + "state": "play", + "id": 38 + }, + { + "name": "UpdateBeaconC2SPacket", + "side": "serverbound", + "state": "play", + "id": 39 + }, + { + "name": "UpdateSelectedSlotC2SPacket", + "side": "serverbound", + "state": "play", + "id": 40 + }, + { + "name": "UpdateCommandBlockC2SPacket", + "side": "serverbound", + "state": "play", + "id": 41 + }, + { + "name": "UpdateCommandBlockMinecartC2SPacket", + "side": "serverbound", + "state": "play", + "id": 42 + }, + { + "name": "CreativeInventoryActionC2SPacket", + "side": "serverbound", + "state": "play", + "id": 43 + }, + { + "name": "UpdateJigsawC2SPacket", + "side": "serverbound", + "state": "play", + "id": 44 + }, + { + "name": "UpdateStructureBlockC2SPacket", + "side": "serverbound", + "state": "play", + "id": 45 + }, + { + "name": "UpdateSignC2SPacket", + "side": "serverbound", + "state": "play", + "id": 46 + }, + { + "name": "HandSwingC2SPacket", + "side": "serverbound", + "state": "play", + "id": 47 + }, + { + "name": "SpectatorTeleportC2SPacket", + "side": "serverbound", + "state": "play", + "id": 48 + }, + { + "name": "PlayerInteractBlockC2SPacket", + "side": "serverbound", + "state": "play", + "id": 49 + }, + { + "name": "PlayerInteractItemC2SPacket", + "side": "serverbound", + "state": "play", + "id": 50 + }, + { + "name": "QueryRequestC2SPacket", + "side": "serverbound", + "state": "status", + "id": 0 + }, + { + "name": "QueryPingC2SPacket", + "side": "serverbound", + "state": "status", + "id": 1 + }, + { + "name": "LoginHelloC2SPacket", + "side": "serverbound", + "state": "login", + "id": 0 + }, + { + "name": "LoginKeyC2SPacket", + "side": "serverbound", + "state": "login", + "id": 1 + }, + { + "name": "LoginQueryResponseC2SPacket", + "side": "serverbound", + "state": "login", + "id": 2 + }, + { + "name": "BundleSplitterPacket", + "side": "clientbound", + "state": "play", + "id": 0 + }, + { + "name": "EntitySpawnS2CPacket", + "side": "clientbound", + "state": "play", + "id": 1 + }, + { + "name": "ExperienceOrbSpawnS2CPacket", + "side": "clientbound", + "state": "play", + "id": 2 + }, + { + "name": "PlayerSpawnS2CPacket", + "side": "clientbound", + "state": "play", + "id": 3 + }, + { + "name": "EntityAnimationS2CPacket", + "side": "clientbound", + "state": "play", + "id": 4 + }, + { + "name": "StatisticsS2CPacket", + "side": "clientbound", + "state": "play", + "id": 5 + }, + { + "name": "PlayerActionResponseS2CPacket", + "side": "clientbound", + "state": "play", + "id": 6 + }, + { + "name": "BlockBreakingProgressS2CPacket", + "side": "clientbound", + "state": "play", + "id": 7 + }, + { + "name": "BlockEntityUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 8 + }, + { + "name": "BlockEventS2CPacket", + "side": "clientbound", + "state": "play", + "id": 9 + }, + { + "name": "BlockUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 10 + }, + { + "name": "BossBarS2CPacket", + "side": "clientbound", + "state": "play", + "id": 11 + }, + { + "name": "DifficultyS2CPacket", + "side": "clientbound", + "state": "play", + "id": 12 + }, + { + "name": "ChunkBiomeDataS2CPacket", + "side": "clientbound", + "state": "play", + "id": 13 + }, + { + "name": "ClearTitleS2CPacket", + "side": "clientbound", + "state": "play", + "id": 14 + }, + { + "name": "CommandSuggestionsS2CPacket", + "side": "clientbound", + "state": "play", + "id": 15 + }, + { + "name": "CommandTreeS2CPacket", + "side": "clientbound", + "state": "play", + "id": 16 + }, + { + "name": "CloseScreenS2CPacket", + "side": "clientbound", + "state": "play", + "id": 17 + }, + { + "name": "InventoryS2CPacket", + "side": "clientbound", + "state": "play", + "id": 18 + }, + { + "name": "ScreenHandlerPropertyUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 19 + }, + { + "name": "ScreenHandlerSlotUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 20 + }, + { + "name": "CooldownUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 21 + }, + { + "name": "ChatSuggestionsS2CPacket", + "side": "clientbound", + "state": "play", + "id": 22 + }, + { + "name": "CustomPayloadS2CPacket", + "side": "clientbound", + "state": "play", + "id": 23 + }, + { + "name": "EntityDamageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 24 + }, + { + "name": "RemoveMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 25 + }, + { + "name": "DisconnectS2CPacket", + "side": "clientbound", + "state": "play", + "id": 26 + }, + { + "name": "ProfilelessChatMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 27 + }, + { + "name": "EntityStatusS2CPacket", + "side": "clientbound", + "state": "play", + "id": 28 + }, + { + "name": "ExplosionS2CPacket", + "side": "clientbound", + "state": "play", + "id": 29 + }, + { + "name": "UnloadChunkS2CPacket", + "side": "clientbound", + "state": "play", + "id": 30 + }, + { + "name": "GameStateChangeS2CPacket", + "side": "clientbound", + "state": "play", + "id": 31 + }, + { + "name": "OpenHorseScreenS2CPacket", + "side": "clientbound", + "state": "play", + "id": 32 + }, + { + "name": "DamageTiltS2CPacket", + "side": "clientbound", + "state": "play", + "id": 33 + }, + { + "name": "WorldBorderInitializeS2CPacket", + "side": "clientbound", + "state": "play", + "id": 34 + }, + { + "name": "KeepAliveS2CPacket", + "side": "clientbound", + "state": "play", + "id": 35 + }, + { + "name": "ChunkDataS2CPacket", + "side": "clientbound", + "state": "play", + "id": 36 + }, + { + "name": "WorldEventS2CPacket", + "side": "clientbound", + "state": "play", + "id": 37 + }, + { + "name": "ParticleS2CPacket", + "side": "clientbound", + "state": "play", + "id": 38 + }, + { + "name": "LightUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 39 + }, + { + "name": "GameJoinS2CPacket", + "side": "clientbound", + "state": "play", + "id": 40 + }, + { + "name": "MapUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 41 + }, + { + "name": "SetTradeOffersS2CPacket", + "side": "clientbound", + "state": "play", + "id": 42 + }, + { + "name": "MoveRelative", + "side": "clientbound", + "state": "play", + "id": 43 + }, + { + "name": "RotateAndMoveRelative", + "side": "clientbound", + "state": "play", + "id": 44 + }, + { + "name": "Rotate", + "side": "clientbound", + "state": "play", + "id": 45 + }, + { + "name": "VehicleMoveS2CPacket", + "side": "clientbound", + "state": "play", + "id": 46 + }, + { + "name": "OpenWrittenBookS2CPacket", + "side": "clientbound", + "state": "play", + "id": 47 + }, + { + "name": "OpenScreenS2CPacket", + "side": "clientbound", + "state": "play", + "id": 48 + }, + { + "name": "SignEditorOpenS2CPacket", + "side": "clientbound", + "state": "play", + "id": 49 + }, + { + "name": "PlayPingS2CPacket", + "side": "clientbound", + "state": "play", + "id": 50 + }, + { + "name": "CraftFailedResponseS2CPacket", + "side": "clientbound", + "state": "play", + "id": 51 + }, + { + "name": "PlayerAbilitiesS2CPacket", + "side": "clientbound", + "state": "play", + "id": 52 + }, + { + "name": "ChatMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 53 + }, + { + "name": "EndCombatS2CPacket", + "side": "clientbound", + "state": "play", + "id": 54 + }, + { + "name": "EnterCombatS2CPacket", + "side": "clientbound", + "state": "play", + "id": 55 + }, + { + "name": "DeathMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 56 + }, + { + "name": "PlayerRemoveS2CPacket", + "side": "clientbound", + "state": "play", + "id": 57 + }, + { + "name": "PlayerListS2CPacket", + "side": "clientbound", + "state": "play", + "id": 58 + }, + { + "name": "LookAtS2CPacket", + "side": "clientbound", + "state": "play", + "id": 59 + }, + { + "name": "PlayerPositionLookS2CPacket", + "side": "clientbound", + "state": "play", + "id": 60 + }, + { + "name": "UnlockRecipesS2CPacket", + "side": "clientbound", + "state": "play", + "id": 61 + }, + { + "name": "EntitiesDestroyS2CPacket", + "side": "clientbound", + "state": "play", + "id": 62 + }, + { + "name": "RemoveEntityStatusEffectS2CPacket", + "side": "clientbound", + "state": "play", + "id": 63 + }, + { + "name": "ResourcePackSendS2CPacket", + "side": "clientbound", + "state": "play", + "id": 64 + }, + { + "name": "PlayerRespawnS2CPacket", + "side": "clientbound", + "state": "play", + "id": 65 + }, + { + "name": "EntitySetHeadYawS2CPacket", + "side": "clientbound", + "state": "play", + "id": 66 + }, + { + "name": "ChunkDeltaUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 67 + }, + { + "name": "SelectAdvancementTabS2CPacket", + "side": "clientbound", + "state": "play", + "id": 68 + }, + { + "name": "ServerMetadataS2CPacket", + "side": "clientbound", + "state": "play", + "id": 69 + }, + { + "name": "OverlayMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 70 + }, + { + "name": "WorldBorderCenterChangedS2CPacket", + "side": "clientbound", + "state": "play", + "id": 71 + }, + { + "name": "WorldBorderInterpolateSizeS2CPacket", + "side": "clientbound", + "state": "play", + "id": 72 + }, + { + "name": "WorldBorderSizeChangedS2CPacket", + "side": "clientbound", + "state": "play", + "id": 73 + }, + { + "name": "WorldBorderWarningTimeChangedS2CPacket", + "side": "clientbound", + "state": "play", + "id": 74 + }, + { + "name": "WorldBorderWarningBlocksChangedS2CPacket", + "side": "clientbound", + "state": "play", + "id": 75 + }, + { + "name": "SetCameraEntityS2CPacket", + "side": "clientbound", + "state": "play", + "id": 76 + }, + { + "name": "UpdateSelectedSlotS2CPacket", + "side": "clientbound", + "state": "play", + "id": 77 + }, + { + "name": "ChunkRenderDistanceCenterS2CPacket", + "side": "clientbound", + "state": "play", + "id": 78 + }, + { + "name": "ChunkLoadDistanceS2CPacket", + "side": "clientbound", + "state": "play", + "id": 79 + }, + { + "name": "PlayerSpawnPositionS2CPacket", + "side": "clientbound", + "state": "play", + "id": 80 + }, + { + "name": "ScoreboardDisplayS2CPacket", + "side": "clientbound", + "state": "play", + "id": 81 + }, + { + "name": "EntityTrackerUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 82 + }, + { + "name": "EntityAttachS2CPacket", + "side": "clientbound", + "state": "play", + "id": 83 + }, + { + "name": "EntityVelocityUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 84 + }, + { + "name": "EntityEquipmentUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 85 + }, + { + "name": "ExperienceBarUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 86 + }, + { + "name": "HealthUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 87 + }, + { + "name": "ScoreboardObjectiveUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 88 + }, + { + "name": "EntityPassengersSetS2CPacket", + "side": "clientbound", + "state": "play", + "id": 89 + }, + { + "name": "TeamS2CPacket", + "side": "clientbound", + "state": "play", + "id": 90 + }, + { + "name": "ScoreboardPlayerUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 91 + }, + { + "name": "SimulationDistanceS2CPacket", + "side": "clientbound", + "state": "play", + "id": 92 + }, + { + "name": "SubtitleS2CPacket", + "side": "clientbound", + "state": "play", + "id": 93 + }, + { + "name": "WorldTimeUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 94 + }, + { + "name": "TitleS2CPacket", + "side": "clientbound", + "state": "play", + "id": 95 + }, + { + "name": "TitleFadeS2CPacket", + "side": "clientbound", + "state": "play", + "id": 96 + }, + { + "name": "PlaySoundFromEntityS2CPacket", + "side": "clientbound", + "state": "play", + "id": 97 + }, + { + "name": "PlaySoundS2CPacket", + "side": "clientbound", + "state": "play", + "id": 98 + }, + { + "name": "StopSoundS2CPacket", + "side": "clientbound", + "state": "play", + "id": 99 + }, + { + "name": "GameMessageS2CPacket", + "side": "clientbound", + "state": "play", + "id": 100 + }, + { + "name": "PlayerListHeaderS2CPacket", + "side": "clientbound", + "state": "play", + "id": 101 + }, + { + "name": "NbtQueryResponseS2CPacket", + "side": "clientbound", + "state": "play", + "id": 102 + }, + { + "name": "ItemPickupAnimationS2CPacket", + "side": "clientbound", + "state": "play", + "id": 103 + }, + { + "name": "EntityPositionS2CPacket", + "side": "clientbound", + "state": "play", + "id": 104 + }, + { + "name": "AdvancementUpdateS2CPacket", + "side": "clientbound", + "state": "play", + "id": 105 + }, + { + "name": "EntityAttributesS2CPacket", + "side": "clientbound", + "state": "play", + "id": 106 + }, + { + "name": "FeaturesS2CPacket", + "side": "clientbound", + "state": "play", + "id": 107 + }, + { + "name": "EntityStatusEffectS2CPacket", + "side": "clientbound", + "state": "play", + "id": 108 + }, + { + "name": "SynchronizeRecipesS2CPacket", + "side": "clientbound", + "state": "play", + "id": 109 + }, + { + "name": "SynchronizeTagsS2CPacket", + "side": "clientbound", + "state": "play", + "id": 110 + }, + { + "name": "QueryResponseS2CPacket", + "side": "clientbound", + "state": "status", + "id": 0 + }, + { + "name": "QueryPongS2CPacket", + "side": "clientbound", + "state": "status", + "id": 1 + }, + { + "name": "LoginDisconnectS2CPacket", + "side": "clientbound", + "state": "login", + "id": 0 + }, + { + "name": "LoginHelloS2CPacket", + "side": "clientbound", + "state": "login", + "id": 1 + }, + { + "name": "LoginSuccessS2CPacket", + "side": "clientbound", + "state": "login", + "id": 2 + }, + { + "name": "LoginCompressionS2CPacket", + "side": "clientbound", + "state": "login", + "id": 3 + }, + { + "name": "LoginQueryRequestS2CPacket", + "side": "clientbound", + "state": "login", + "id": 4 + } +] \ No newline at end of file diff --git a/tools/packet-inspector/src/app.rs b/vendor/valence/tools/packet_inspector/src/app.rs similarity index 85% rename from tools/packet-inspector/src/app.rs rename to vendor/valence/tools/packet_inspector/src/app.rs index 814c3fa1..0dbe8c83 100644 --- a/tools/packet-inspector/src/app.rs +++ b/vendor/valence/tools/packet_inspector/src/app.rs @@ -1,9 +1,7 @@ -use std::{ - net::SocketAddr, - sync::{Arc, RwLock}, -}; +use std::net::SocketAddr; +use std::sync::{Arc, RwLock}; -use egui_dock::{DockArea, DockState, NodeIndex, Style}; +use egui_dock::{DockArea, NodeIndex, Style, Tree}; use packet_inspector::Proxy; use tokio::task::JoinHandle; @@ -12,9 +10,7 @@ use crate::shared_state::{Event, SharedState}; mod connection; mod filter; mod hex_viewer; - mod packet_list; - mod text_viewer; pub trait View { @@ -52,32 +48,33 @@ impl egui_dock::TabViewer for TabViewer { } pub struct GuiApp { - tree: DockState>, + tree: Tree>, shared_state: Arc>, tab_viewer: TabViewer, } impl GuiApp { - pub(crate) fn new(cc: &eframe::CreationContext<'_>) -> Self { + pub fn new(cc: &eframe::CreationContext<'_>) -> Self { let ctx = cc.egui_ctx.clone(); // Default Application Layout - let mut tree: DockState> = - DockState::new(vec![Box::new(connection::Connection::new())]); - - let [a, b] = tree - .main_surface_mut() - .split_right(NodeIndex::root(), 0.3, vec![Box::new( - packet_list::PacketList::new(), - )]); - - let [_, _] = tree - .main_surface_mut() - .split_below(a, 0.25, vec![Box::new(filter::Filter::new())]); - let [_, _] = tree.main_surface_mut().split_below(b, 0.5, vec![ - Box::new(text_viewer::TextView::new()), - Box::new(hex_viewer::HexView::new()), - ]); + let mut tree: Tree> = Tree::new(vec![Box::new(connection::Connection::new())]); + + let [a, b] = tree.split_right( + NodeIndex::root(), + 0.3, + vec![Box::new(packet_list::PacketList::new())], + ); + + let [_, _] = tree.split_below(a, 0.25, vec![Box::new(filter::Filter::new())]); + let [_, _] = tree.split_below( + b, + 0.5, + vec![ + Box::new(text_viewer::TextView::new()), + Box::new(hex_viewer::HexView::new()), + ], + ); // Persistent Storage let mut shared_state = SharedState::new(ctx); @@ -107,8 +104,8 @@ impl GuiApp { }; Self { - tree, shared_state, + tree, tab_viewer, } } diff --git a/tools/packet-inspector/src/app/connection.rs b/vendor/valence/tools/packet_inspector/src/app/connection.rs similarity index 94% rename from tools/packet-inspector/src/app/connection.rs rename to vendor/valence/tools/packet_inspector/src/app/connection.rs index 73b86f42..90db3410 100644 --- a/tools/packet-inspector/src/app/connection.rs +++ b/vendor/valence/tools/packet_inspector/src/app/connection.rs @@ -1,7 +1,7 @@ use super::{SharedState, Tab, View}; use crate::shared_state::Event; -pub struct Connection; +pub struct Connection {} impl Tab for Connection { fn new() -> Self { @@ -15,9 +15,8 @@ impl Tab for Connection { impl View for Connection { fn ui(&mut self, ui: &mut egui::Ui, state: &mut SharedState) { - ui.label("Listener Address"); - if state.is_listening { + ui.label("Listener Address"); ui.text_edit_singleline(&mut state.listener_addr.clone()); ui.label("Server Address"); ui.text_edit_singleline(&mut state.server_addr.clone()); diff --git a/tools/packet-inspector/src/app/filter.rs b/vendor/valence/tools/packet_inspector/src/app/filter.rs similarity index 98% rename from tools/packet-inspector/src/app/filter.rs rename to vendor/valence/tools/packet_inspector/src/app/filter.rs index 1171af73..e12e4671 100644 --- a/tools/packet-inspector/src/app/filter.rs +++ b/vendor/valence/tools/packet_inspector/src/app/filter.rs @@ -5,7 +5,7 @@ use valence_protocol::PacketState; use super::{SharedState, Tab, View}; use crate::tri_checkbox::{TriCheckbox, TriCheckboxState}; -pub struct Filter; +pub struct Filter {} impl Tab for Filter { fn new() -> Self { @@ -144,9 +144,9 @@ fn draw_packet_list(ui: &mut Ui, state: &mut SharedState, packet_state: PacketSt } fn int_to_hex(i: i32) -> String { - format!("0x{i:0>2X}") + format!("0x{:0>2X}", i) } fn int_to_hex_lower(i: i32) -> String { - format!("0x{i:0>2x}") + format!("0x{:0>2x}", i) } diff --git a/tools/packet-inspector/src/app/hex_viewer.rs b/vendor/valence/tools/packet_inspector/src/app/hex_viewer.rs similarity index 88% rename from tools/packet-inspector/src/app/hex_viewer.rs rename to vendor/valence/tools/packet_inspector/src/app/hex_viewer.rs index be4dbf92..2c76db9b 100644 --- a/tools/packet-inspector/src/app/hex_viewer.rs +++ b/vendor/valence/tools/packet_inspector/src/app/hex_viewer.rs @@ -2,7 +2,7 @@ use std::io::Read; use super::{SharedState, Tab, View}; -pub struct HexView; +pub struct HexView {} impl Tab for HexView { fn new() -> Self { @@ -16,7 +16,7 @@ impl Tab for HexView { impl View for HexView { fn ui(&mut self, ui: &mut egui::Ui, state: &mut SharedState) { - let mut buf = [0_u8; 16]; + let mut buf = [0u8; 16]; let mut count = 0; let packets = state.packets.read().unwrap(); @@ -34,7 +34,7 @@ impl View for HexView { .show(ui, |ui| { ui.label(" "); for i in 0..16 { - ui.label(format!("{i:02X}")); + ui.label(format!("{:02X}", i)); } ui.end_row(); loop { @@ -43,14 +43,14 @@ impl View for HexView { break; } - ui.label(format!("{count:08X}")); + ui.label(format!("{:08X}", count)); let text_color = if ui.style().visuals.dark_mode { egui::Color32::from_gray(255) } else { egui::Color32::from_gray(0) }; for b in buf.iter().take(bytes_read) { - ui.colored_label(text_color, format!("{b:02X}")); + ui.colored_label(text_color, format!("{:02X}", b)); } for _ in 0..16 - bytes_read { ui.label(" "); diff --git a/tools/packet-inspector/src/app/packet_list.rs b/vendor/valence/tools/packet_inspector/src/app/packet_list.rs similarity index 79% rename from tools/packet-inspector/src/app/packet_list.rs rename to vendor/valence/tools/packet_inspector/src/app/packet_list.rs index 9edd5ec7..21c1c827 100644 --- a/tools/packet-inspector/src/app/packet_list.rs +++ b/vendor/valence/tools/packet_inspector/src/app/packet_list.rs @@ -1,14 +1,14 @@ -use eframe::epaint::PathShape; +use eframe::epaint::{PathShape, RectShape}; use egui::{ - Color32, Pos2, Rect, Response, Rgba, Sense, Shape, Stroke, StrokeKind, TextStyle, TextWrapMode, - Ui, Vec2, WidgetText, + Color32, Pos2, Rect, Response, Rgba, Rounding, Sense, Shape, Stroke, TextStyle, Ui, Vec2, + WidgetText, }; use packet_inspector::Packet; use valence_protocol::PacketSide; use super::{SharedState, Tab, View}; -pub struct PacketList; +pub struct PacketList {} impl Tab for PacketList { fn new() -> Self { @@ -81,7 +81,7 @@ fn draw_packet_counter(state: &SharedState, ui: &mut Ui) { .filter(|p| state.packet_filter.get(p).unwrap_or(true)) .count(); - ui.label(format!("({filtered_packets}/{length})",)); + ui.label(format!("({}/{})", filtered_packets, length)); } fn draw_clear_button(state: &mut SharedState, ui: &mut Ui) { @@ -104,7 +104,13 @@ fn draw_packet_list(state: &mut SharedState, ui: &mut Ui) { } } - let selected = { state.selected_packet == Some(i) }; + let selected = { + if let Some(selected) = state.selected_packet { + selected == i + } else { + false + } + }; let widget = draw_packet_widget(ui, packet, selected); @@ -129,54 +135,38 @@ fn draw_packet_widget(ui: &mut Ui, packet: &Packet, selected: bool) -> Response Sense::click(), ); // this should give me a new rect inside the scroll area... no? - let fill = if selected { - Rgba::from_rgba_premultiplied(0.1, 0.1, 0.1, 0.5) - } else { - Rgba::from_rgba_premultiplied(0.0, 0.0, 0.0, 0.0) + let fill = match selected /*packet.selected*/ { + true => Rgba::from_rgba_premultiplied(0.1, 0.1, 0.1, 0.5), + false => Rgba::from_rgba_premultiplied(0.0, 0.0, 0.0, 0.0), }; - let text_color: Color32 = if selected { - Rgba::from_rgba_premultiplied(0.0, 0.0, 0.0, 1.0).into() - } else { - ui.visuals().strong_text_color() + let text_color: Color32 = match selected /*packet.selected*/ { + true => Rgba::from_rgba_premultiplied(0.0, 0.0, 0.0, 1.0).into(), + false => ui.visuals().strong_text_color(), }; if ui.is_rect_visible(rect) { - ui.painter().rect( + ui.painter().add(Shape::Rect(RectShape { rect, - 0.0, - fill, - Stroke::new(1.0, Rgba::BLACK), - StrokeKind::Inside, - ); + rounding: Rounding::none(), + fill: fill.into(), + stroke: Stroke::new(1.0, Rgba::BLACK), + })); let shape = get_triangle(packet.side, &rect); ui.painter().add(Shape::Path(shape)); let identifier: WidgetText = format!("0x{:0>2X?}", packet.id).into(); - let identifier = identifier.into_galley( - ui, - Some(TextWrapMode::Truncate), - rect.width() - 21.0, - TextStyle::Button, - ); + let identifier = + identifier.into_galley(ui, Some(false), rect.width() - 21.0, TextStyle::Button); let label: WidgetText = packet.name.into(); - let label = label.into_galley( - ui, - Some(TextWrapMode::Truncate), - rect.width() - 60.0, - TextStyle::Button, - ); + let label = label.into_galley(ui, Some(false), rect.width() - 60.0, TextStyle::Button); let timestamp: WidgetText = systemtime_strftime(packet.timestamp.unwrap()).into(); - let timestamp = timestamp.into_galley( - ui, - Some(TextWrapMode::Truncate), - rect.width() - 60.0, - TextStyle::Button, - ); + let timestamp = + timestamp.into_galley(ui, Some(false), rect.width() - 60.0, TextStyle::Button); let id_and_timestamp_color = if selected { text_color @@ -184,33 +174,34 @@ fn draw_packet_widget(ui: &mut Ui, packet: &Packet, selected: bool) -> Response ui.visuals().weak_text_color() }; - ui.painter().galley( + identifier.paint_with_fallback_color( + ui.painter(), Pos2 { x: rect.left() + 21.0, y: rect.top() + 6.0, }, - identifier, id_and_timestamp_color, ); rect.set_width(rect.width() - 5.0); let label_width = label.size().x + 50.0; - ui.painter().galley( + + label.paint_with_fallback_color( + &ui.painter().with_clip_rect(rect), Pos2 { x: rect.left() + 55.0, y: rect.top() + 6.0, }, - label, text_color, ); - ui.painter().galley( + timestamp.paint_with_fallback_color( + &ui.painter().with_clip_rect(rect), Pos2 { x: rect.left() + label_width + 8.0, y: rect.top() + 6.0, }, - timestamp, id_and_timestamp_color, ); } diff --git a/tools/packet-inspector/src/app/text_viewer.rs b/vendor/valence/tools/packet_inspector/src/app/text_viewer.rs similarity index 60% rename from tools/packet-inspector/src/app/text_viewer.rs rename to vendor/valence/tools/packet_inspector/src/app/text_viewer.rs index 33e6e5d3..739bc3b7 100644 --- a/tools/packet-inspector/src/app/text_viewer.rs +++ b/vendor/valence/tools/packet_inspector/src/app/text_viewer.rs @@ -1,66 +1,12 @@ use super::{SharedState, Tab, View}; -#[allow(clippy::unnecessary_wraps, clippy::redundant_pub_crate)] mod utils { use packet_inspector::Packet as ProxyPacket; - use valence_protocol::{ - Decode, Packet, - packets::{ - handshaking::HandshakeC2s, - login::{ - LoginCompressionS2c, LoginDisconnectS2c, LoginHelloC2s, LoginHelloS2c, LoginKeyC2s, - LoginQueryRequestS2c, LoginQueryResponseC2s, LoginSuccessS2c, - }, - play::{ - AdvancementTabC2s, AdvancementUpdateS2c, BlockBreakingProgressS2c, - BlockEntityUpdateS2c, BlockEventS2c, BlockUpdateS2c, BoatPaddleStateC2s, - BookUpdateC2s, BossBarS2c, BundleSplitterS2c, ButtonClickC2s, ChatMessageC2s, - ChatMessageS2c, ChatSuggestionsS2c, ChunkBiomeDataS2c, ChunkDataS2c, - ChunkDeltaUpdateS2c, ChunkLoadDistanceS2c, ChunkRenderDistanceCenterS2c, - ClearTitleS2c, ClickSlotC2s, ClientCommandC2s, ClientSettingsC2s, ClientStatusC2s, - CloseHandledScreenC2s, CloseScreenS2c, CommandExecutionC2s, CommandSuggestionsS2c, - CommandTreeS2c, CooldownUpdateS2c, CraftFailedResponseS2c, CraftRequestC2s, - CreativeInventoryActionC2s, CustomPayloadC2s, CustomPayloadS2c, DamageTiltS2c, - DeathMessageS2c, DifficultyS2c, DisconnectS2c, EndCombatS2c, EnterCombatS2c, - EntitiesDestroyS2c, EntityAnimationS2c, EntityAttachS2c, EntityAttributesS2c, - EntityDamageS2c, EntityEquipmentUpdateS2c, EntityPassengersSetS2c, - EntityPositionS2c, EntitySetHeadYawS2c, EntitySpawnS2c, EntityStatusEffectS2c, - EntityStatusS2c, EntityTrackerUpdateS2c, EntityVelocityUpdateS2c, - ExperienceBarUpdateS2c, ExperienceOrbSpawnS2c, ExplosionS2c, FeaturesS2c, FullC2s, - GameJoinS2c, GameMessageS2c, GameStateChangeS2c, HandSwingC2s, HealthUpdateS2c, - InventoryS2c, ItemPickupAnimationS2c, JigsawGeneratingC2s, KeepAliveC2s, - KeepAliveS2c, LightUpdateS2c, LookAndOnGroundC2s, LookAtS2c, MapUpdateS2c, - MessageAcknowledgmentC2s, MoveRelativeS2c, NbtQueryResponseS2c, OnGroundOnlyC2s, - OpenHorseScreenS2c, OpenScreenS2c, OpenWrittenBookS2c, OverlayMessageS2c, - ParticleS2c, PickFromInventoryC2s, PlayPingS2c, PlayPongC2s, - PlaySoundFromEntityS2c, PlaySoundS2c, PlayerAbilitiesS2c, PlayerActionC2s, - PlayerActionResponseS2c, PlayerInputC2s, PlayerInteractBlockC2s, - PlayerInteractEntityC2s, PlayerInteractItemC2s, PlayerListHeaderS2c, PlayerListS2c, - PlayerPositionLookS2c, PlayerRemoveS2c, PlayerRespawnS2c, PlayerSessionC2s, - PlayerSpawnPositionS2c, PlayerSpawnS2c, PositionAndOnGroundC2s, - ProfilelessChatMessageS2c, QueryBlockNbtC2s, QueryEntityNbtC2s, RecipeBookDataC2s, - RecipeCategoryOptionsC2s, RemoveEntityStatusEffectS2c, RemoveMessageS2c, - RenameItemC2s, RequestCommandCompletionsC2s, ResourcePackSendS2c, - ResourcePackStatusC2s, RotateAndMoveRelativeS2c, RotateS2c, ScoreboardDisplayS2c, - ScoreboardObjectiveUpdateS2c, ScoreboardPlayerUpdateS2c, - ScreenHandlerPropertyUpdateS2c, ScreenHandlerSlotUpdateS2c, - SelectAdvancementTabS2c, SelectMerchantTradeC2s, ServerMetadataS2c, - SetCameraEntityS2c, SetTradeOffersS2c, SignEditorOpenS2c, SimulationDistanceS2c, - SpectatorTeleportC2s, StatisticsS2c, StopSoundS2c, SubtitleS2c, - SynchronizeRecipesS2c, SynchronizeTagsS2c, TeamS2c, TeleportConfirmC2s, - TitleFadeS2c, TitleS2c, UnloadChunkS2c, UnlockRecipesS2c, UpdateBeaconC2s, - UpdateCommandBlockC2s, UpdateCommandBlockMinecartC2s, UpdateDifficultyC2s, - UpdateDifficultyLockC2s, UpdateJigsawC2s, UpdatePlayerAbilitiesC2s, - UpdateSelectedSlotC2s, UpdateSelectedSlotS2c, UpdateSignC2s, - UpdateStructureBlockC2s, VehicleMoveC2s, VehicleMoveS2c, - WorldBorderCenterChangedS2c, WorldBorderInitializeS2c, - WorldBorderInterpolateSizeS2c, WorldBorderSizeChangedS2c, - WorldBorderWarningBlocksChangedS2c, WorldBorderWarningTimeChangedS2c, - WorldEventS2c, WorldTimeUpdateS2c, - }, - status::{QueryPingC2s, QueryPongS2c, QueryRequestC2s, QueryResponseS2c}, - }, - }; + use valence_protocol::packets::handshaking::*; + use valence_protocol::packets::login::*; + use valence_protocol::packets::play::*; + use valence_protocol::packets::status::*; + use valence_protocol::{Decode, Packet}; include!(concat!(env!("OUT_DIR"), "/packet_to_string.rs")); } @@ -74,7 +20,7 @@ impl Tab for TextView { fn new() -> Self { Self { last_packet_id: None, - packet_str: String::new(), + packet_str: "".to_string(), } } @@ -84,20 +30,21 @@ impl Tab for TextView { } impl View for TextView { - #[allow(clippy::significant_drop_tightening)] fn ui(&mut self, ui: &mut egui::Ui, state: &mut SharedState) { let packets = state.packets.read().unwrap(); let Some(packet_index) = state.selected_packet else { self.last_packet_id = None; - self.packet_str = String::new(); + self.packet_str = "".to_string(); return; }; if self.last_packet_id != Some(packet_index) { self.last_packet_id = Some(packet_index); - self.packet_str = utils::packet_to_string(&packets[packet_index]) - .unwrap_or_else(|err| format!("Error: {err}")); + self.packet_str = match utils::packet_to_string(&packets[packet_index]) { + Ok(str) => str, + Err(err) => format!("Error: {}", err), + }; } code_view_ui(ui, &self.packet_str); @@ -132,6 +79,12 @@ pub fn code_view_ui(ui: &mut egui::Ui, mut code: &str) { /// Memoized Code highlighting pub fn highlight(ctx: &egui::Context, theme: &CodeTheme, code: &str, language: &str) -> LayoutJob { + impl egui::util::cache::ComputerMut<(&CodeTheme, &str, &str), LayoutJob> for Highlighter { + fn compute(&mut self, (theme, code, lang): (&CodeTheme, &str, &str)) -> LayoutJob { + self.highlight(theme, code, lang) + } + } + type HighlightCache = egui::util::cache::FrameCache; ctx.memory_mut(|mem| { @@ -171,7 +124,7 @@ impl SyntectTheme { .copied() } - const fn name(self) -> &'static str { + fn name(&self) -> &'static str { match self { Self::Base16EightiesDark => "Base16 Eighties (dark)", Self::Base16MochaDark => "Base16 Mocha (dark)", @@ -183,7 +136,7 @@ impl SyntectTheme { } } - const fn syntect_key_name(self) -> &'static str { + fn syntect_key_name(&self) -> &'static str { match self { Self::Base16EightiesDark => "base16-eighties.dark", Self::Base16MochaDark => "base16-mocha.dark", @@ -195,7 +148,7 @@ impl SyntectTheme { } } - pub(crate) const fn is_dark(self) -> bool { + pub fn is_dark(&self) -> bool { match self { Self::Base16EightiesDark | Self::Base16MochaDark @@ -223,7 +176,7 @@ impl Default for CodeTheme { #[allow(unused)] impl CodeTheme { - pub(crate) const fn from_style(style: &egui::Style) -> Self { + pub fn from_style(style: &egui::Style) -> Self { if style.visuals.dark_mode { Self::dark() } else { @@ -231,21 +184,21 @@ impl CodeTheme { } } - pub(crate) fn from_memory(ctx: &egui::Context) -> Self { + pub fn from_memory(ctx: &egui::Context) -> Self { if ctx.style().visuals.dark_mode { ctx.data_mut(|d| { d.get_persisted(egui::Id::new("dark")) - .unwrap_or_else(Self::dark) + .unwrap_or_else(CodeTheme::dark) }) } else { ctx.data_mut(|d| { d.get_persisted(egui::Id::new("light")) - .unwrap_or_else(Self::light) + .unwrap_or_else(CodeTheme::light) }) } } - pub(crate) fn store_in_memory(self, ctx: &egui::Context) { + pub fn store_in_memory(self, ctx: &egui::Context) { if self.dark_mode { ctx.data_mut(|d| d.insert_persisted(egui::Id::new("dark"), self)); } else { @@ -256,22 +209,21 @@ impl CodeTheme { #[allow(unused)] impl CodeTheme { - pub(crate) const fn dark() -> Self { + pub fn dark() -> Self { Self { dark_mode: true, syntect_theme: SyntectTheme::SolarizedDark, } } - pub(crate) const fn light() -> Self { + pub fn light() -> Self { Self { dark_mode: false, syntect_theme: SyntectTheme::SolarizedLight, } } - pub(crate) fn ui(&mut self, ui: &mut egui::Ui) { - #[allow(deprecated)] + pub fn ui(&mut self, ui: &mut egui::Ui) { egui::widgets::global_dark_light_mode_buttons(ui); for theme in SyntectTheme::all() { @@ -298,12 +250,6 @@ impl Default for Highlighter { } } -impl egui::util::cache::ComputerMut<(&CodeTheme, &str, &str), LayoutJob> for Highlighter { - fn compute(&mut self, (theme, code, lang): (&CodeTheme, &str, &str)) -> LayoutJob { - self.highlight(theme, code, lang) - } -} - impl Highlighter { #[allow(clippy::unused_self, clippy::unnecessary_wraps)] fn highlight(&self, theme: &CodeTheme, code: &str, lang: &str) -> LayoutJob { @@ -323,8 +269,9 @@ impl Highlighter { } fn highlight_impl(&self, theme: &CodeTheme, text: &str, language: &str) -> Option { - use egui::text::{LayoutSection, TextFormat}; - use syntect::{easy::HighlightLines, highlighting::FontStyle, util::LinesWithEndings}; + use syntect::easy::HighlightLines; + use syntect::highlighting::FontStyle; + use syntect::util::LinesWithEndings; let syntax = self .ps @@ -334,6 +281,8 @@ impl Highlighter { let theme = theme.syntect_theme.syntect_key_name(); let mut h = HighlightLines::new(syntax, &self.ts.themes[theme]); + use egui::text::{LayoutSection, TextFormat}; + let mut job = LayoutJob { text: text.into(), ..Default::default() diff --git a/tools/packet-inspector/src/lib.rs b/vendor/valence/tools/packet_inspector/src/lib.rs similarity index 90% rename from tools/packet-inspector/src/lib.rs rename to vendor/valence/tools/packet_inspector/src/lib.rs index daa3915e..dd21474f 100644 --- a/tools/packet-inspector/src/lib.rs +++ b/vendor/valence/tools/packet_inspector/src/lib.rs @@ -1,40 +1,30 @@ -#![expect( - clippy::cast_possible_truncation, - reason = "todo: we should double check no truncation" -)] -#![expect( - clippy::cast_possible_wrap, - reason = "todo: we should double check no wrapping" -)] -#![expect( - clippy::cast_sign_loss, - reason = "todo: we should double check no sign loss" -)] - mod packet_io; mod packet_registry; -use std::{net::SocketAddr, sync::Arc, time::Duration}; +use std::net::SocketAddr; +use std::sync::Arc; +use std::time::Duration; use anyhow::bail; use bytes::{BufMut, BytesMut}; -use tokio::{ - net::{TcpListener, TcpStream}, - sync::RwLock, - task::JoinHandle, +use tokio::net::{TcpListener, TcpStream}; +use tokio::sync::RwLock; +use tokio::task::JoinHandle; +use valence_protocol::decode::PacketFrame; +use valence_protocol::packets::handshaking::handshake_c2s::HandshakeNextState; +use valence_protocol::packets::handshaking::HandshakeC2s; +use valence_protocol::packets::login::{ + LoginCompressionS2c, LoginDisconnectS2c, LoginHelloS2c, LoginSuccessS2c, }; +use valence_protocol::text::color::NamedColor; +use valence_protocol::text::{Color, IntoText}; use valence_protocol::{ CompressionThreshold, Decode, Encode, Packet as ValencePacket, PacketSide, PacketState, - decode::PacketFrame, - packets::{ - handshaking::{HandshakeC2s, handshake_c2s::HandshakeNextState}, - login::{LoginCompressionS2c, LoginDisconnectS2c, LoginHelloS2c, LoginSuccessS2c}, - }, - text::{Color, IntoText, color::NamedColor}, }; +use crate::packet_io::PacketIo; pub use crate::packet_registry::Packet; -use crate::{packet_io::PacketIo, packet_registry::PacketRegistry}; +use crate::packet_registry::PacketRegistry; include!(concat!(env!("OUT_DIR"), "/packets.rs")); @@ -113,7 +103,7 @@ impl Proxy { _ = self.main_task => {}, // If the main task doesn't stop after 5 seconds, we force terminate it - () = tokio::time::sleep(Duration::from_secs(5)) => { + _ = tokio::time::sleep(Duration::from_secs(5)) => { abort_handle.abort(); }, } @@ -147,7 +137,7 @@ impl Proxy { tracing::trace!("Stopping the proxy task..."); // TODO: stop these tasks properly instead of just leaving the TCP connections for timeout - for task in individual_tasks { + for task in individual_tasks.drain(..) { task.abort(); } @@ -212,7 +202,7 @@ impl Proxy { .await?; if state == PacketState::Handshaking { - if let Some(handshake) = extrapolate_packet::>(&packet) { + if let Some(handshake) = extrapolate_packet::(&packet) { *state_lock.write().await = match handshake.next_state { HandshakeNextState::Status => PacketState::Status, HandshakeNextState::Login => PacketState::Login, @@ -250,7 +240,7 @@ impl Proxy { *threshold_lock.write().await = CompressionThreshold(threshold.0); } - if extrapolate_packet::>(&packet).is_some() { + if extrapolate_packet::(&packet).is_some() { *state_lock.write().await = PacketState::Play; } } @@ -264,7 +254,7 @@ impl Proxy { // (The check is done in this if rather than the one above, to still send the // encryption request packet to the inspector) if state == PacketState::Login - && extrapolate_packet::>(&packet).is_some() + && extrapolate_packet::(&packet).is_some() { // The server is requesting encryption, we can't support that diff --git a/vendor/valence/tools/packet_inspector/src/main.rs b/vendor/valence/tools/packet_inspector/src/main.rs new file mode 100644 index 00000000..fa7e7b0a --- /dev/null +++ b/vendor/valence/tools/packet_inspector/src/main.rs @@ -0,0 +1,46 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +mod tri_checkbox; + +mod app; +mod shared_state; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let native_options = eframe::NativeOptions { + icon_data: Some(load_icon()), + initial_window_size: Some(egui::Vec2::new(1024.0, 768.0)), + decorated: true, + ..Default::default() + }; + + eframe::run_native( + "Valence Packet Inspector", + native_options, + Box::new(move |cc| { + let gui_app = app::GuiApp::new(cc); + + Box::new(gui_app) + }), + )?; + + Ok(()) +} + +fn load_icon() -> eframe::IconData { + let (icon_rgba, icon_width, icon_height) = { + let icon = include_bytes!("../../../assets/logo-256x256.png"); + let image = image::load_from_memory(icon) + .expect("Failed to open icon path") + .into_rgba8(); + let (width, height) = image.dimensions(); + let rgba = image.into_raw(); + (rgba, width, height) + }; + + eframe::IconData { + rgba: icon_rgba, + width: icon_width, + height: icon_height, + } +} diff --git a/tools/packet-inspector/src/main_cli.rs b/vendor/valence/tools/packet_inspector/src/main_cli.rs similarity index 100% rename from tools/packet-inspector/src/main_cli.rs rename to vendor/valence/tools/packet_inspector/src/main_cli.rs diff --git a/tools/packet-inspector/src/packet_io.rs b/vendor/valence/tools/packet_inspector/src/packet_io.rs similarity index 83% rename from tools/packet-inspector/src/packet_io.rs rename to vendor/valence/tools/packet_inspector/src/packet_io.rs index 0e94c2f5..d073db9f 100644 --- a/tools/packet-inspector/src/packet_io.rs +++ b/vendor/valence/tools/packet_inspector/src/packet_io.rs @@ -1,18 +1,15 @@ -use std::{io, io::ErrorKind}; +use std::io; +use std::io::ErrorKind; use anyhow::ensure; use bytes::{BufMut, BytesMut}; -use tokio::{ - io::{AsyncReadExt, AsyncWriteExt}, - net::TcpStream, -}; -use valence_protocol::{ - CompressionThreshold, Encode, MAX_PACKET_SIZE, VarInt, - decode::{PacketDecoder, PacketFrame}, - encode::PacketEncoder, -}; - -pub struct PacketIoReader { +use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use tokio::net::TcpStream; +use valence_protocol::decode::{PacketDecoder, PacketFrame}; +use valence_protocol::encode::PacketEncoder; +use valence_protocol::{CompressionThreshold, Encode, VarInt, MAX_PACKET_SIZE}; + +pub(crate) struct PacketIoReader { reader: tokio::io::ReadHalf, dec: PacketDecoder, threshold: CompressionThreshold, @@ -48,17 +45,19 @@ impl PacketIoReader { } } -pub struct PacketIoWriter { +pub(crate) struct PacketIoWriter { writer: tokio::io::WriteHalf, enc: PacketEncoder, threshold: CompressionThreshold, } impl PacketIoWriter { - // No | Packet Length | VarInt | Length of (Data Length) + Compressed length of (Packet ID + Data) - // No | Data Length | VarInt | Length of uncompressed (Packet ID + Data) or 0 - // Yes | Packet ID | VarInt | zlib compressed packet ID (see the sections below) - // Yes | Data | Byte Array | zlib compressed packet data (see the sections below) + /* + No | Packet Length | VarInt | Length of (Data Length) + Compressed length of (Packet ID + Data) + No | Data Length | VarInt | Length of uncompressed (Packet ID + Data) or 0 + Yes | Packet ID | VarInt | zlib compressed packet ID (see the sections below) + Yes | Data | Byte Array | zlib compressed packet data (see the sections below) + */ pub(crate) async fn send_packet_raw(&mut self, frame: &PacketFrame) -> anyhow::Result<()> { let id_varint = VarInt(frame.id); let id_buf = varint_to_bytes(id_varint); @@ -73,7 +72,8 @@ impl PacketIoWriter { if uncompressed_packet_length > self.threshold.0 as usize { use std::io::Read; - use flate2::{Compression, bufread::ZlibEncoder}; + use flate2::bufread::ZlibEncoder; + use flate2::Compression; let mut z = ZlibEncoder::new(&uncompressed_packet[..], Compression::new(4)); let mut compressed = Vec::new(); @@ -141,13 +141,13 @@ impl PacketIoWriter { self.enc.set_compression(threshold); } - pub(crate) async fn shutdown(&mut self) -> std::io::Result<()> { + pub async fn shutdown(&mut self) -> std::io::Result<()> { self.writer.shutdown().await?; Ok(()) } } -pub struct PacketIo { +pub(crate) struct PacketIo { stream: TcpStream, enc: PacketEncoder, dec: PacketDecoder, @@ -166,7 +166,7 @@ impl PacketIo { } } - pub(crate) fn split(self) -> (PacketIoReader, PacketIoWriter) { + pub fn split(self) -> (PacketIoReader, PacketIoWriter) { let (reader, writer) = tokio::io::split(self.stream); ( @@ -184,7 +184,7 @@ impl PacketIo { } #[allow(dead_code)] - pub(crate) fn set_compression(&mut self, threshold: CompressionThreshold) { + pub(crate) async fn set_compression(&mut self, threshold: CompressionThreshold) { self.threshold = threshold; self.enc.set_compression(threshold); self.dec.set_compression(threshold); diff --git a/tools/packet-inspector/src/packet_registry.rs b/vendor/valence/tools/packet_inspector/src/packet_registry.rs similarity index 87% rename from tools/packet-inspector/src/packet_registry.rs rename to vendor/valence/tools/packet_inspector/src/packet_registry.rs index c8803c5c..68819496 100644 --- a/tools/packet-inspector/src/packet_registry.rs +++ b/vendor/valence/tools/packet_inspector/src/packet_registry.rs @@ -1,11 +1,10 @@ -use std::{ - hash::{Hash, Hasher}, - sync::RwLock, -}; +use std::hash::{Hash, Hasher}; +use std::sync::RwLock; use bytes::Bytes; use time::OffsetDateTime; -use valence_protocol::{CompressionThreshold, PacketSide, PacketState, decode::PacketFrame}; +use valence_protocol::decode::PacketFrame; +use valence_protocol::{CompressionThreshold, PacketSide, PacketState}; pub struct PacketRegistry { packets: RwLock>, @@ -39,7 +38,10 @@ impl PacketRegistry { } fn get_specific_packet(&self, side: PacketSide, state: PacketState, packet_id: i32) -> Packet { - let time = OffsetDateTime::now_local().unwrap_or_else(|_| OffsetDateTime::now_utc()); + let time = match OffsetDateTime::now_local() { + Ok(time) => time, + Err(_) => OffsetDateTime::now_utc(), + }; self.packets .read() @@ -65,8 +67,10 @@ impl PacketRegistry { packet: &PacketFrame, ) -> anyhow::Result<()> { let mut p = self.get_specific_packet(side, state, packet.id); - - let time = OffsetDateTime::now_local().unwrap_or_else(|_| OffsetDateTime::now_utc()); + let time = match OffsetDateTime::now_local() { + Ok(time) => time, + Err(_) => OffsetDateTime::now_utc(), + }; p.data = Some(packet.body.clone().freeze()); p.timestamp = Some(time); diff --git a/tools/packet-inspector/src/shared_state.rs b/vendor/valence/tools/packet_inspector/src/shared_state.rs similarity index 70% rename from tools/packet-inspector/src/shared_state.rs rename to vendor/valence/tools/packet_inspector/src/shared_state.rs index 9babb202..d21de63d 100644 --- a/tools/packet-inspector/src/shared_state.rs +++ b/vendor/valence/tools/packet_inspector/src/shared_state.rs @@ -1,6 +1,7 @@ #![allow(clippy::mutable_key_type)] -use std::{collections::HashMap, sync::RwLock}; +use std::collections::HashMap; +use std::sync::RwLock; use egui::Context; use packet_inspector::Packet; @@ -11,17 +12,17 @@ pub struct PacketFilter { } impl PacketFilter { - pub(crate) fn new() -> Self { + pub fn new() -> Self { let mut inner = HashMap::new(); - for p in &packet_inspector::STD_PACKETS { + for p in packet_inspector::STD_PACKETS.iter() { inner.insert(p.clone(), true); } Self { inner } } - pub(crate) fn get(&self, packet: &Packet) -> Option { + pub fn get(&self, packet: &Packet) -> Option { self.inner .iter() .find(|(k, _)| k.id == packet.id && k.side == packet.side && k.state == packet.state) @@ -29,15 +30,15 @@ impl PacketFilter { .copied() } - pub(crate) fn insert(&mut self, packet: Packet, value: bool) { + pub fn insert(&mut self, packet: Packet, value: bool) { self.inner.insert(packet, value); } - pub(crate) fn iter(&self) -> impl Iterator { + pub fn iter(&self) -> impl Iterator { self.inner.iter() } - pub(crate) fn iter_mut(&mut self) -> impl Iterator { + pub fn iter_mut(&mut self) -> impl Iterator { self.inner.iter_mut() } } @@ -50,25 +51,25 @@ pub enum Event { #[derive(serde::Deserialize, serde::Serialize)] pub struct SharedState { - pub(crate) listener_addr: String, - pub(crate) server_addr: String, - pub(crate) autostart: bool, - pub(crate) packet_filter: PacketFilter, - pub(crate) packet_search: String, + pub listener_addr: String, + pub server_addr: String, + pub autostart: bool, + pub packet_filter: PacketFilter, + pub packet_search: String, #[serde(skip)] - pub(crate) is_listening: bool, + pub is_listening: bool, #[serde(skip)] - pub(crate) selected_packet: Option, + pub selected_packet: Option, #[serde(skip)] - pub(crate) update_scroll: bool, + pub update_scroll: bool, #[serde(skip)] - pub(crate) packets: RwLock>, + pub packets: RwLock>, #[serde(skip)] pub(super) receiver: Option>, #[serde(skip)] sender: Option>, #[serde(skip)] - pub(crate) ctx: Option, + pub ctx: Option, } impl Default for SharedState { @@ -76,8 +77,8 @@ impl Default for SharedState { let (sender, receiver) = flume::unbounded(); Self { - listener_addr: "127.0.0.1:25566".to_owned(), - server_addr: "127.0.0.1:25565".to_owned(), + listener_addr: "127.0.0.1:25566".to_string(), + server_addr: "127.0.0.1:25565".to_string(), autostart: false, is_listening: false, packet_search: String::new(), @@ -94,13 +95,12 @@ impl Default for SharedState { #[allow(unused)] impl SharedState { - pub(crate) fn new(ctx: Context) -> Self { + pub fn new(ctx: Context) -> Self { Self { ctx: Some(ctx), ..Self::default() } } - pub(super) fn merge(mut self, other: Self) -> Self { self.ctx = other.ctx; self.sender = other.sender; @@ -110,7 +110,7 @@ impl SharedState { let mut packet_filter = PacketFilter::new(); // iterate over packet_inspector::STD_PACKETS - for p in &packet_inspector::STD_PACKETS { + for p in packet_inspector::STD_PACKETS.iter() { // if the packet is in the current packet_filter if let Some(v) = self.packet_filter.get(p) { // insert it into packet_filter @@ -126,7 +126,7 @@ impl SharedState { self } - pub(crate) fn send_event(&self, event: Event) { + pub fn send_event(&self, event: Event) { if let Some(sender) = &self.sender { sender.send(event); } diff --git a/tools/packet-inspector/src/tri_checkbox.rs b/vendor/valence/tools/packet_inspector/src/tri_checkbox.rs similarity index 81% rename from tools/packet-inspector/src/tri_checkbox.rs rename to vendor/valence/tools/packet_inspector/src/tri_checkbox.rs index 593e789e..df9fbf08 100644 --- a/tools/packet-inspector/src/tri_checkbox.rs +++ b/vendor/valence/tools/packet_inspector/src/tri_checkbox.rs @@ -1,9 +1,9 @@ use egui::{ - NumExt, Response, Sense, Shape, StrokeKind, TextStyle, Ui, Vec2, Widget, WidgetInfo, - WidgetText, WidgetType, epaint, pos2, vec2, + epaint, pos2, vec2, NumExt, Response, Sense, Shape, TextStyle, Ui, Vec2, Widget, WidgetInfo, + WidgetText, WidgetType, }; -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, PartialEq)] pub enum TriCheckboxState { Enabled, Partial, @@ -31,19 +31,19 @@ pub struct TriCheckbox<'a> { #[allow(unused)] impl<'a> TriCheckbox<'a> { - pub(crate) fn new(checked: &'a mut TriCheckboxState, text: impl Into) -> Self { + pub fn new(checked: &'a mut TriCheckboxState, text: impl Into) -> Self { TriCheckbox { checked, text: text.into(), } } - pub(crate) fn without_text(checked: &'a mut TriCheckboxState) -> Self { + pub fn without_text(checked: &'a mut TriCheckboxState) -> Self { Self::new(checked, WidgetText::default()) } } -impl Widget for TriCheckbox<'_> { +impl<'a> Widget for TriCheckbox<'a> { fn ui(self, ui: &mut Ui) -> Response { let TriCheckbox { checked, text } = self; @@ -80,7 +80,6 @@ impl Widget for TriCheckbox<'_> { WidgetInfo::selected( WidgetType::Checkbox, *checked == TriCheckboxState::Enabled, - false, text.as_ref().map_or("", |x| x.text()), ) }); @@ -90,13 +89,12 @@ impl Widget for TriCheckbox<'_> { // let visuals = ui.style().interact_selectable(&response, *checked); let visuals = ui.style().interact(&response); let (small_icon_rect, big_icon_rect) = ui.spacing().icon_rectangles(rect); - ui.painter().add(epaint::RectShape::new( - big_icon_rect.expand(visuals.expansion), - visuals.corner_radius, - visuals.bg_fill, - visuals.bg_stroke, - StrokeKind::Inside, - )); + ui.painter().add(epaint::RectShape { + rect: big_icon_rect.expand(visuals.expansion), + rounding: visuals.rounding, + fill: visuals.bg_fill, + stroke: visuals.bg_stroke, + }); match *checked { TriCheckboxState::Enabled => { @@ -120,15 +118,14 @@ impl Widget for TriCheckbox<'_> { visuals.fg_stroke, )); } - TriCheckboxState::Disabled => {} + _ => {} } if let Some(text) = text { let text_pos = pos2( rect.min.x + icon_width + icon_spacing, - 0.5f32.mul_add(-text.size().y, rect.center().y), + rect.center().y - 0.5 * text.size().y, ); - - ui.painter().galley(text_pos, text, visuals.text_color()); + text.paint_with_visuals(ui.painter(), text_pos, visuals); } } diff --git a/vendor/valence/tools/playground/Cargo.toml b/vendor/valence/tools/playground/Cargo.toml new file mode 100644 index 00000000..16166f0f --- /dev/null +++ b/vendor/valence/tools/playground/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "playground" +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true +publish = false + +[dependencies] +anyhow.workspace = true +clap.workspace = true +valence_math.workspace = true +tracing-subscriber.workspace = true +tracing.workspace = true +valence_server_common.workspace = true +valence.workspace = true \ No newline at end of file diff --git a/vendor/valence/tools/playground/README.md b/vendor/valence/tools/playground/README.md new file mode 100644 index 00000000..c6ba5b15 --- /dev/null +++ b/vendor/valence/tools/playground/README.md @@ -0,0 +1,3 @@ +# playground + +An environment for testing code or reproducing bugs. Checkout out CONTRIBUTING.md for more information. \ No newline at end of file diff --git a/vendor/valence/tools/playground/build.rs b/vendor/valence/tools/playground/build.rs new file mode 100644 index 00000000..4f75cfb8 --- /dev/null +++ b/vendor/valence/tools/playground/build.rs @@ -0,0 +1,21 @@ +use std::path::Path; + +fn main() { + let current = std::env::current_dir().unwrap(); + println!("current directory: {}", current.display()); + + let src = current.join(Path::new("src/playground.template.rs")); + let dst = current.join(Path::new("src/playground.rs")); + + if dst.exists() { + println!("{dst:?} already exists, skipping"); + return; + } + + if !src.exists() { + println!("{src:?} does not exist, skipping"); + return; + } + + std::fs::copy(src, dst).unwrap(); +} diff --git a/vendor/valence/tools/playground/src/.gitignore b/vendor/valence/tools/playground/src/.gitignore new file mode 100644 index 00000000..68aefd1e --- /dev/null +++ b/vendor/valence/tools/playground/src/.gitignore @@ -0,0 +1 @@ +playground.rs \ No newline at end of file diff --git a/vendor/valence/tools/playground/src/extras.rs b/vendor/valence/tools/playground/src/extras.rs new file mode 100644 index 00000000..fe4071e9 --- /dev/null +++ b/vendor/valence/tools/playground/src/extras.rs @@ -0,0 +1,23 @@ +//! Put stuff in here if you find that you have to write the same code for +//! multiple playgrounds. + +use valence::prelude::*; + +/// Toggles client's game mode between survival and creative when they start +/// sneaking. +pub fn toggle_gamemode_on_sneak( + mut clients: Query<&mut GameMode>, + mut events: EventReader, +) { + for event in events.read() { + if event.state == SneakState::Start { + if let Ok(mut mode) = clients.get_mut(event.client) { + *mode = match *mode { + GameMode::Survival => GameMode::Creative, + GameMode::Creative => GameMode::Survival, + _ => GameMode::Creative, + }; + } + } + } +} diff --git a/vendor/valence/tools/playground/src/main.rs b/vendor/valence/tools/playground/src/main.rs new file mode 100644 index 00000000..d5301cbc --- /dev/null +++ b/vendor/valence/tools/playground/src/main.rs @@ -0,0 +1,47 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + clippy::dbg_macro +)] + +use clap::Parser; +use tracing::Level; +use valence::app::App; +use valence::log::LogPlugin; + +#[allow(dead_code)] +mod extras; +mod playground; + +#[derive(Parser)] +struct Args { + #[arg(short, default_value_t = Level::DEBUG)] + log_level: Level, +} + +fn main() { + let args = Args::parse(); + + let mut app = App::new(); + + app.add_plugins(LogPlugin { + level: args.log_level, + ..Default::default() + }); + + playground::build_app(&mut app); + + app.run(); +} diff --git a/vendor/valence/tools/playground/src/playground.template.rs b/vendor/valence/tools/playground/src/playground.template.rs new file mode 100644 index 00000000..01476ed5 --- /dev/null +++ b/vendor/valence/tools/playground/src/playground.template.rs @@ -0,0 +1,77 @@ +use valence::log::LogPlugin; +use valence::prelude::*; + +#[allow(unused_imports)] +use crate::extras::*; + +const SPAWN_Y: i32 = 64; + +pub fn build_app(app: &mut App) { + app.insert_resource(NetworkSettings { + connection_mode: ConnectionMode::Offline, + ..Default::default() + }) + .add_plugins(DefaultPlugins.build().disable::()) + .add_systems(Startup, setup) + .add_systems(EventLoopUpdate, toggle_gamemode_on_sneak) + .add_systems(Update, (init_clients, despawn_disconnected_clients)) + .run(); +} + +fn setup( + mut commands: Commands, + server: Res, + biomes: Res, + dimensions: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + for z in -25..25 { + for x in -25..25 { + layer + .chunk + .set_block([x, SPAWN_Y, z], BlockState::GRASS_BLOCK); + } + } + + commands.spawn(layer); +} + +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.0.insert(layer); + pos.set([0.0, SPAWN_Y as f64 + 1.0, 0.0]); + *game_mode = GameMode::Creative; + } +} + +// Add more systems here! diff --git a/vendor/valence/tools/stresser/Cargo.toml b/vendor/valence/tools/stresser/Cargo.toml new file mode 100644 index 00000000..60ec3ffe --- /dev/null +++ b/vendor/valence/tools/stresser/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "stresser" +description = "A stresser for Valence Minecraft server framework development purposes" +authors = ["qualterz "] +version.workspace = true +edition.workspace = true +repository.workspace = true +documentation.workspace = true +license.workspace = true +publish = false + +[dependencies] +anyhow.workspace = true +clap.workspace = true +tokio.workspace = true +uuid = { workspace = true, features = ["v4"] } +valence_protocol.workspace = true diff --git a/vendor/valence/tools/stresser/README.md b/vendor/valence/tools/stresser/README.md new file mode 100644 index 00000000..372db154 --- /dev/null +++ b/vendor/valence/tools/stresser/README.md @@ -0,0 +1,13 @@ +# stresser + +A Minecraft client for testing server performance under heavy load. (Incomplete) + +## Usage + +``` +# Run the example in valence +cargo run --example bench_players + +# Run the stressor tool in tools/stresser +cargo run -p stresser -- --target 127.0.0.1:25565 --count 1000 +``` \ No newline at end of file diff --git a/vendor/valence/tools/stresser/src/args.rs b/vendor/valence/tools/stresser/src/args.rs new file mode 100644 index 00000000..e7e33d7d --- /dev/null +++ b/vendor/valence/tools/stresser/src/args.rs @@ -0,0 +1,29 @@ +use clap::{arg, command, Parser}; + +#[derive(Parser)] +#[command(author, version, about)] +pub(crate) struct StresserArgs { + /// IPv4/IPv6/DNS address of a server. + #[arg(short = 't', long = "target")] + pub target_host: String, + + /// Number of sessions. + #[arg(short = 'c', long = "count")] + pub sessions_count: usize, + + /// Name prefix of sessions. + #[arg(default_value = "Stresser")] + #[arg(short = 'n', long = "name")] + pub name_prefix: String, + + /// Spawn cooldown of sessions in milliseconds. + /// The lower the value, the more frequently sessions are spawned. + #[arg(default_value = "10")] + #[arg(long = "cooldown")] + pub spawn_cooldown: u64, + + /// Read buffer size in bytes. + #[arg(default_value = "4096")] + #[arg(long = "read-buffer")] + pub read_buffer_size: usize, +} diff --git a/vendor/valence/tools/stresser/src/main.rs b/vendor/valence/tools/stresser/src/main.rs new file mode 100644 index 00000000..91cf49c2 --- /dev/null +++ b/vendor/valence/tools/stresser/src/main.rs @@ -0,0 +1,62 @@ +#![doc = include_str!("../README.md")] +#![deny( + rustdoc::broken_intra_doc_links, + rustdoc::private_intra_doc_links, + rustdoc::missing_crate_level_docs, + rustdoc::invalid_codeblock_attributes, + rustdoc::invalid_rust_codeblocks, + rustdoc::bare_urls, + rustdoc::invalid_html_tags +)] +#![warn( + trivial_casts, + trivial_numeric_casts, + unused_lifetimes, + unused_import_braces, + clippy::dbg_macro +)] + +use core::time::Duration; +use std::net::ToSocketAddrs; +use std::sync::Arc; + +use args::StresserArgs; +use clap::Parser; +use stresser::{make_session, SessionParams}; +use tokio::sync::Semaphore; + +mod args; +pub mod stresser; + +#[tokio::main] +async fn main() { + let args = StresserArgs::parse(); + + let target_addr = args.target_host.to_socket_addrs().unwrap().next().unwrap(); + + let mut session_index: usize = 0; + + let sema = Arc::new(Semaphore::new(args.sessions_count)); + + while let Ok(perm) = sema.clone().acquire_owned().await { + let session_name = format!("{}{}", args.name_prefix, session_index); + + tokio::spawn(async move { + let params = SessionParams { + socket_addr: target_addr, + session_name: session_name.as_str(), + read_buffer_size: args.read_buffer_size, + }; + + if let Err(err) = make_session(¶ms).await { + eprintln!("Session {session_name} interrupted with error: {err}") + }; + + drop(perm); + }); + + session_index += 1; + + tokio::time::sleep(Duration::from_millis(args.spawn_cooldown)).await; + } +} diff --git a/vendor/valence/tools/stresser/src/stresser.rs b/vendor/valence/tools/stresser/src/stresser.rs new file mode 100644 index 00000000..13181a53 --- /dev/null +++ b/vendor/valence/tools/stresser/src/stresser.rs @@ -0,0 +1,153 @@ +use std::io::{self, ErrorKind}; +use std::net::SocketAddr; + +use anyhow::bail; +use tokio::io::AsyncWriteExt; +use tokio::net::TcpStream; +use uuid::Uuid; +use valence_protocol::packets::handshaking::handshake_c2s::HandshakeNextState; +use valence_protocol::packets::handshaking::HandshakeC2s; +use valence_protocol::packets::login::{ + LoginCompressionS2c, LoginHelloC2s, LoginHelloS2c, LoginSuccessS2c, +}; +use valence_protocol::packets::play::{ + KeepAliveC2s, KeepAliveS2c, PlayerPositionLookS2c, PositionAndOnGroundC2s, TeleportConfirmC2s, +}; +use valence_protocol::var_int::VarInt; +use valence_protocol::{ + CompressionThreshold, Packet, PacketDecoder, PacketEncoder, PROTOCOL_VERSION, +}; + +pub struct SessionParams<'a> { + pub socket_addr: SocketAddr, + pub session_name: &'a str, + pub read_buffer_size: usize, +} + +pub async fn make_session<'a>(params: &SessionParams<'a>) -> anyhow::Result<()> { + let sock_addr = params.socket_addr; + let sess_name = params.session_name; + let rb_size = params.read_buffer_size; + + let mut conn = match TcpStream::connect(sock_addr).await { + Ok(conn) => { + println!("{sess_name} connected"); + conn + } + Err(err) => { + eprintln!("{sess_name} connection failed"); + return Err(err.into()); + } + }; + + conn.set_nodelay(true)?; + + let mut dec = PacketDecoder::new(); + let mut enc = PacketEncoder::new(); + + let server_addr_str = sock_addr.ip().to_string(); + + let handshake_pkt = HandshakeC2s { + protocol_version: VarInt(PROTOCOL_VERSION), + server_address: server_addr_str.as_str().into(), + server_port: sock_addr.port(), + next_state: HandshakeNextState::Login, + }; + + enc.append_packet(&handshake_pkt)?; + + enc.append_packet(&LoginHelloC2s { + username: sess_name.into(), + profile_id: Some(Uuid::new_v4()), + })?; + + let write_buf = enc.take(); + conn.write_all(&write_buf).await?; + + loop { + dec.reserve(rb_size); + + let mut read_buf = dec.take_capacity(); + + conn.readable().await?; + + match conn.try_read_buf(&mut read_buf) { + Ok(0) => return Err(io::Error::from(ErrorKind::UnexpectedEof).into()), + Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => continue, + Err(e) => return Err(e.into()), + Ok(_) => (), + }; + + dec.queue_bytes(read_buf); + + if let Ok(Some(frame)) = dec.try_next_packet() { + match frame.id { + LoginCompressionS2c::ID => { + let packet: LoginCompressionS2c = frame.decode()?; + let threshold = packet.threshold.0; + + dec.set_compression(CompressionThreshold(threshold)); + enc.set_compression(CompressionThreshold(threshold)); + } + + LoginSuccessS2c::ID => { + break; + } + + LoginHelloS2c::ID => { + bail!("encryption not implemented"); + } + + _ => (), + } + } + } + + println!("{sess_name} logged in"); + + loop { + while let Some(frame) = dec.try_next_packet()? { + match frame.id { + KeepAliveS2c::ID => { + let packet: KeepAliveS2c = frame.decode()?; + enc.clear(); + + enc.append_packet(&KeepAliveC2s { id: packet.id })?; + conn.write_all(&enc.take()).await?; + } + + PlayerPositionLookS2c::ID => { + let packet: PlayerPositionLookS2c = frame.decode()?; + enc.clear(); + + enc.append_packet(&TeleportConfirmC2s { + teleport_id: packet.teleport_id, + })?; + + enc.append_packet(&PositionAndOnGroundC2s { + position: packet.position, + on_ground: true, + })?; + + conn.write_all(&enc.take()).await?; + } + _ => (), + } + } + + dec.reserve(rb_size); + + let mut read_buf = dec.take_capacity(); + + conn.readable().await?; + + match conn.try_read_buf(&mut read_buf) { + Ok(0) => return Err(io::Error::from(ErrorKind::UnexpectedEof).into()), + Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => continue, + Err(e) => return Err(e.into()), + Ok(_) => (), + }; + + dec.queue_bytes(read_buf); + } +} diff --git a/vendor/valence/typos.toml b/vendor/valence/typos.toml new file mode 100644 index 00000000..ad9370a6 --- /dev/null +++ b/vendor/valence/typos.toml @@ -0,0 +1,5 @@ +[files] +extend-exclude = ["*.svg", "*.json", "crates/java_string/src/slice.rs"] + +[default] +extend-ignore-re = ['\d+ths', 'CC BY-NC-ND', "trUe", "fAlse"] diff --git a/vendor/valence/website/.gitignore b/vendor/valence/website/.gitignore new file mode 100644 index 00000000..a48cf0de --- /dev/null +++ b/vendor/valence/website/.gitignore @@ -0,0 +1 @@ +public diff --git a/vendor/valence/website/README.md b/vendor/valence/website/README.md new file mode 100644 index 00000000..cb3531da --- /dev/null +++ b/vendor/valence/website/README.md @@ -0,0 +1,44 @@ +# Valence.rs + +This website is built using the Static Site Generator [Zola](https://github.com/getzola/zola). +The theme is derived from https://github.com/huhu/juice. + +All colors can be edited in `templates/_variables.html`. + +## Building + +The entire page including the [mdbook](https://github.com/rust-lang/mdBook) and the nightly RustDoc can be built using `./build.sh`. The contents will be output in `./public`. + +## Testing + +To test the website locally you can execute `./build.sh` and serve the contents through +``` +$ python -m http.server -d public +``` +or any other similar http server. + +To test on GitHub pages: +1. Change the source for Pages deployments in the Repository Settings > Pages to GitHub Actions. +2. This step is only needed if you don't put a custom domain in front of Pages: Change the `base_url` in `./config.toml` to `//` as GitHub Pages deployments for repositories aren't available at `/`. +3. Push to main or manually start the workflow in the Actions-tab on GitHub. + +## Deployment + +The deployment process is stated above in the Testing-section. + +## Contribute Content to the Site + +### Contribute to the FAQ / News + +All contents are made in plain Markdown defined by [CommonMark](https://commonmark.org/). +A new FAQ / News entry can be added by simply creating a new Heading in `./content/faq.md` or `./content/news.md` respectively. + +This can be tested locally by using `zola serve`. + +### Contribute to the book + +The book is made using mdbook and the source file lay in `./book/`. +See the [official documentation](https://rust-lang.github.io/mdBook/format/index.html) for how to create new pages. + +This can be tested locally by using `mdbook serve`. + diff --git a/vendor/valence/website/book.toml b/vendor/valence/website/book.toml new file mode 100644 index 00000000..ac722a37 --- /dev/null +++ b/vendor/valence/website/book.toml @@ -0,0 +1,8 @@ +[book] +language = "en" +multilingual = false +src = "book" +title = "Valence Documentation" + +[build] +build-dir = "public/book" diff --git a/vendor/valence/website/book/1-getting-started/setup.md b/vendor/valence/website/book/1-getting-started/setup.md new file mode 100644 index 00000000..ea0758c4 --- /dev/null +++ b/vendor/valence/website/book/1-getting-started/setup.md @@ -0,0 +1,118 @@ +# Before You Start + +We recommend you get familiar with Bevy's Entity Component System architecture and API, as Valence uses the exact same crate for its ECS. You can find [Bevy's introduction to ECS here](https://bevyengine.org/learn/book/getting-started/ecs/). + +You should also download Minecraft, obviously. You can use any launcher you'd like, but we recommend using the [Prism Launcher](https://prismlauncher.org/) as it will let you run offline mode clients a bit easier. + +# Getting Started + +The first thing you'll need to do is create a new binary Rust project. You can do this by running `cargo new --bin my_project` in your terminal. Once you've done that, you'll need to add Valence as a dependency: + +```bash +cargo add valence +``` + +Next, you'll need to set up a new `App` in `main()`. This is the bare minimum you need to get a Valence app running. + +```rust +use valence::prelude::*; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .run(); +} +``` + +If you run this and try to join the server, you'll see "Joining world..." and then... nothing. It just sits there. That's because we need to tell the client what position to spawn at. Let's fix that. + +# Hello World + +Let's add a startup system that will put a single block under the spawn position. There's gonna be a lot of new stuff here, but don't worry, we'll briefly touch on most of it. + +Chunk Layers are the way Valence handles worlds. A client can only view a single chunk layer at a time. So the first thing we need to do is create a new pair of chunk and entity layers (`LayerBundle`), add some chunks to it, and then set our desired block in the world. + +```rust +fn setup( + mut commands: Commands, + server: Res, + biomes: Res, + dimensions: Res, +) { + let mut layer = LayerBundle::new(ident!("overworld"), &dimensions, &biomes, &server); + + // We have to add chunks to the world first, they start empty. + for z in -5..5 { + for x in -5..5 { + layer.chunk.insert_chunk([x, z], UnloadedChunk::new()); + } + } + + // This actually sets the block in the world. + layer + .chunk + .set_block([0, 64, 0], BlockState::GRASS_BLOCK); + + // This spawns the layer into the world. + commands.spawn(layer); +} +``` + +Now we need to handle clients when they join the server. Valence automatically spawns a new entity for each client that joins the server, we just need to add a system detects when clients are added. + +```rust +fn init_clients( + mut clients: Query< + ( + &mut EntityLayerId, + &mut VisibleChunkLayer, + &mut VisibleEntityLayers, + &mut Position, + &mut GameMode, + ), + Added, + >, + layers: Query, With)>, +) { + for ( + mut layer_id, + mut visible_chunk_layer, + mut visible_entity_layers, + mut pos, + mut game_mode, + ) in &mut clients + { + let layer = layers.single(); + + layer_id.0 = layer; + visible_chunk_layer.0 = layer; + visible_entity_layers.insert(layer); + pos.set([0.5, 65.0, 0.5]); + *game_mode = GameMode::Creative; + } +} +``` + +So what's going on here? Similar to chunk layers, there are also entity layers. However, unlike chunk layers, a client can view any number of entity layers. These can be used to show different entities to different clients. + +So from top to bottom this code does the following: + +1. Sets the client's _player entity_ to the layer we created in `setup()`. This makes the player visible to other clients viewing this layer. +2. Sets the client's visible chunk layer to the layer we created in `setup()`. +3. Sets the client's visible entity layers to include the layer we created in `setup()`. +4. Sets the client's position to the spawn position. +5. Sets the client's game mode to creative. + +Finally, we'll need to add these systems to our `App`: + +```rust +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(Update, init_clients) + .run(); +} +``` + +That's it! You should now be able to run your server and join it from Minecraft. You should see a single grass block under your feet, and be able to move around and jump. diff --git a/vendor/valence/website/book/SUMMARY.md b/vendor/valence/website/book/SUMMARY.md new file mode 100644 index 00000000..a72f6fd9 --- /dev/null +++ b/vendor/valence/website/book/SUMMARY.md @@ -0,0 +1,7 @@ +# Summary + +- [Introduction](introduction.md) +- [Getting Started](1-getting-started/setup.md) + +# Developer Guide + diff --git a/vendor/valence/website/book/introduction.md b/vendor/valence/website/book/introduction.md new file mode 100644 index 00000000..e10b99d0 --- /dev/null +++ b/vendor/valence/website/book/introduction.md @@ -0,0 +1 @@ +# Introduction diff --git a/vendor/valence/website/build.sh b/vendor/valence/website/build.sh new file mode 100755 index 00000000..802f84d4 --- /dev/null +++ b/vendor/valence/website/build.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env sh + +# This script builds the website and outputs ready-to-serve contents in ./public/ +# +# Requirements: +# - zola https://www.getzola.org/documentation/getting-started/installation/ +# - cargo https://doc.rust-lang.org/cargo/getting-started/installation.html +# - mdBook https://rust-lang.github.io/mdBook/guide/installation.html + +set -eu + +# cd into this directory +cd "$(dirname "$0")" + +# clean the ./public directory +rm -rf public/* + +# build zola +zola build + +# build mdBook +mdbook build + +# build rustdoc +mkdir public/rustdoc +RUSTDOCFLAGS='--cfg unstable_doc' cargo doc --no-deps --workspace --all-features +cp -r ../target/doc/* public/rustdoc + +# copy logo assets +cp ../assets/logo.svg public/valence.svg diff --git a/vendor/valence/website/config.toml b/vendor/valence/website/config.toml new file mode 100644 index 00000000..5a2d09df --- /dev/null +++ b/vendor/valence/website/config.toml @@ -0,0 +1,29 @@ +# The URL the site will be built for +base_url = "/" + +title = "Valence - A Minecraft server framework" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# When set to "true", the generated HTML files are minified. +minify_html = true + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true + +# The theme to use for code highlighting. +highlight_theme = "css" +highlight_themes_css = [{ theme = "one-dark", filename = "syntax-theme.css" }] + +[extra] +juice_extra_menu = [ + { title = "Discord", link = "https://discord.gg/8Fqqy9XrYb" }, + { title = "GitHub", link = "https://github.com/valence-rs/valence" }, +] + +juice_logo_name = "Valence" +juice_logo_path = "valence.svg" +repository_url = "https://github.com/valence-rs/valence" diff --git a/vendor/valence/website/content/_index.md b/vendor/valence/website/content/_index.md new file mode 100644 index 00000000..daf8f0e4 --- /dev/null +++ b/vendor/valence/website/content/_index.md @@ -0,0 +1,5 @@ ++++ +title = "Valence" +sort_by = "weight" ++++ + diff --git a/vendor/valence/website/content/faq.md b/vendor/valence/website/content/faq.md new file mode 100644 index 00000000..793b96f8 --- /dev/null +++ b/vendor/valence/website/content/faq.md @@ -0,0 +1,13 @@ ++++ +title = "FAQ" +description = "Frequently Asked Questions" +weight = 4 ++++ + +# Can I use Valence as a replacement for a Vanilla Minecraft Server? + +No. + +Valence is a Minecraft server *framework*. The goal of Valence is to provide a platform for developers to build custom Minecraft servers. **Valence, on its own, is not a direct replacement for a Vanilla Minecraft server.** However, it should be flexible enough to build a Vanilla Minecraft server on top of it. You just have to implement the game logic yourself. + +Valence is best suited for building minigame servers that can handle large amounts of players. It intentionally implements the least amount of Vanilla Minecraft so that you can appropriately override and customize the logic. diff --git a/vendor/valence/website/content/news.md b/vendor/valence/website/content/news.md new file mode 100644 index 00000000..70a62f4e --- /dev/null +++ b/vendor/valence/website/content/news.md @@ -0,0 +1,6 @@ ++++ +title = "News" +description = "News" +weight = 5 ++++ + diff --git a/vendor/valence/website/sass/_markdown.scss b/vendor/valence/website/sass/_markdown.scss new file mode 100644 index 00000000..8b02f46f --- /dev/null +++ b/vendor/valence/website/sass/_markdown.scss @@ -0,0 +1,45 @@ +.content { + padding: 0 40px; + display: flex; + flex-direction: column; + overflow-x: auto; +} + +.content pre { + overflow-x: auto; + padding: .6rem .75rem; + white-space: pre; + word-wrap: normal; + background-color: var(--code-background-color); + color: var(--code-color); + font-size: .875em; + font-family: monospace; +} + +.content code { + background-color: var(--code-background-color); + color: var(--code-color); + font-size: .875em; + font-weight: normal; + padding: 0.25em 0.5em; + font-family: monospace; +} + +.content pre code { + padding: 0; +} + +.content a { + color: var(--primary-link-color); + + &:hover { + text-decoration: underline; + } +} + +.content blockquote { + border-left: #e2dede 8px solid; + margin: 0; + background-color: #f2f1f0; + padding: 0 20px; +} diff --git a/vendor/valence/website/sass/_text.scss b/vendor/valence/website/sass/_text.scss new file mode 100644 index 00000000..d63a3778 --- /dev/null +++ b/vendor/valence/website/sass/_text.scss @@ -0,0 +1,40 @@ +.heading-text { + font-family: var(--header-font-family); + font-size: 32px; + font-weight: 600; + padding: 10px 0 10px 0; + margin: 0.5rem 0; + color: var(--primary-text-color); +} + +h1, .title-text { + font-family: var(--header-font-family); + font-size: 25px; + font-weight: 500; + color: var(--primary-text-color); + border-left: var(--primary-color) 8px solid; + padding-left: 10px; +} + +h2, .subtitle-text { + font-family: var(--header-font-family); + font-size: 20px; + font-weight: 500; + color: var(--primary-text-color); +} + +.text { + font-family: var(--text-font-family); + font-size: 18px; + font-weight: 400; + line-height: 26px; + letter-spacing: 0.2px; + color: var(--primary-text-color); +} + +.subtext { + font-family: var(--text-font-family); + font-size: 16px; + font-weight: 400; + letter-spacing: 0.1px; +} diff --git a/vendor/valence/website/sass/_ultility.scss b/vendor/valence/website/sass/_ultility.scss new file mode 100644 index 00000000..59b76e9a --- /dev/null +++ b/vendor/valence/website/sass/_ultility.scss @@ -0,0 +1,13 @@ +.text-center { + text-align: center; +} + +.pos-absolute { + right: 0; + left: 0; + position: absolute; +} + +.box-shadow { + box-shadow: 0 2px 10px 2px var(--shadow-color); +} diff --git a/vendor/valence/website/sass/juice.scss b/vendor/valence/website/sass/juice.scss new file mode 100644 index 00000000..90e76e9e --- /dev/null +++ b/vendor/valence/website/sass/juice.scss @@ -0,0 +1,217 @@ +@import "_ultility.scss"; +@import "_text.scss"; +@import "_markdown.scss"; + +body { + padding: 0; + margin: 0; + box-sizing: border-box; + background-color: var(--secondary-color); + display: flex; + flex-direction: column; + min-height: 100vh; +} + +a { + text-decoration: none; +} + +ul { + margin-top: 0.5rem; +} + +ul > li { + padding: 0.3rem 0; +} + +p > img { + width: 100%; + height: auto; +} + +header { + background-color: var(--primary-color); + color: var(--primary-text-color); + padding: 20px 50px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.logo { + font-family: "Alfa Slab One", serif; + font-size: 32px; + color: var(--primary-text-color); + display: flex; + align-items: center; + margin: 0 40px; + + img { + width: 60px; + margin: 0 25px; + } +} + +.nav-item { + margin: 0 10px; + text-decoration: none; + font-size: 20px; + font-weight: bold; + + &:hover { + color: var(--primary-text-color-over); + text-decoration: underline; + } +} + +.hero { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-evenly; + background-color: var(--primary-color); + padding: 3rem 40px; + position: relative; + overflow: hidden; + height: 100%; + + .explore-more { + position: absolute; + bottom: 20px; + cursor: pointer; + } +} + + // only apply this when the screen is small + @media screen and (min-width: 1300px) { + .hero { + flex-wrap: nowrap + } +} + +.hero-code { + position: relative; +} + +main { + display: flex; + padding: 50px 100px; + flex-grow: 1; + + .toc { + max-width: 260px; + min-width: 240px; + } + + .toc-item { + padding: 10px 20px; + color: #424242; + } + + .toc-item a, + .toc-item-child a { + color: var(--secondary-text-color); + + &:hover { + cursor: pointer; + text-decoration: underline; + } + } + + .toc-item a.active, + .toc-item-child a.active { + color: var(--toc-highlight-text-color); + } + + .toc-item-child { + padding: 0 30px 5px; + color: #424242; + } +} + +.toc-sticky { + border-radius: 3px; + border-top: 5px solid var(--primary-color); + background-color: var(--toc-background-color); + position: sticky; + position: -webkit-sticky; + position: -moz-sticky; + position: -ms-sticky; + position: -o-sticky; + top: 10px; + padding: 10px 0 20px; + max-height: 100vh; + overflow: auto; +} + +footer { + padding: 50px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex-wrap: wrap; + background-color: var(--primary-color); + color: var(--primary-text-color); + text-align: center; + line-height: 1.5; + white-space: pre-wrap; + + a { + color: #fcfcfc; + text-decoration: underline; + } +} + +footer > small * { + margin: auto 1rem; + display: inline-block; +} + +@media screen and (min-width: 1280px) { + .content { + max-width: 60%; + min-width: 800px; + } +} + +@media screen and (max-width: 768px) { + header { + padding: 10px 30px; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .logo { + font-size: 28px; + margin: 10px; + + img { + width: 45px; + margin: 0 10px 0 0; + } + } + + .nav-item { + margin: 0 5px; + font-size: 14px; + } + + .hero { + padding: 40px 30px; + } + + main { + padding: 30px; + } + + .content { + padding: 0; + } + + .explore-more, + .toc { + display: none; + } +} diff --git a/vendor/valence/website/static/favicon.ico b/vendor/valence/website/static/favicon.ico new file mode 100644 index 00000000..ed277121 Binary files /dev/null and b/vendor/valence/website/static/favicon.ico differ diff --git a/vendor/valence/website/static/normalize.css b/vendor/valence/website/static/normalize.css new file mode 100644 index 00000000..192eb9ce --- /dev/null +++ b/vendor/valence/website/static/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/vendor/valence/website/static/prism.css b/vendor/valence/website/static/prism.css new file mode 100644 index 00000000..b7aed0ec --- /dev/null +++ b/vendor/valence/website/static/prism.css @@ -0,0 +1,187 @@ +/* +Name: Duotone Dark +Author: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duotone-themes) + +Conversion: Bram de Haan (http://atelierbram.github.io/Base2Tone-prism/output/prism/prism-base2tone-evening-dark.css) +Generated with Base16 Builder (https://github.com/base16-builder/base16-builder) +*/ + +code[class*="language-"], +pre[class*="language-"] { + font-family: "JetBrains Mono", Consolas, Menlo, Monaco, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", Courier, monospace; + font-size: 1.175rem; + line-height: 1.375; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + background: #18202D; + color: #9a86fd; + max-width: 80vw; + overflow: scroll; +} + +pre > code[class*="language-"] { + font-size: 1em; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #6a51e6; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #6a51e6; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1rem; + border-radius: 10px; + margin: .5em 0; + overflow: auto; +} + +pre[data-file]::before { + content: attr(data-file); + color: gray; + line-height: 1; + text-align: center; + font-size: 1rem; + margin-bottom: 0.4rem; + position: absolute; + left: 50%; + transform: translateX(-50%); +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #6c6783; +} + +.token.punctuation { + color: #6c6783; +} + +.token.namespace { + opacity: .7; +} + +.token.tag, +.token.operator, +.token.number { + color: #e09142; +} + +.token.property, +.token.function { + color: #9a86fd; +} + +.token.tag-id, +.token.selector, +.token.atrule-id { + color: #eeebff; +} + +code.language-javascript, +.token.attr-name { + color: #c4b9fe; +} + +code.language-css, +code.language-scss, +.token.boolean, +.token.string, +.token.entity, +.token.url, +.language-css .token.string, +.language-scss .token.string, +.style .token.string, +.token.attr-value, +.token.keyword, +.token.control, +.token.directive, +.token.unit, +.token.statement, +.token.regex, +.token.atrule { + color: #ffcc99; +} + +.token.placeholder, +.token.variable { + color: #ffcc99; +} + +.token.deleted { + text-decoration: line-through; +} + +.token.inserted { + border-bottom: 1px dotted #eeebff; + text-decoration: none; +} + +.token.italic { + font-style: italic; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.important { + color: #c4b9fe; +} + +.token.entity { + cursor: help; +} + +pre > code.highlight { + outline: .4em solid #8a75f5; + outline-offset: .4em; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right-color: #2c2937; +} + +.line-numbers .line-numbers-rows > span:before { + color: #3c3949; +} + +/* overrides color-values for the Line Highlight plugin +* http://prismjs.com/plugins/line-highlight/ +*/ +.line-highlight.line-highlight { + background: rgba(224, 145, 66, 0.2); + background: -webkit-linear-gradient(left, rgba(224, 145, 66, 0.2) 70%, rgba(224, 145, 66, 0)); + background: linear-gradient(to right, rgba(224, 145, 66, 0.2) 70%, rgba(224, 145, 66, 0)); +} diff --git a/vendor/valence/website/static/prism.js b/vendor/valence/website/static/prism.js new file mode 100644 index 00000000..d13b80cf --- /dev/null +++ b/vendor/valence/website/static/prism.js @@ -0,0 +1,256 @@ +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=rust&plugins=line-numbers */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,(function(){return a}));a=a.replace(//g,(function(){return"[^\\s\\S]"})),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); +(function () { + + if (typeof Prism === 'undefined' || typeof document === 'undefined') { + return; + } + + /** + * Plugin name which is used as a class name for

 which is activating the plugin
+	 *
+	 * @type {string}
+	 */
+	var PLUGIN_NAME = 'line-numbers';
+
+	/**
+	 * Regular expression used for determining line breaks
+	 *
+	 * @type {RegExp}
+	 */
+	var NEW_LINE_EXP = /\n(?!$)/g;
+
+
+	/**
+	 * Global exports
+	 */
+	var config = Prism.plugins.lineNumbers = {
+		/**
+		 * Get node for provided line number
+		 *
+		 * @param {Element} element pre element
+		 * @param {number} number line number
+		 * @returns {Element|undefined}
+		 */
+		getLine: function (element, number) {
+			if (element.tagName !== 'PRE' || !element.classList.contains(PLUGIN_NAME)) {
+				return;
+			}
+
+			var lineNumberRows = element.querySelector('.line-numbers-rows');
+			if (!lineNumberRows) {
+				return;
+			}
+			var lineNumberStart = parseInt(element.getAttribute('data-start'), 10) || 1;
+			var lineNumberEnd = lineNumberStart + (lineNumberRows.children.length - 1);
+
+			if (number < lineNumberStart) {
+				number = lineNumberStart;
+			}
+			if (number > lineNumberEnd) {
+				number = lineNumberEnd;
+			}
+
+			var lineIndex = number - lineNumberStart;
+
+			return lineNumberRows.children[lineIndex];
+		},
+
+		/**
+		 * Resizes the line numbers of the given element.
+		 *
+		 * This function will not add line numbers. It will only resize existing ones.
+		 *
+		 * @param {HTMLElement} element A `
` element with line numbers.
+		 * @returns {void}
+		 */
+		resize: function (element) {
+			resizeElements([element]);
+		},
+
+		/**
+		 * Whether the plugin can assume that the units font sizes and margins are not depended on the size of
+		 * the current viewport.
+		 *
+		 * Setting this to `true` will allow the plugin to do certain optimizations for better performance.
+		 *
+		 * Set this to `false` if you use any of the following CSS units: `vh`, `vw`, `vmin`, `vmax`.
+		 *
+		 * @type {boolean}
+		 */
+		assumeViewportIndependence: true
+	};
+
+	/**
+	 * Resizes the given elements.
+	 *
+	 * @param {HTMLElement[]} elements
+	 */
+	function resizeElements(elements) {
+		elements = elements.filter(function (e) {
+			var codeStyles = getStyles(e);
+			var whiteSpace = codeStyles['white-space'];
+			return whiteSpace === 'pre-wrap' || whiteSpace === 'pre-line';
+		});
+
+		if (elements.length == 0) {
+			return;
+		}
+
+		var infos = elements.map(function (element) {
+			var codeElement = element.querySelector('code');
+			var lineNumbersWrapper = element.querySelector('.line-numbers-rows');
+			if (!codeElement || !lineNumbersWrapper) {
+				return undefined;
+			}
+
+			/** @type {HTMLElement} */
+			var lineNumberSizer = element.querySelector('.line-numbers-sizer');
+			var codeLines = codeElement.textContent.split(NEW_LINE_EXP);
+
+			if (!lineNumberSizer) {
+				lineNumberSizer = document.createElement('span');
+				lineNumberSizer.className = 'line-numbers-sizer';
+
+				codeElement.appendChild(lineNumberSizer);
+			}
+
+			lineNumberSizer.innerHTML = '0';
+			lineNumberSizer.style.display = 'block';
+
+			var oneLinerHeight = lineNumberSizer.getBoundingClientRect().height;
+			lineNumberSizer.innerHTML = '';
+
+			return {
+				element: element,
+				lines: codeLines,
+				lineHeights: [],
+				oneLinerHeight: oneLinerHeight,
+				sizer: lineNumberSizer,
+			};
+		}).filter(Boolean);
+
+		infos.forEach(function (info) {
+			var lineNumberSizer = info.sizer;
+			var lines = info.lines;
+			var lineHeights = info.lineHeights;
+			var oneLinerHeight = info.oneLinerHeight;
+
+			lineHeights[lines.length - 1] = undefined;
+			lines.forEach(function (line, index) {
+				if (line && line.length > 1) {
+					var e = lineNumberSizer.appendChild(document.createElement('span'));
+					e.style.display = 'block';
+					e.textContent = line;
+				} else {
+					lineHeights[index] = oneLinerHeight;
+				}
+			});
+		});
+
+		infos.forEach(function (info) {
+			var lineNumberSizer = info.sizer;
+			var lineHeights = info.lineHeights;
+
+			var childIndex = 0;
+			for (var i = 0; i < lineHeights.length; i++) {
+				if (lineHeights[i] === undefined) {
+					lineHeights[i] = lineNumberSizer.children[childIndex++].getBoundingClientRect().height;
+				}
+			}
+		});
+
+		infos.forEach(function (info) {
+			var lineNumberSizer = info.sizer;
+			var wrapper = info.element.querySelector('.line-numbers-rows');
+
+			lineNumberSizer.style.display = 'none';
+			lineNumberSizer.innerHTML = '';
+
+			info.lineHeights.forEach(function (height, lineNumber) {
+				wrapper.children[lineNumber].style.height = height + 'px';
+			});
+		});
+	}
+
+	/**
+	 * Returns style declarations for the element
+	 *
+	 * @param {Element} element
+	 */
+	function getStyles(element) {
+		if (!element) {
+			return null;
+		}
+
+		return window.getComputedStyle ? getComputedStyle(element) : (element.currentStyle || null);
+	}
+
+	var lastWidth = undefined;
+	window.addEventListener('resize', function () {
+		if (config.assumeViewportIndependence && lastWidth === window.innerWidth) {
+			return;
+		}
+		lastWidth = window.innerWidth;
+
+		resizeElements(Array.prototype.slice.call(document.querySelectorAll('pre.' + PLUGIN_NAME)));
+	});
+
+	Prism.hooks.add('complete', function (env) {
+		if (!env.code) {
+			return;
+		}
+
+		var code = /** @type {Element} */ (env.element);
+		var pre = /** @type {HTMLElement} */ (code.parentNode);
+
+		// works only for  wrapped inside 
 (not inline)
+		if (!pre || !/pre/i.test(pre.nodeName)) {
+			return;
+		}
+
+		// Abort if line numbers already exists
+		if (code.querySelector('.line-numbers-rows')) {
+			return;
+		}
+
+		// only add line numbers if  or one of its ancestors has the `line-numbers` class
+		if (!Prism.util.isActive(code, PLUGIN_NAME)) {
+			return;
+		}
+
+		// Remove the class 'line-numbers' from the 
+		code.classList.remove(PLUGIN_NAME);
+		// Add the class 'line-numbers' to the 
+		pre.classList.add(PLUGIN_NAME);
+
+		var match = env.code.match(NEW_LINE_EXP);
+		var linesNum = match ? match.length + 1 : 1;
+		var lineNumbersWrapper;
+
+		var lines = new Array(linesNum + 1).join('');
+
+		lineNumbersWrapper = document.createElement('span');
+		lineNumbersWrapper.setAttribute('aria-hidden', 'true');
+		lineNumbersWrapper.className = 'line-numbers-rows';
+		lineNumbersWrapper.innerHTML = lines;
+
+		if (pre.hasAttribute('data-start')) {
+			pre.style.counterReset = 'linenumber ' + (parseInt(pre.getAttribute('data-start'), 10) - 1);
+		}
+
+		env.element.appendChild(lineNumbersWrapper);
+
+		resizeElements([pre]);
+
+		Prism.hooks.run('line-numbers', env);
+	});
+
+	Prism.hooks.add('line-numbers', function (env) {
+		env.plugins = env.plugins || {};
+		env.plugins.lineNumbers = true;
+	});
+
+}());
diff --git a/vendor/valence/website/static/syntax-theme.css b/vendor/valence/website/static/syntax-theme.css
new file mode 100644
index 00000000..9cdeaadf
--- /dev/null
+++ b/vendor/valence/website/static/syntax-theme.css
@@ -0,0 +1,232 @@
+/*
+ * theme "One Dark" generated by syntect
+ */
+
+.z-code {
+ color: #6c7079;
+ background-color: #272D3E;
+}
+
+.z-text, .z-source {
+ color: #abb2bf;
+}
+.z-variable.z-parameter.z-function {
+ color: #adb7c9;
+}
+.z-comment, .z-punctuation.z-definition.z-comment {
+ color: #5f697a;
+font-style: italic;
+}
+.z-none {
+ color: #adb7c9;
+}
+.z-keyword.z-operator {
+ color: #adb7c9;
+}
+.z-keyword {
+ color: #cd74e8;
+}
+.z-variable {
+ color: #eb6772;
+}
+.z-entity.z-name.z-function, .z-meta.z-require, .z-support.z-function.z-any-method {
+ color: #5cb3fa;
+}
+.z-support.z-class, .z-entity.z-name.z-class, .z-entity.z-name.z-type.z-class {
+ color: #f0c678;
+}
+.z-meta.z-class {
+ color: #adb7c9;
+}
+.z-keyword.z-other.z-special-method {
+ color: #5cb3fa;
+}
+.z-storage {
+ color: #cd74e8;
+}
+.z-support.z-function {
+ color: #5ebfcc;
+}
+.z-string, .z-constant.z-other.z-symbol, .z-entity.z-other.z-inherited-class {
+ color: #9acc76;
+}
+.z-constant.z-numeric {
+ color: #db9d63;
+}
+.z-none {
+ color: #db9d63;
+}
+.z-none {
+ color: #db9d63;
+}
+.z-constant {
+ color: #db9d63;
+}
+.z-entity.z-name.z-tag {
+ color: #eb6772;
+}
+.z-entity.z-other.z-attribute-name {
+ color: #db9d63;
+}
+.z-entity.z-other.z-attribute-name.z-id, .z-punctuation.z-definition.z-entity {
+ color: #db9d63;
+}
+.z-meta.z-selector {
+ color: #cd74e8;
+}
+.z-none {
+ color: #db9d63;
+}
+.z-markup.z-heading .z-punctuation.z-definition.z-heading, .z-entity.z-name.z-section {
+ color: #5cb3fa;
+}
+.z-keyword.z-other.z-unit {
+ color: #db9d63;
+}
+.z-markup.z-bold, .z-punctuation.z-definition.z-bold {
+ color: #f0c678;
+}
+.z-markup.z-italic, .z-punctuation.z-definition.z-italic {
+ color: #cd74e8;
+}
+.z-markup.z-raw.z-inline {
+ color: #9acc76;
+}
+.z-string.z-other.z-link, .z-punctuation.z-definition.z-string.z-end.z-markdown {
+ color: #eb6772;
+}
+.z-meta.z-link {
+ color: #db9d63;
+}
+.z-markup.z-list {
+ color: #eb6772;
+}
+.z-markup.z-quote {
+ color: #db9d63;
+}
+.z-meta.z-separator {
+ color: #adb7c9;
+ background-color: #515151;
+}
+.z-markup.z-inserted {
+ color: #9acc76;
+}
+.z-markup.z-deleted {
+ color: #eb6772;
+}
+.z-markup.z-changed {
+ color: #cd74e8;
+}
+.z-constant.z-other.z-color {
+ color: #5ebfcc;
+}
+.z-string.z-regexp {
+ color: #5ebfcc;
+}
+.z-constant.z-character.z-escape {
+ color: #5ebfcc;
+}
+.z-punctuation.z-section.z-embedded, .z-variable.z-interpolation {
+ color: #c94e42;
+}
+.z-invalid.z-illegal {
+ color: #ffffff;
+ background-color: #e05252;
+}
+.z-invalid.z-broken {
+ color: #2d2d2d;
+ background-color: #f99157;
+}
+.z-invalid.z-deprecated {
+ color: #2c323d;
+ background-color: #d27b53;
+}
+.z-invalid.z-unimplemented {
+ color: #2c323d;
+ background-color: #747369;
+}
+.z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #eb6772;
+}
+.z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #9acc76;
+}
+.z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-meta.z-structure.z-dictionary.z-json .z-string.z-quoted.z-double.z-json {
+ color: #eb6772;
+}
+.z-source.z-json .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-meta.z-structure.z-dictionary.z-json .z-meta.z-structure.z-dictionary.z-value.z-json .z-string.z-quoted.z-double.z-json {
+ color: #9acc76;
+}
+.z-text.z-html.z-laravel-blade .z-source.z-php.z-embedded.z-line.z-html .z-entity.z-name.z-tag.z-laravel-blade {
+ color: #cd74e8;
+}
+.z-text.z-html.z-laravel-blade .z-source.z-php.z-embedded.z-line.z-html .z-support.z-constant.z-laravel-blade {
+ color: #cd74e8;
+}
+.z-source.z-python .z-meta.z-function.z-python .z-meta.z-function.z-parameters.z-python .z-variable.z-parameter.z-function.z-python {
+ color: #db9d63;
+}
+.z-source.z-python .z-meta.z-function-call.z-python .z-support.z-type.z-python {
+ color: #5ebfcc;
+}
+.z-source.z-python .z-keyword.z-operator.z-logical.z-python {
+ color: #cd74e8;
+}
+.z-source.z-python .z-meta.z-class.z-python .z-punctuation.z-definition.z-inheritance.z-begin.z-python {
+ color: #f0c678;
+}
+.z-source.z-python .z-meta.z-class.z-python .z-punctuation.z-definition.z-inheritance.z-end.z-python {
+ color: #f0c678;
+}
+.z-source.z-python .z-meta.z-function-call.z-python .z-meta.z-function-call.z-arguments.z-python .z-variable.z-parameter.z-function.z-python {
+ color: #db9d63;
+}
+.z-text.z-html.z-basic .z-source.z-php.z-embedded.z-block.z-html .z-support.z-constant.z-std.z-php {
+ color: #db9d63;
+}
+.z-text.z-html.z-basic .z-source.z-php.z-embedded.z-block.z-html .z-meta.z-namespace.z-php .z-entity.z-name.z-type.z-namespace.z-php {
+ color: #f0c678;
+}
+.z-source.z-js .z-meta.z-function.z-js .z-support.z-constant.z-js {
+ color: #db9d63;
+}
+.z-text.z-html.z-basic` .z-source.z-php.z-embedded.z-block.z-html .z-constant.z-other.z-php {
+ color: #cd74e8;
+}
+.z-text.z-html.z-basic .z-source.z-php.z-embedded.z-block.z-html .z-support.z-other.z-namespace.z-php {
+ color: #db9d63;
+}
+.z-text.z-tex.z-latex .z-meta.z-function.z-environment.z-math.z-latex .z-string.z-other.z-math.z-block.z-environment.z-latex .z-meta.z-definition.z-label.z-latex .z-variable.z-parameter.z-definition.z-label.z-latex {
+ color: #adb7c9;
+}
+.z-text.z-tex.z-latex .z-meta.z-function.z-emph.z-latex .z-markup.z-italic.z-emph.z-latex {
+ color: #cd74e8;
+font-style: italic;
+}
+.z-source.z-js .z-variable.z-other.z-readwrite.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-function-call.z-with-arguments.z-js .z-variable.z-function.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-group.z-braces.z-round .z-meta.z-group.z-braces.z-curly .z-meta.z-function-call.z-method.z-without-arguments.z-js .z-variable.z-function.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-group.z-braces.z-round .z-meta.z-group.z-braces.z-curly .z-variable.z-other.z-object.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-group.z-braces.z-round .z-meta.z-group.z-braces.z-curly .z-constant.z-other.z-object.z-key.z-js .z-string.z-unquoted.z-label.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-group.z-braces.z-round .z-meta.z-group.z-braces.z-curly .z-constant.z-other.z-object.z-key.z-js .z-punctuation.z-separator.z-key-value.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-group.z-braces.z-round .z-meta.z-group.z-braces.z-curly .z-meta.z-function-call.z-method.z-with-arguments.z-js .z-variable.z-function.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-function-call.z-method.z-with-arguments.z-js .z-variable.z-function.z-js {
+ color: #adb7c9;
+}
+.z-source.z-js .z-meta.z-function-call.z-method.z-without-arguments.z-js .z-variable.z-function.z-js {
+ color: #adb7c9;
+}
diff --git a/vendor/valence/website/templates/_macros.html b/vendor/valence/website/templates/_macros.html
new file mode 100644
index 00000000..33b5acd8
--- /dev/null
+++ b/vendor/valence/website/templates/_macros.html
@@ -0,0 +1,25 @@
+{% macro render_header() %}
+{% set section = get_section(path="_index.md") %}
+
+    
+
+
+
+{% endmacro render_header %}
diff --git a/vendor/valence/website/templates/_variables.html b/vendor/valence/website/templates/_variables.html
new file mode 100644
index 00000000..ba063adb
--- /dev/null
+++ b/vendor/valence/website/templates/_variables.html
@@ -0,0 +1,19 @@
+
diff --git a/vendor/valence/website/templates/index.html b/vendor/valence/website/templates/index.html
new file mode 100644
index 00000000..8f6f7f44
--- /dev/null
+++ b/vendor/valence/website/templates/index.html
@@ -0,0 +1,176 @@
+{% import "_macros.html" as macros %}
+
+
+  
+    
+    {% block title %}{{ config.title }}{% endblock title %}
+    
+    {% block favicon %}
+    
+    {% endblock favicon %} {% include "_variables.html" %} {% block fonts %}
+    
+    
+  {% endblock fonts %}
+  
+  
+  
+  
+
+
+  {% block header %}
+
+  
+ {{ macros::render_header() }} +
+ +
+ {% block hero %} + +
+

+ Minecraft servers for the modern age +

+

+ Valence is a Rust framework for building modular and high performance Minecraft servers. +

+
+ GitHub Repo stars + GitHub release (with filter) + Discord +
+ Quick Start +
+ +
+

+
+fn pause_on_crouch(
+    mut events: EventReader<SneakEvent>,
+    mut board: ResMut<LifeBoard>,
+    mut layers: Query<&mut EntityLayer>,
+) {
+    for event in events.iter() {
+        if event.state == SneakState::Start {
+            let mut layer = layers.single_mut();
+
+            if board.playing {
+                board.playing = false;
+                layer.set_action_bar("Paused".italic().color(Color::RED));
+            } else {
+                board.playing = true;
+                layer.set_action_bar("Playing".italic().color(Color::GREEN));
+            }
+        }
+    }
+}
+
+ + + {% endblock hero %} +
+ + {% endblock header %} + +
+ {% block toc %} {% if section.toc %} {% set toc = section.toc %} {% elif + page.toc %} {% set toc = page.toc %} {% endif %} {% if toc %} +
+
+ {% for h in toc %} + + {% if h.children %} {% for h2 in h.children %} + + {% endfor %} {% endif %} {% endfor %} +
+
+ {% endif %} {% endblock toc %} + +
+ {% block content %} +
Overview
+ {{ section.content | safe }} {% endblock content %} +
+ + {% block sidebar %} {% endblock sidebar %} +
+ {% block footer %} + + {% endblock footer %} + + diff --git a/vendor/valence/website/templates/page.html b/vendor/valence/website/templates/page.html new file mode 100644 index 00000000..c6d86107 --- /dev/null +++ b/vendor/valence/website/templates/page.html @@ -0,0 +1,15 @@ +{% import "_macros.html" as macros %} +{% extends "index.html" %} + +{% block title %}{{ page.title }} | {{ super() }} {% endblock title %} + +{% block header %} +
+ {{ macros::render_header() }} +
+{% endblock header %} + +{% block content %} +
{{ page.description }}
+{{ page.content | safe }} +{% endblock content %} \ No newline at end of file diff --git a/vendor/valence/website/templates/shortcodes/issue.html b/vendor/valence/website/templates/shortcodes/issue.html new file mode 100644 index 00000000..3006d9b6 --- /dev/null +++ b/vendor/valence/website/templates/shortcodes/issue.html @@ -0,0 +1 @@ +#{{ id }} \ No newline at end of file